1 Commits

Author SHA1 Message Date
afrina 026e31d037 feat: docker setup and sync lejer am/imbang duga with kaunter (#1)
Reviewed-on: #1
2026-10-27 11:04:43 +08:00
19 changed files with 400 additions and 134 deletions
+16
View File
@@ -0,0 +1,16 @@
.git
.gitea
node_modules
vendor
.env
.env.*
!.env.example
storage/logs
storage/framework/cache
storage/framework/sessions
storage/framework/views
storage/debugbar
npm-debug.log
Dockerfile
docker-compose.yml
docker-compose.staging.yml
+14 -11
View File
@@ -2,10 +2,11 @@ APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:I+gVCBqCeGsUQ3vwwW23D5wVgdgMqwM2ozBkqDFY9o0=
APP_DEBUG=true
APP_URL=http://adminv3.localhost
API_URL=http://apiv3.localhost
API_URL_KOOP=http://apiv3.localhost
API_URL_PKB=http://apiv2.localhost
APP_URL=http://localhost:8082
API_BROWSER_URL=http://localhost:8080
API_URL=http://api_arrahn-app-1:8000
API_URL_KOOP=http://api_arrahn-app-1:8000
API_URL_PKB=http://api_arrahn-app-1:8000
API_ARRAHN_PORTAL_URL=http://pay.arrahn.com.my
ADMIN_VERSION=V3
@@ -14,11 +15,13 @@ LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=database_arosv3
DB_HOST=host.docker.internal
DB_PORT=3306
DB_DATABASE=kaunterpkb
DB_DATABASE=kaunter_erahn
DB_USERNAME=root
DB_PASSWORD=secret
DB_PASSWORD=root
# Windows host IP from WSL: ip route | awk '/default/{print $3}'
LARAGON_HOST=172.28.0.1
BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
@@ -56,7 +59,7 @@ MIX_USE_DOCKER=true
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
# MIX_API_URL=http://api.arrahn
MIX_API_URL=http://apiv3.localhost
MIX_API_URL_ZONE1=http://apiv3.localhost
MIX_API_URL_ZONE2=http://apiv3.localhost
MIX_API_URL_ZONE3=http://apiv3.localhost
MIX_API_URL=http://localhost:8080
MIX_API_URL_ZONE1=http://localhost:8080
MIX_API_URL_ZONE2=http://localhost:8080
MIX_API_URL_ZONE3=http://localhost:8080
+32 -35
View File
@@ -43,24 +43,23 @@ class AkaunController extends Controller
$current = Carbon::now();
$current = new Carbon();
$tarikh_cetak = $current->toDateString();
$tarikh_mula = $tarikh_cetak;
$tarikh_akhir = $tarikh_cetak;
if($request->datemula == null){
$tarikh_cetak = $current->toDateString();
}else {
$split_date = explode('-',$request->datemula);
// $tarikh_mula = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0];
if($request->datemula != null){
$tarikh_mula = $request->datemula;
}
if($request->datehingga == null){
$tarikh_cetak = $current->toDateString();
}
else{
$split_date = explode('-',$request->datehingga);
// $tarikh_akhir = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0];
if($request->datehingga != null){
$tarikh_akhir = $request->datehingga;
}
$had_response = Http::get($request->hostname . '/api/ModalOnlineLejer/' . $request->kodcaw, [
'mula' => $tarikh_mula,
'hingga' => $tarikh_akhir,
])->json();
$had_modal_online = $had_response['had'] ?? 0;
$lejeramdata = Lejeram::orderBy('glcode')->get();
$lejeram = array();
$len = count($lejeramdata);
@@ -100,6 +99,11 @@ class AkaunController extends Controller
$kredit = ${$lejer['variable']}[$lejer->namakredit];
}
if($lejer->glcode == '7000/102')
{
$kredit = floatval($kredit) + $had_modal_online;
}
$totalkredit += floatval($kredit);
}
@@ -192,6 +196,13 @@ class AkaunController extends Controller
$hapuskira = Http::get($request->hostname.'/api/CalculationHapusKira/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json();
$xtra = Http::get($request->hostname.'/api/Xtra/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json();
$rebetAnnur = !empty(($cawangan_info['features'] ?? [])['rebet_annur']);
$rebetpromo = 0;
$pelarasanrebate = 0;
if ($rebetAnnur) {
$rebetpromo = Http::get($request->hostname.'/api/RebetPromoCalculation/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json();
$pelarasanrebate = Http::get($request->hostname.'/api/PelarasanRebate/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json();
}
//TunaiDitangan Sementara Upah
if($tarikh_imbangan2 >= '2021-04-22' && $tarikh_imbangan2 < '2021-05-05')
@@ -229,24 +240,10 @@ class AkaunController extends Controller
$untungrugiterkumpul = Http::get($request->hostname. '/api/UntungRugiTerkumpul/'. $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json();
$hartasemasa = [];
if($request->kodcaw == '010219')
{
if($tarikh_imbangan2 >= '2023-02-16')
{
$hutang = Http::withOptions(['verify' => config('app.api_verify')])->get($request->hostname.'/admin/ig/penghutang' ,['kodcaw' => $request->kodcaw, 'tarikh' => $tarikh_imbangan2])->json();
$bayaran_hutang = Http::withOptions(['verify' => config('app.api_verify')])->get($request->hostname.'/admin/ig/bayaran_penghutang' ,['kodcaw' => $request->kodcaw, 'tarikh' => $tarikh_imbangan2])->json();
//if($bayaran_hutang > 0) array_push($hartasemasa,['glcode' => '8000/501','descpt' => 'Bayaran Penghutang', 'amaun' => $bayaran_hutang]);
$totaltunaiditangan = $totaltunaiditangan;
$penghutangkaki = $hutang['bakihutang'] - $bayaran_hutang;
}else{
$penghutangkaki = $penghutangkaki;
}
}
// $hartasemasa = ['serahan' => $imbangduga['serahan'],'pinjamankoop' => $pinjamandiberi['pinjamankoop'],'emaspalsu' => $pinjamandiberi['emaspalsu'],'tunaiditangan' => $tunaiditangan['bakiakhir']];
if($totaltunaiditangan > 0) array_push($hartasemasa,['glcode' => '1000/011','descpt' => 'Tunai Di Tangan', 'amaun' => $totaltunaiditangan]);
if($pembiayaantawarruq > 0) array_push($hartasemasa,['glcode' => '1000/021','descpt' => 'Pembiayaan Di Bawah Tawarruq', 'amaun' => $pembiayaantawarruq]);
if($totaltunaiditangan > 0) array_push($hartasemasa,['glcode' => '1000/010','descpt' => 'Tunai Di Tangan', 'amaun' => $totaltunaiditangan]);
if($pembiayaantawarruq > 0) array_push($hartasemasa,['glcode' => '1000/010','descpt' => 'Pembiayaan Di Bawah Tawarruq', 'amaun' => $pembiayaantawarruq]);
if($penghutangkaki > 0) array_push($hartasemasa,['glcode' => '1000/011','descpt' => 'Penghutang Kakitangan', 'amaun' => $penghutangkaki]);
//array_push($hartasemasa,['glcode' => '1000/045','descpt' => 'Serahan Bayaran Online', 'amaun' => 0.00]);
if($keuntungan > 0) array_push($hartasemasa,['glcode' => '1000/211','descpt' => 'Keuntungan Tertangguh', 'amaun' => $keuntungan]);
@@ -258,6 +255,7 @@ class AkaunController extends Controller
if($imbangduga['pindahkekpkb'] > 0) array_push($hartasemasa,['glcode' => '1000/090','descpt' => 'Pindah Ke KPKB(IP)', 'amaun' => $imbangduga['pindahkekpkb']]);
if($peruntukanhapuskira > 0) array_push($hartasemasa,['glcode' => '1000/015','descpt' => 'Peruntukan Hapus Kira', 'amaun' => $peruntukanhapuskira]);
if($belian1stop > 0) array_push($hartasemasa,['glcode' => '8000/501','descpt' => 'Belian 1 Stop', 'amaun' => $belian1stop]);
if($rebetpromo > 0) array_push($hartasemasa,['glcode' => '5000/242','descpt' => 'Diskaun Promosi', 'amaun' => ($rebetpromo * -1)]);
$totalhartasemasa = 0;
foreach($hartasemasa as $index => $hs)
@@ -278,7 +276,7 @@ class AkaunController extends Controller
if($panjar['keraian'] > 0) array_push($tanggungansemasa,['glcode' => '3000/019','descpt' => 'Panjar - Keraian Dan Promosi','amaun' => -$panjar['keraian']]);
if($bakilelong['bakilelong'] != 0) array_push($tanggungansemasa,['glcode' => '7000/090','descpt' => 'Baki Lelong','amaun' => $bakilelong['bakilelong']]);
if($bakilelong['rugilelong'] != 0) array_push($tanggungansemasa,['glcode' => '3000/020','descpt' => 'Kerugian Lelong','amaun' => $bakilelong['rugilelong']]);
if($wtd > 0) array_push($tanggungansemasa,['glcode' => '3000/021','descpt' => 'Wang Tak Dituntut','amaun' => $wtd]);
if($wtd > 0) array_push($tanggungansemasa,['glcode' => '3000/021','descpt' => 'SERAHAN WANG TAK DITUNTUT','amaun' => $wtd]);
if($cajlelong > 0) array_push($tanggungansemasa,['glcode' => '5000/213','descpt' => 'Pendapatan Caj Lelong','amaun' => $cajlelong]);
if($untungrugiterkumpul != 0) array_push($tanggungansemasa,['glcode' => '7000/101','descpt' => 'Untung/Rugi Terkumpul','amaun' => $untungrugiterkumpul]);
if($cajperkhidmatan > 0) array_push($tanggungansemasa,['glcode' => '5000/213','descpt' => 'Caj Perkhidmatan Terkumpul','amaun' => $cajperkhidmatan]);
@@ -289,6 +287,8 @@ class AkaunController extends Controller
if($utgterkumpulxtra > 0) array_push($tanggungansemasa,['glcode' => '7000/201','descpt' => 'Untung/Rugi Terkumpul Xtra','amaun' => $utgterkumpulxtra]);
if($jualan1stop > 0) array_push($tanggungansemasa,['glcode' => '9000/501','descpt' => 'Jualan 1 Stop','amaun' => $jualan1stop]);
if($hapuskira > 0) array_push($tanggungansemasa,['glcode' => '3000/011','descpt' => 'Hapus Kira','amaun' => -$hapuskira]);
if($rebetpromo > 0) array_push($tanggungansemasa,['glcode' => '5000/242','descpt' => 'Diskaun Promosi', 'amaun' => ($rebetpromo * -1)]);
if($pelarasanrebate > 0) array_push($tanggungansemasa,['glcode' => '5000/243','descpt' => 'Pelarasan Rebate', 'amaun' => ($pelarasanrebate * -1)]);
$totaltanggungansemasa = 0;
foreach($tanggungansemasa as $index => $ts)
@@ -303,18 +303,15 @@ class AkaunController extends Controller
$totaluntungrugi = 0;
$totaluntungrugi = $totaltanggungansemasa + $untungrugi;
if(isset($request->jenis))
{
$viewData = compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail');
if($request->jenis == 'pdf')
{
$pdf = PDF::loadView('akaun.laporan_imbanduga',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail'))->setPaper('a4', 'potrait');
$pdf = PDF::loadView('akaun.laporan_imbanduga', $viewData)->setPaper('a4', 'potrait');
return $pdf->download('laporan_imbangduga_' . $request->kodcaw .'_'. $tarikh_imbangan2 . '.pdf');
}else{
return view('akaun.laporan_imbanduga',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail'));
}
}
// return view('akaun.laporan_imbanduga',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail'));
return view('akaun.laporan_imbanduga', $viewData);
}
////ainizazi
public function cetakLaporanGadai(Request $request){
+1
View File
@@ -30,6 +30,7 @@ class Kernel extends HttpKernel
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\RewriteApiHostname::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
@@ -0,0 +1,28 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class RewriteApiHostname
{
/**
* Vue posts the browser API URL as "hostname". PHP must call the
* Docker-reachable API_URL instead of localhost.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if ($request->has('hostname')) {
$request->merge([
'hostname' => api_url_for_server($request->input('hostname')),
]);
}
return $next($request);
}
}
+55
View File
@@ -0,0 +1,55 @@
<?php
if (!function_exists('api_url_for_browser')) {
/**
* Base URL for JavaScript in the browser.
* API_URL may be a Docker-only hostname (api_arrahn-app-1). Browsers use API_BROWSER_URL.
* Docker dev often uses host.docker.internal for PHP→host; browsers may not resolve it.
* Production URLs are unchanged when API_BROWSER_URL is empty.
*/
function api_url_for_browser(): string
{
$browser = rtrim((string) config('api.browser_url'), '/');
if ($browser !== '') {
return $browser;
}
$url = rtrim((string) config('api.url'), '/');
return str_ireplace('host.docker.internal', '127.0.0.1', $url);
}
}
if (!function_exists('api_url_for_server')) {
/**
* Base URL for PHP Http::get/put from this container.
* Vue posts MIX_API_URL (localhost:8080) as "hostname"; that is for the browser.
* Inside Docker, localhost is this container — map it to API_URL.
*/
function api_url_for_server(?string $url = null): string
{
$internal = rtrim((string) config('api.url'), '/');
if ($url === null || $url === '') {
return $internal;
}
$url = rtrim($url, '/');
$browser = rtrim((string) config('api.browser_url'), '/');
if ($internal === '') {
return $url;
}
if ($browser !== '' && strcasecmp($url, $browser) === 0) {
return $internal;
}
$host = parse_url($url, PHP_URL_HOST);
if (in_array($host, ['localhost', '127.0.0.1', 'host.docker.internal'], true)) {
return $internal;
}
return $url;
}
}
+4 -1
View File
@@ -32,7 +32,10 @@
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
"files": [
"app/helpers.php"
]
},
"autoload-dev": {
"psr-4": {
+1
View File
@@ -1,6 +1,7 @@
<?php
return [
'url' => env('API_URL'),
'browser_url' => env('API_BROWSER_URL'),
'url_koop' => env('API_URL_KOOP'),
'url_pkb' => env('API_URL_PKB'),
'url_arrahn_portal' => env('API_ARRAHN_PORTAL_URL'),
+62
View File
@@ -0,0 +1,62 @@
name: admin_erahn_staging
services:
app:
image: ${APP_IMAGE:-git.koppkb.com/kopkb/admin-erahn}:${IMAGE_TAG:-staging}
build:
context: .
dockerfile: docker/php/Dockerfile
target: staging
container_name: admin_erahn_staging_app
working_dir: /var/www/html
volumes:
- storage_staging:/var/www/html/storage
- ./.env.staging:/var/www/html/.env.staging:ro
env_file:
- .env.staging
environment:
APP_ENV: staging
USE_STAGING_ENV: "true"
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
mysql:
condition: service_healthy
restart: unless-stopped
web:
image: nginx:1.25-alpine
container_name: admin_erahn_staging_web
ports:
- "${HTTP_PORT:-8092}:80"
volumes:
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./public:/var/www/html/public:ro
depends_on:
- app
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: admin_erahn_staging_mysql
command: --default-authentication-plugin=mysql_native_password
ports:
- "127.0.0.1:${MYSQL_PUBLISH_PORT:-3310}:3306"
environment:
MYSQL_DATABASE: admin_erahn
MYSQL_USER: adminuser
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root
volumes:
- mysql_staging_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-proot"]
interval: 5s
timeout: 5s
retries: 30
start_period: 20s
restart: unless-stopped
volumes:
mysql_staging_data:
storage_staging:
+39
View File
@@ -0,0 +1,39 @@
server {
listen 80;
server_name _;
root /var/www/html/public;
index index.php index.html;
charset utf-8;
client_max_body_size 50M;
location / {
# Production Apache public/.htaccess 301-strips trailing slashes.
# Nginx ignores .htaccess, so without this /path/ 404s while /path works.
rewrite ^/(.*)/$ /$1 last;
try_files $uri @php;
}
location @php {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_read_timeout 120s;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_read_timeout 120s;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
+60
View File
@@ -0,0 +1,60 @@
FROM php:7.4-fpm AS base
WORKDIR /var/www/html
# PHP 7.4 uses Debian Bullseye; use its archived package repositories.
# Archived security metadata expires, but package signatures remain verified.
RUN printf '%s\n' \
'deb https://archive.debian.org/debian bullseye main' \
'deb [check-valid-until=no] https://archive.debian.org/debian-security bullseye-security main' \
> /etc/apt/sources.list \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get -o Acquire::Retries=3 update \
&& apt-get install -y --no-install-recommends \
git \
pkg-config \
unzip \
libonig-dev \
libzip-dev \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j"$(nproc)" \
pdo_mysql \
mbstring \
bcmath \
zip \
exif \
gd \
&& rm -rf /var/lib/apt/lists/*
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
COPY docker/php/php.ini /usr/local/etc/php/conf.d/app.ini
COPY docker/php/zz-clear-env.conf /usr/local/etc/php-fpm.d/zz-clear-env.conf
COPY docker/php/entrypoint.sh /usr/local/bin/app-entrypoint.sh
# Normalize Windows checkout line endings before executing the script.
RUN sed -i 's/\r$//' /usr/local/bin/app-entrypoint.sh \
&& chmod +x /usr/local/bin/app-entrypoint.sh \
&& usermod -u 1000 www-data && groupmod -g 1000 www-data
ENTRYPOINT ["app-entrypoint.sh"]
CMD ["php-fpm"]
FROM base AS staging
COPY --chown=www-data:www-data . /var/www/html
RUN composer install --no-interaction --prefer-dist --no-dev --optimize-autoloader --no-scripts \
&& mkdir -p \
storage/logs \
storage/framework/cache/data \
storage/framework/views \
storage/framework/sessions \
storage/app/public \
bootstrap/cache \
&& chown -R www-data:www-data storage bootstrap/cache vendor
FROM base AS development
+35
View File
@@ -0,0 +1,35 @@
#!/bin/sh
set -e
cd /var/www/html
if [ "${USE_STAGING_ENV:-false}" = "true" ] && [ -f .env.staging ]; then
cp .env.staging .env
fi
if [ -f composer.json ]; then
if [ -f vendor/autoload.php ] && [ "${USE_STAGING_ENV:-false}" = "true" ]; then
: # vendor is baked into the staging image
elif [ "${USE_STAGING_ENV:-false}" = "true" ]; then
composer install --no-interaction --prefer-dist --no-dev --optimize-autoloader --no-scripts
else
composer install --no-interaction --prefer-dist
fi
fi
mkdir -p \
storage/logs \
storage/framework/cache/data \
storage/framework/views \
storage/framework/sessions \
storage/app/public \
bootstrap/cache
if [ -f artisan ]; then
php artisan package:discover --ansi
php artisan storage:link --force >/dev/null 2>&1 || true
fi
chown -R www-data:www-data storage bootstrap/cache
exec docker-php-entrypoint "$@"
+4
View File
@@ -0,0 +1,4 @@
memory_limit=512M
upload_max_filesize=50M
post_max_size=50M
max_execution_time=120
+3
View File
@@ -0,0 +1,3 @@
[www]
; Pass container env vars (from compose env_file) through to PHP workers.
clear_env = no
+16 -28
View File
@@ -55,15 +55,13 @@
<i class="animate-spin fas fa-circle-notch fixed fa-4x m-auto text-yellow-500" style="left:48% !important;top:45% !important;"></i>
</div>
<vue-friendly-iframe v-show="showLoader == false" :style="{visibility: showLoader ? 'hidden' : 'visible'}" class="h-full w-full"
:src="''"
frame-id="myIframe"
@load="onLoad"
@iframe-load="LoadedReady"
<iframe
v-show="showLoader == false"
class="h-full w-full"
name="iframe_laporan"
ref="friendlyIframe"></vue-friendly-iframe>
<!-- <iframe :style="{visibility: showLoader ? 'hidden' : 'visible'}" name="iframe_laporan" scrolling="true" :load="onLoad()"></iframe> -->
ref="reportFrame"
@load="onReportLoad"
></iframe>
</div>
<!--footer-->
<div class="flex items-center justify-end p-6 border-t border-solid border-blueGray-200 rounded-b">
@@ -84,7 +82,7 @@
</div>
</template>
<style>
.vue-friendly-iframe iframe {
iframe[name="iframe_laporan"] {
height:100% !important;
width:100% !important;
}
@@ -127,32 +125,22 @@ export default {
},
async generateview(){
await this.setJenis('view');
// Vue.swal({
// title: 'Memuatkan...',
// allowEscapeKey : false,
// allowOutsideClick: false,
// showCancelButton: false,
// showConfirmButton: false
// });
this.showLoader = true;
this.pendingStatus = 'loading';
this.showModal = true;
await this.$nextTick();
this.$refs.formimbangduga.submit();
},
toggleModal: function(){
this.showLoader = true
this.pendingStatus = 'none'
this.showModal = !this.showModal;
},
async onLoad() {
await this.$refs.formimbangduga.submit()
},
async LoadedReady(){
await setTimeout(() => {
this.showLoader = false
this.pendingStatus = 'ok'
}, 10000);
onReportLoad() {
if (this.pendingStatus === 'loading') {
this.showLoader = false;
this.pendingStatus = 'ok';
}
},
Urlredirect: function() {
return window.route('cetak.imbangduga')
@@ -409,28 +409,16 @@
<table id="tarikh_ib">
<tr>
@php
$api_url = request()->hostname;
@endphp
@if(Str::contains($api_url, 'apiv3.arrahn'))
<th colspan="5"><b>LAPORAN IMBANGAN DUGA CAWANGAN (arOSv3)</b></th>
@else
<th> </th>
<td cospan="2" > <B><U>LAPORAN IMBANGAN DUGA CAWANGAN</U></B></td>
@endif
</tr>
</table>
<table id="tarikh_ib">
<tr>
<td style="width:20%; white-space: nowrap;"><b>Tarikh Laporan</b></td >
<td style="width:20%; white-space: nowrap;"> {{ ($tarikh_imbangan2) ? $tarikh_imbangan2 : ''}} </td>
<td style="width:150%; white-space: nowrap;"><b>Tarikh Cetak</b></td>
<td style="width:20%; white-space: nowrap;"> {{$tarikh_cetak}} </td>
</tr>
<tr><td style="width:10px" ><b>Tarikh Laporan</b></td ><td style="width:20px"> {{ ($tarikh_imbangan2) ? $tarikh_imbangan2 : ''}} </td><td style="width:18px" ><b>Tarikh Cetak</b></td><td style="width:25px" > {{$tarikh_cetak}} </td> </tr>
@@ -323,15 +323,7 @@
<br>
<table id="title">
@php
$api_url = request()->hostname;
@endphp
@if(Str::contains($api_url, 'apiv3.arrahn'))
<td> <b><u>LEJER AM (arOSv3)</u></b></td>
@else
<td> <b><u>LEJER AM</u></b></td>
@endif
</table>
<br>
@@ -339,19 +331,19 @@
<div class="tarikhcetak">
<span style="font-weight: bold;">[ TARIKH DARI : </span>
<span>@php
// $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_mula);
// $tarikhmula = $myDateTime->format('d-m-Y');
echo($tarikh_mula)
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_mula);
$tarikhmula = $myDateTime->format('d-m-Y');
echo($tarikhmula)
@endphp</span>
<span style="font-weight: bold;"> ..... </span>
<span style="font-weight: bold;">HINGGA : </span><span>@php
// $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_akhir);
// $tarikhakhir = $myDateTime->format('d-m-Y');
echo($tarikh_akhir)
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_akhir);
$tarikhakhir = $myDateTime->format('d-m-Y');
echo($tarikhakhir)
@endphp<span style="font-weight:bold"> ]</span></span>
<span style="margin-left:50px;font-weight: bold;">TARIKH CETAK : </span><span>@php
// $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
// $tarikh_cetak = $myDateTime->format('d-m-Y');
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
$tarikh_cetak = $myDateTime->format('d-m-Y');
echo($tarikh_cetak)
@endphp</span>
</div>
@@ -431,7 +423,7 @@
</table> --}}
{{-- <div style="margin-left:70px;">
<div style="margin-left:70px;">
<span class ="signature"><span style="margin-top:20px;">Disemak Oleh</span></span>
<span class ="signature">Disahkan Oleh</span>
</div> --}}
</div>
@@ -301,16 +301,7 @@
<table id="title">
@php
$api_url = request()->hostname;
@endphp
@if(Str::contains($api_url, 'apiv3.arrahn'))
<td> <b><u>LEJER AM (arOSv3) - {{ $cawangan_detail['namacaw'] }}</u></b></td>
@else
<td> <b><u>LEJER AM - {{ $cawangan_detail['namacaw'] }}</u></b></td>
@endif
<td> <b><u>LEJER AM</u></b></td>
</table>
<br>
@@ -318,19 +309,19 @@
<div class="tarikhcetak">
<span style="font-weight: bold;">[ TARIKH DARI : </span>
<span>@php
// $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_mula);
// $tarikhmula = $myDateTime->format('d-m-Y');
echo($tarikh_mula)
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_mula);
$tarikhmula = $myDateTime->format('d-m-Y');
echo($tarikhmula)
@endphp</span>
<span style="font-weight: bold;"> ..... </span>
<span style="font-weight: bold;">HINGGA : </span><span>@php
// $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_akhir);
// $tarikhakhir = $myDateTime->format('d-m-Y');
echo($tarikh_akhir)
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_akhir);
$tarikhakhir = $myDateTime->format('d-m-Y');
echo($tarikhakhir)
@endphp<span style="font-weight:bold"> ]</span></span>
<span style="margin-left:50px;font-weight: bold;">TARIKH CETAK : </span><span>@php
// $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
// $tarikh_cetak = $myDateTime->format('d-m-Y');
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
$tarikh_cetak = $myDateTime->format('d-m-Y');
echo($tarikh_cetak)
@endphp</span>
</div>
@@ -164,7 +164,7 @@ document.addEventListener('DOMContentLoaded', function () {
// =====================
// Fetch Cawangan API
// =====================
fetch("{{ config('api.url') }}/api/cawangan")
fetch("{{ api_url_for_browser() }}/api/cawangan")
.then(res => res.json())
.then(data => {
container.innerHTML = '';