67 Commits

Author SHA1 Message Date
nurafrinaalimi16 d6df3e744c fix resit tebus (diskaun promosi) 2026-09-02 16:16:15 +08:00
nurafrinaalimi16 166215b989 fix layout laporan on pc/ppc view 2026-09-02 11:32:57 +08:00
nurafrinaalimi16 f895ddb404 fix kadar rebet on teller page 2026-09-02 11:32:19 +08:00
nurafrinaalimi16 ac519f7a5f Merge remote-tracking branch 'origin/prod-kopkb' into annur-rebate 2026-09-01 11:08:05 +08:00
dev_kopkb 71537d4deb Merged in feature/kadar-anggota (pull request #403)
enable kadar anggota for all branches
2026-08-30 03:55:08 +00:00
nurafrinaalimi16 a555406b2b enable kadar anggota for all branches 2026-08-30 11:52:19 +08:00
dev_kopkb 3c9b224ad2 Merged prod-kopkb into feature/kadar-anggota 2026-08-27 02:26:21 +00:00
dev_kopkb aa8647aad4 Merged in feature/kadar-anggota (pull request #402)
feat: separate SAG versions for public and anggota
2026-08-27 02:26:03 +00:00
nurafrinaalimi16 e4d50e9e1c feat: separate SAG versions for public and anggota 2026-08-27 10:16:04 +08:00
dev_kopkb 23408d327c Merged in feature/kadar-anggota (pull request #401)
change kadar anggota to 1%
2026-08-26 15:07:45 +00:00
nurafrinaalimi16 59efddb005 change kadar anggota to 1% 2026-08-26 23:05:53 +08:00
root e1f17472eb latest stable version 2026-08-26 15:35:37 +08:00
nurafrinaalimi16 8512205b87 logo for sag latest version 2026-05-26 10:09:42 +08:00
nurafrinaalimi16 1ba51d1158 pelarasan rebate on imbang duga 2025-08-17 16:03:10 +08:00
nurafrinaalimi16 e95e7671ed fix rounded diskaun rebate 2025-05-27 12:23:23 +08:00
nurafrinaalimi16 1d4c5d47f3 fix laporan tebus 2025-05-21 16:49:24 +08:00
nurafrinaalimi16 4e5d6d4d3d fix sag hilang 2025-05-18 09:59:10 +08:00
nurafrinaalimi16 7718b137c7 fix penebusan controller 2025-05-13 11:10:10 +08:00
nurafrinaalimi16 41bacebd54 sag new version 2025-05-11 16:34:30 +08:00
nurafrinaalimi16 302584f137 rebate annur 2025-05-11 16:32:30 +08:00
nurafrinaalimi16 4ed8067239 Merge branch 'production' of https://bitbucket.org/arrahn-pkb/kaunter into annur-rebate 2025-02-05 12:18:49 +08:00
nurafrinaalimi16 a0a50b42a0 imbang duga koperasi 2025-02-03 12:14:02 +08:00
BTMS3 14677ea777 newupdatesagv2.2 2025-02-03 12:13:35 +08:00
Ain Izazi 9e840c0439 remove command 2025-02-03 12:13:35 +08:00
Ain Izazi 3d66712c4e feat audit 2025-02-03 12:13:35 +08:00
Ain Izazi 1058ece282 audit di kaunter 2025-02-03 12:13:35 +08:00
BTMS3 e5666e1106 update sag v2.2 2025-02-03 12:13:35 +08:00
Hafifie PKB 59b0118100 restore 2025-01-14 2025-02-03 12:13:35 +08:00
BTMS2 9a40c39349 tutup whatsapp 2025-02-03 12:13:35 +08:00
Hafifie PKB cbd8ea5c52 fix commit notification bawah umur 2025-02-03 12:13:35 +08:00
hafifierahman 34c06649b7 added function to detect customers that underage 2025-02-03 12:13:35 +08:00
Ain Izazi 6974e48b6e update message di khazanah dan importan work 2025-02-03 12:13:35 +08:00
Ain Izazi d52eee991b update pekerjaan lain-lain 2025-02-03 12:13:34 +08:00
Ain Izazi f2ee3b8031 add auth user di barcodescannedtebus 2025-02-03 12:13:16 +08:00
Ain Izazi ce6c2c4f3e add auth user di wakilController 2025-02-03 12:13:16 +08:00
Ain Izazi a0ed815f8e add insert record utk pendahuluan dan serah 2025-02-03 12:13:16 +08:00
Ain Izazi 330cbadeff changes funct kakitangan di khazanahcontr 2025-02-03 12:13:16 +08:00
Ain Izazi fcc61171c5 add changes di tukarcawanganupdate 2025-02-03 12:13:16 +08:00
Ain Izazi 31aaca59a9 add record password 2025-02-03 12:13:16 +08:00
BTMS2 ae417aa90d feat Log Masuk & Keluar Sistem 2025-02-03 12:13:16 +08:00
Hafifie PKB 60aac19737 fix nobaucer handle if null 2025-02-03 12:13:16 +08:00
Hafifie PKB 7927e102df added rekod tunai in aliran tunai 2025-02-03 12:13:16 +08:00
hafifierahman 887922b7da remove + 2025-02-03 12:13:16 +08:00
hafifierahman 5606c892e3 added tempblock and * for khazanah 2025-02-03 12:13:16 +08:00
hafifierahman ef9882c9c4 added block specific cawangan transaction 2025-02-03 12:13:15 +08:00
Hafifie PKB a709104090 fix bakipembiayaan + keuntungan (based on shahmi operasi) 2025-02-03 12:12:21 +08:00
Hafifie PKB d20cfa1214 fix resit PS(based on shahmin operasi) 2025-02-03 12:12:21 +08:00
Hafifie PKB 1983de4e3b added tambahpinjam 2025-02-03 12:12:21 +08:00
Hafifie PKB c77e619be5 fix bug fix 2025-02-03 12:12:20 +08:00
Hafifie PKB c388782650 added wakil in tambah pinjaman 2025-02-03 12:11:32 +08:00
Hafifie PKB d671b634ea added parameter to call in api for tebus pinjaman and auto tawarruq 2025-02-03 12:11:32 +08:00
hafifierahman 36cfb10315 added tambah pinjaman 2025-02-03 12:11:10 +08:00
hafifierahman 4e67e10d0d commit error swal fire 2025-02-03 12:10:48 +08:00
Hafifie PKB 3d1b4c7643 test AT transaction 2025-02-03 12:10:47 +08:00
hafifierahman e9f8c7ac30 added function operasi can edit perubatan asal 2025-02-03 12:10:31 +08:00
hafifierahman 5a8bc6dfed finished notification 2025-02-03 12:10:31 +08:00
Hafifie PKB 4dc4a53cdb add function in perubatan.js 2025-02-03 12:10:31 +08:00
hafifierahman e31411ae71 add scaffold for perubatan 2025-02-03 12:10:30 +08:00
Hafifie PKB 365b614020 fix perubatan 2025-02-03 12:10:30 +08:00
Hafifie PKB 9128bdbc85 added panjar 2025-02-03 12:10:30 +08:00
hafifierahman 85510305e3 addded notification 2025-02-03 12:10:30 +08:00
hafifierahman b2dfd421a7 first commit for kaunter in fixing cash deposit 2025-02-03 12:10:30 +08:00
nurafrinaalimi16 fc15e555ec imbang duga koperasi 2025-02-02 16:36:31 +08:00
nurafrinaalimi16 9031e8d7d8 imbang duga koperasi 2025-02-02 16:35:17 +08:00
nurafrinaalimi16 1ba4a1fe19 add parameter kadar rebate on index blade 2025-02-02 16:34:15 +08:00
nurafrinaalimi16 a2350d36f3 Merge branch 'production' of https://bitbucket.org/arrahn-pkb/kaunter into annur-rebate 2024-12-03 12:50:30 +08:00
dev_kopkb 9307ea5e1d add kadar rebet annur at gadai page 2024-11-19 11:38:02 +08:00
57 changed files with 1689 additions and 5725 deletions
-16
View File
@@ -1,16 +0,0 @@
.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
-55
View File
@@ -1,55 +0,0 @@
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:O1XZDqK4H6+3GdrODgCaLr2l+OoWvgVhYr0GJ1KizW8=
APP_DEBUG=true
APP_URL=http://localhost
# API_URL=http://api-annurv2.test
API_URL=http://host.docker.internal:8080
# Server-side Http:: from Docker — same rules as API_URL. Defaults in config/api.php use localhost:8000 which fails inside containers.
API_URL_KOOP=http://host.docker.internal:8080
API_URL_PKB=http://host.docker.internal:8080
API_ARRAHNBID=http://lelong.test/api/
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=kaunter_erahn
DB_USERNAME=kaunteruser
DB_PASSWORD=password
BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
PUSHER_APP_ID=1132718
PUSHER_APP_KEY=26b0ec2f297f94b7aa9b
PUSHER_APP_SECRET=421b61fb5a8ecce477a6
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MYKAD_READER_PORT=8085
MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED
-57
View File
@@ -1,57 +0,0 @@
APP_NAME=Laravel
APP_ENV=staging
APP_KEY=base64:O1XZDqK4H6+3GdrODgCaLr2l+OoWvgVhYr0GJ1KizW8=
APP_DEBUG=true
APP_URL=http://172.16.6.200:8091
HTTP_PORT=8091
MYSQL_PUBLISH_PORT=3309
API_URL=http://172.16.6.200:8090
API_URL_KOOP=http://172.16.6.200:8090
API_URL_PKB=http://172.16.6.200:8090
API_ARRAHNBID=http://lelong.test/api/
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=kaunter_erahn
DB_USERNAME=kaunteruser
DB_PASSWORD=password
BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
PUSHER_APP_ID=1132718
PUSHER_APP_KEY=26b0ec2f297f94b7aa9b
PUSHER_APP_SECRET=421b61fb5a8ecce477a6
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MYKAD_READER_PORT=8085
MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED
-49
View File
@@ -1,49 +0,0 @@
name: Build Docker Image
on:
push:
branches:
- staging
tags:
- "v*"
workflow_dispatch:
jobs:
build-frontend:
runs-on: docker
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to Docker registry
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | \
docker login git.koppkb.com \
-u "${{ secrets.REGISTRY_USERNAME }}" \
--password-stdin
- name: Build & push frontend image
run: |
set -e
IMAGE="git.koppkb.com/kopkb/kaunter"
TAGS="-t ${IMAGE}:${{ gitea.sha }}"
if [ "${{ gitea.ref_type }}" = "tag" ] && echo "${{ gitea.ref_name }}" | grep -q '^v'; then
TAGS="${TAGS} -t ${IMAGE}:${{ gitea.ref_name }}"
fi
if [ "${{ gitea.ref_name }}" = "staging" ]; then
TAGS="${TAGS} -t ${IMAGE}:staging"
fi
echo "Building and pushing frontend: ${TAGS}"
docker buildx build \
--target staging \
--platform linux/amd64 \
--cache-from type=registry,ref=${IMAGE}:buildcache,ignore-error=true \
--cache-to type=registry,ref=${IMAGE}:buildcache,mode=max \
-f docker/php/Dockerfile \
${TAGS} \
--push .
-123
View File
@@ -1,123 +0,0 @@
name: Deploy to Staging
on:
workflow_dispatch:
inputs:
image_tag:
description: "Docker image tag to deploy (commit SHA, staging, or v*)"
required: true
default: "staging"
type: string
env:
APP_IMAGE: git.koppkb.com/kopkb/kaunter
DEPLOY_DIR: /home/arrahn/Project/kaunter
jobs:
deploy:
runs-on: host
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ inputs.image_tag }}
- name: Login to Docker registry
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | \
docker login git.koppkb.com \
-u "${{ secrets.REGISTRY_USERNAME }}" \
--password-stdin
- name: Verify image exists in registry
run: |
set -e
IMAGE_TAG="${{ inputs.image_tag }}"
IMAGE="${APP_IMAGE}:${IMAGE_TAG}"
echo "Checking if image exists: ${IMAGE}"
if ! docker manifest inspect "${IMAGE}" > /dev/null 2>&1; then
echo "ERROR: Image ${IMAGE} does not exist in registry!"
echo "Run the Build Docker Image workflow first."
exit 1
fi
echo "✓ ${IMAGE} found"
- name: Pull Docker image
run: |
set -e
IMAGE_TAG="${{ inputs.image_tag }}"
docker pull "${APP_IMAGE}:${IMAGE_TAG}"
echo "✓ Image pulled successfully"
- name: Sync compose file and deploy
run: |
set -e
IMAGE_TAG="${{ inputs.image_tag }}"
mkdir -p "${DEPLOY_DIR}/docker/nginx"
cp docker-compose.staging.yml "${DEPLOY_DIR}/docker-compose.yml"
cp docker/nginx/default.conf "${DEPLOY_DIR}/docker/nginx/default.conf"
rm -rf "${DEPLOY_DIR}/public"
cp -R public "${DEPLOY_DIR}/public"
if [ ! -f "${DEPLOY_DIR}/.env.staging" ]; then
if [ -f .env.staging ]; then
cp .env.staging "${DEPLOY_DIR}/.env.staging"
echo "Copied .env.staging from repo (first deploy). Edit ${DEPLOY_DIR}/.env.staging on the server if needed."
else
echo "ERROR: ${DEPLOY_DIR}/.env.staging is missing on the server"
exit 1
fi
fi
cd "${DEPLOY_DIR}"
export APP_IMAGE
export IMAGE_TAG
docker compose --env-file .env.staging -f docker-compose.yml pull app
docker compose --env-file .env.staging -f docker-compose.yml up -d --no-build --remove-orphans
echo "✓ Deployed IMAGE_TAG=${IMAGE_TAG}"
- name: Verify deployment
run: |
set -e
cd "${DEPLOY_DIR}"
echo "Waiting for services to start..."
sleep 10
for SERVICE in app web mysql; do
STATUS=$(docker compose --env-file .env.staging -f docker-compose.yml ps --status running --format '{{.Name}}' "$SERVICE" 2>/dev/null || true)
if [ -z "$STATUS" ]; then
echo "ERROR: ${SERVICE} is not running"
docker compose --env-file .env.staging -f docker-compose.yml ps
docker compose --env-file .env.staging -f docker-compose.yml logs --tail=50 "$SERVICE" || true
exit 1
fi
echo "✓ ${SERVICE} is running (${STATUS})"
done
HTTP_PORT=$(grep -E '^HTTP_PORT=' .env.staging 2>/dev/null | cut -d= -f2- | tr -d '"' || true)
HTTP_PORT=${HTTP_PORT:-8091}
check_health() {
NAME=$1
URL=$2
for i in 1 2 3 4 5 6; do
if curl -sf "$URL" > /dev/null; then
echo "✓ ${NAME} health check passed (${URL})"
return 0
fi
echo "Waiting for ${NAME}... attempt ${i}/6"
sleep 5
done
echo "ERROR: ${NAME} health check failed (${URL})"
docker compose --env-file .env.staging -f docker-compose.yml logs --tail=50 app web || true
return 1
}
check_health "kaunter" "http://127.0.0.1:${HTTP_PORT}/health"
+4 -67
View File
@@ -1,83 +1,20 @@
<?php <?php
namespace App; namespace App;
use DateTime; use DateTime;
class Helper class Helper
{ {
public static function formatNumber($amount) public static function formatNumber($amount)
{ {
return number_format($amount, 2, '.', ','); $formattedAmount = number_format($amount, 2, '.', ',');
return $formattedAmount;
} }
public static function formatDate($date_string) public static function formatDate($date_string)
{ {
return (new DateTime($date_string))->format("d-m-Y"); return (new DateTime($date_string))->format("d-m-Y");
} }
public static function terbilangBm(int $number): string
{
$units = [
0 => 'kosong',
1 => 'satu',
2 => 'dua',
3 => 'tiga',
4 => 'empat',
5 => 'lima',
6 => 'enam',
7 => 'tujuh',
8 => 'lapan',
9 => 'sembilan',
10 => 'sepuluh',
11 => 'sebelas'
];
if ($number < 0) return 'negatif ' . self::terbilangBm(abs($number));
if ($number < 12) return $units[$number];
if ($number < 20) return self::terbilangBm($number - 10) . ' belas';
if ($number < 100) {
$tens = intdiv($number, 10);
$rest = $number % 10;
return self::terbilangBm($tens) . ' puluh' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
if ($number < 200) return 'seratus' . ($number > 100 ? ' ' . self::terbilangBm($number - 100) : '');
if ($number < 1000) {
$hundreds = intdiv($number, 100);
$rest = $number % 100;
return self::terbilangBm($hundreds) . ' ratus' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
if ($number < 2000) return 'seribu' . ($number > 1000 ? ' ' . self::terbilangBm($number - 1000) : '');
if ($number < 1000000) {
$thousands = intdiv($number, 1000);
$rest = $number % 1000;
return self::terbilangBm($thousands) . ' ribu' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
if ($number < 1000000000) {
$millions = intdiv($number, 1000000);
$rest = $number % 1000000;
return self::terbilangBm($millions) . ' juta' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
return 'terlalu besar';
}
public static function ringgitTerbilang($amount, bool $tambahSahaja = true): string
{
$formatted = number_format((float)$amount, 2, '.', '');
[$ringgitStr, $senStr] = explode('.', $formatted);
$ringgit = (int)$ringgitStr;
$sen = (int)$senStr;
$parts = [];
$parts[] = self::terbilangBm($ringgit) . ' ringgit';
if ($sen > 0) {
$parts[] = 'dan ' . self::terbilangBm($sen) . ' sen';
} elseif ($tambahSahaja) {
$parts[] = 'sahaja';
}
return trim(preg_replace('/\s+/', ' ', implode(' ', $parts)));
}
} }
+7 -67
View File
@@ -2,14 +2,12 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\User;
use App\Cawangan;
use Carbon\Carbon;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Services\CustomerService; use App\Services\CustomerService;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
class AliranTunaiController extends Controller class AliranTunaiController extends Controller
@@ -601,7 +599,7 @@ class AliranTunaiController extends Controller
return response($updateTunai); return response($updateTunai);
} }
public function LaporanAliranTunai($teller, Request $request) public function LaporanAliranTunai($teller)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
@@ -613,6 +611,8 @@ class AliranTunaiController extends Controller
$cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json(); $cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$cawangan_detail=$cawangan[0]; $cawangan_detail=$cawangan[0];
$tarikh_cetak = $current->toDateString();
$cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json(); $cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$alirantunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/GetCurrentTunai/' . $auth_user['cawangan'],['kodlaluan' => $auth_user['name']])->json(); $alirantunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/GetCurrentTunai/' . $auth_user['cawangan'],['kodlaluan' => $auth_user['name']])->json();
@@ -621,67 +621,7 @@ class AliranTunaiController extends Controller
$teller = $auth_user['name']; $teller = $auth_user['name'];
$bakiLelong = Http::withOptions(['verify' =>config('app.api_verify')])->get(config('api.url') . '/api/lelong/bakilelongbyteller/'.$auth_user['cawangan'],[ return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','alirantunai','teller'));
'tarikh' => $request->datetimepicker1
])->json();
return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','alirantunai','teller', 'bakiLelong'));
}
public function laporanAliranTunaiTeller()
{
$auth_user = Auth::user();
$api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
return view('khazanah.laporan.alirantunai', compact('api_url', 'cawangan_info'));
}
public function cetakLaporanAliranTunaiTeller(Request $request)
{
$api_url = config('api_url');
$auth_user = Auth::user();
$current = Carbon::now();
$current = new Carbon();
$tarikh_cetak = $current->toDateString();
if($request->datetimepicker1 == null){
$tarikh = $current->toDateString();
}else{
$split_date = explode('-',$request->datetimepicker1);
$tarikh = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0];
}
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$cawangan_detail=$cawangan[0];
$addtunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getAddTunai/' . $auth_user['cawangan'] . '/kodlaluan/',['kodlaluan' => $auth_user['name']])->json();
$teller = $auth_user['name'];
$bakiLelong = Http::withOptions(['verify' =>config('app.api_verify')])->get(config('api.url') . '/api/lelong/bakilelongbyteller/'.$auth_user['cawangan'],[
'tarikh' => $tarikh,
'kodlaluan' => $auth_user['name']
])->json();
$tunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getTunaiByTarikh/',[
'kodlaluan' => $auth_user['name'],
'kodcaw' => $auth_user['cawangan'],
'tarikh' => $tarikh
])->json();
if(!$tunai)
{
return redirect()->back()->with('errormessage', 'Tiada data pada tarikh tersebut.');
}
$jumlahTambah = $tunai['tambah'] + $tunai['masuk'] + $bakiLelong['rugi_lelong'];
$jumlahTolak = $tunai['kurang'] + $tunai['keluar'] + $bakiLelong['baki_lelong'];
return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','tunai','teller', 'bakiLelong', 'jumlahTambah', 'jumlahTolak'));
} }
public function LaporanTunaiTeller(Request $request){ public function LaporanTunaiTeller(Request $request){
@@ -201,6 +201,8 @@ class GadaianController extends Controller
'onepercent' => $onepercent, 'onepercent' => $onepercent,
'margin_semasa' => $margin_pinjaman, 'margin_semasa' => $margin_pinjaman,
'nokp' => $request->nokp, 'nokp' => $request->nokp,
'kadar_rebate' => $request->kadar_rebate,
'rebate' => $request->rebate
])->json(); ])->json();
+7 -270
View File
@@ -2459,6 +2459,7 @@ class KhazanahController extends Controller
$penghutangkaki = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/PenghutangKakitangan/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $penghutangkaki = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/PenghutangKakitangan/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$untungrugi = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/UntungRugiCalculation/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $untungrugi = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/UntungRugiCalculation/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$bayaranpendahuluan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/BayaranPendahuluan/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $bayaranpendahuluan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/BayaranPendahuluan/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$rebetpromo = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/RebetPromoCalculation/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
//Tanggungan Semasa //Tanggungan Semasa
$panjar = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/CalculationPanjar/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $panjar = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/CalculationPanjar/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
@@ -2469,6 +2470,8 @@ class KhazanahController extends Controller
$cajperkhidmatan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cajperkhidmatanterkumpul/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $cajperkhidmatan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cajperkhidmatanterkumpul/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$hapuskira = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/CalculationHapusKira/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $hapuskira = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/CalculationHapusKira/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$xtra = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/Xtra/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json(); $xtra = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/Xtra/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$rebetpromo = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/RebetPromoCalculation/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
$pelarasanrebate = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/PelarasanRebate/' . $auth_user['cawangan'],['tarikh' => $tarikh_imbangan2])->json();
//TunaiDitangan Sementara Upah //TunaiDitangan Sementara Upah
@@ -2520,6 +2523,8 @@ class KhazanahController extends Controller
if($imbangduga['pindahkekpkb'] > 0) array_push($hartasemasa,['glcode' => '1000/090','descpt' => 'Pindah Ke KPKB(IP)', 'amaun' => $imbangduga['pindahkekpkb']]); 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($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($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; $totalhartasemasa = 0;
foreach($hartasemasa as $index => $hs) foreach($hartasemasa as $index => $hs)
@@ -2551,6 +2556,8 @@ class KhazanahController extends Controller
if($utgterkumpulxtra > 0) array_push($tanggungansemasa,['glcode' => '7000/201','descpt' => 'Untung/Rugi Terkumpul Xtra','amaun' => $utgterkumpulxtra]); 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($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($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; $totaltanggungansemasa = 0;
foreach($tanggungansemasa as $index => $ts) foreach($tanggungansemasa as $index => $ts)
@@ -4417,274 +4424,4 @@ class KhazanahController extends Controller
} }
public function pampasanDetail($id)
{
$auth_user = Auth::user();
$api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])
->json();
$gadai = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/gadai/norujukan/' . '011237' . '/' . $id)
->json();
$gadai_info = is_array($gadai) && isset($gadai[0]) ? $gadai[0] : $gadai;
$customer_info = null;
if(isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = null;
if (isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$barang_kes = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/palsu/laporan/', ['kodcaw' => $auth_user['cawangan']])
->json();
// You may need to adjust the array index if the API returns an array of results
$gadai_info = is_array($gadai) && isset($gadai[0]) ? $gadai[0] : $gadai;
// $pampasan_info = is_array($pampasan) && isset($pampasan[0]) ? $pampasan[0] : $pampasan;
$barang_kes_collection = collect($barang_kes);
$barang_kes_info = $barang_kes_collection->where('norujukan', '=', $id)->first();
$customer_info = null;
if (isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$denominasi = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/DenominasiController/' . $auth_user['cawangan'])->json();
if (sizeof($denominasi) == 0) {
$denominasi = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/DenominasiCreate/' . $auth_user['cawangan'])->json();
} else {
$denominasi = $denominasi[0];
}
$pampasan = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/pampasan', ['kodcaw' => '011237', 'norujukan' => $id])
->json()['data'][0];
$baucerno = $pampasan['baucerno'];
$nilaimarhun = $barang_kes_info['nilaimarhun'] ?? 0;
$pembiayaan = $barang_kes_info['pembiayaan'] ?? 0;
$untung = $barang_kes_info['untung'] ?? 0;
$jumlah_tebus = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/tebus/norujukan/' . $auth_user['cawangan'] . '/' . $id)
->json()[0]['bakipjm'];
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
$jumlahPanjar = $jumlah_tebus + $jumlah_pampasan;
return view('khazanah.pampasan_detail', compact('gadai_info', 'barang_kes_info', 'cawangan_info', 'customer_info', 'baucerno', 'denominasi', 'jumlah_pampasan', 'jumlah_tebus', 'jumlahPanjar'));
}
}
public function initiatePampasan(Request $request)
{
$norujukan = $request->input('norujukan');
$teller = auth()->user()->name;
$kodcaw = auth()->user()->cawangan;
$baucerno = $this->generateBaucer($kodcaw);
$response = Http::post(config('api.url') . '/api/pampasan/initiatePampasan', [
'norujukan' => $norujukan,
'kodcaw' => $kodcaw,
'teller' => $teller,
'baucerno' => $baucerno,
]);
if ($response->failed()) {
throw new \Exception("HTTP error! status: " . $response->status(), 1);
}
$result = $response->json();
// $jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
// $jumlahTebus = $pembiayaan + $untung;
// $jumlahPanjar = $jumlah_pampasan + $jumlahTebus;
//return view('khazanah.pampasan_detail', compact('gadai_info', 'pampasan_info', 'cawangan_info', 'customer_info','baucerno', 'denominasi','jumlah_pampasan', 'jumlahTebus', 'jumlahPanjar') );
return response()->json($result);
}
public function generateBaucer($kodcaw)
{
$data = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url').'/api/SenaraiPanjar/list/' . $kodcaw)
->json();
$today = now();
$dd = $today->format('d');
$mm = $today->format('m');
$yy = $today->format('y');
$recno = $data['recno'] ?? 0;
$baucerno = 'B' . $yy . $mm . $dd . '-' . str_pad($recno, 4, '0', STR_PAD_LEFT);
return $baucerno;
}
public function terimaPampasan(Request $request)
{
$responsePampasan = Http::withOptions(['verify' => config('app.api_verify')])
->post(config('api.url') . '/api/pampasan/terimaPampasan',[
"norujukan" => $request->norujukan,
"kodcaw" => auth()->user()->cawangan,
"jumlah_pampasan" => $request->jumlahpampasan,
"teller" => auth()->user()->name,
"denominasi" => $request->denominasi,
]
)->json();
$jumlahTebus = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/tebus/norujukan/' . auth()->user()->cawangan .'/'.$request->norujukan)->json()[0]['bakipjm'];
$bayaranPanjar = $request->jumlahpampasan + $jumlahTebus;
$responsePanjar = Http::withOptions(['verify' => config('app.api_verify')])
->post(
config('api.url') . '/api/panjar/createpanjar/' . auth()->user()->cawangan,
array_merge(
[
'tarikhbil' => now()->format('Y-m-d'),
'jenismodal' => 'belanjaam',
'deskripsi' => 'BAYARAN PAMPASAN ' . '(' . $request->norujukan . ')',
'bayaran' => $bayaranPanjar,
'kodlaluan' => auth()->user()->name,
'baucer' => $responsePampasan['data']['baucerno'],
'tuntutan' => auth()->user()->name
],
$request->denominasi
)
)->json();
if ($responsePampasan['success'] == true) {
return redirect()->route('pampasan.resit', ["pampasan" => $responsePampasan['data']]);
} else
return redirect()->route('khazanah.panjar')->with('pampasaninformation', ['status' => 'error', 'message' => 'Baki perubatan tidak mencukupi.']);
}
public function resitPampasan(Request $request)
{
$pampasan = $request->pampasan;
$kodcaw = $pampasan['kodcaw'];
$norujukan = $pampasan['norujukan'] ?? null;
if ($norujukan) {
$gadai_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/gadai/norujukan/' . $kodcaw . '/' . $norujukan)
->json();
$gadai_info = is_array($gadai_info) && isset($gadai_info[0]) ? $gadai_info[0] : $gadai_info;
$customer_info = null;
if (isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$pampasan_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/palsu/laporan/', ['kodcaw' => $kodcaw])
->json();
$norujukan = $norujukan;
$pampasan_info = collect($pampasan_info)->firstWhere('norujukan', $norujukan);
$nilaimarhun = $pampasan_info['nilaimarhun'] ?? 0;
$pembiayaan = $pampasan_info['pembiayaan'] ?? 0;
$untung = $pampasan_info['untung'] ?? 0;
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
$status = Http::withOptions(['verify' => config('app.api_verify')])
->put(config('api.url') . '/api/pampasan/updateStatusPampasan', ['kodcaw' => $kodcaw, 'norujukan' => $norujukan])
->json();
// dd($pampasan_info, $nilaimarhun, $pembiayaan, $untung, $jumlah_pampasan);
// dd($norujukan);
return view('print.resit.resitpampasan', compact(
'pampasan',
'gadai_info',
'customer_info',
'pampasan_info',
'nilaimarhun',
'pembiayaan',
'untung',
'jumlah_pampasan',
'status'
));
}
}
public function suratPampasan(Request $request, $norujukan)
{
$auth_user = Auth::user();
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/cawangan/'.$auth_user['cawangan'])->json();
$gadai = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/gadai/norujukan/' . '011237' . '/' . $norujukan)
->json();
$gadai_info = is_array($gadai) && isset($gadai[0]) ? $gadai[0] : $gadai;
$customer_info = null;
if(isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$pampasan = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/palsu/laporan/' , ['kodcaw'=>'011237'])
->json();
$pampasan_collection = collect($pampasan);
$pampasan_info = $pampasan_collection->where('norujukan', '=', $norujukan)->first();
if (!$pampasan_info) {
abort(404, 'Maklumat pampasan tidak dijumpai untuk no rujukan tersebut.');
}
$nilaimarhun = $pampasan_info['nilaimarhun'] ?? 0;
$pembiayaan = $pampasan_info['pembiayaan'] ?? 0;
$untung = $pampasan_info['untung'] ?? 0;
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
$jumlah = $pampasan_info['jumlah_pampasan'] ?? 0;
$jumlah_pampasan_terbilang = Helper::ringgitTerbilang($jumlah_pampasan);
return view('print.surat_pampasan', compact('cawangan_info', 'gadai', 'gadai_info', 'customer_info', 'pampasan', 'pampasan_info','jumlah_pampasan_terbilang', 'jumlah_pampasan'));
}
} }
+8 -21
View File
@@ -99,15 +99,6 @@ class LelongController extends Controller
public function transaksituntutbaki(Request $request){ public function transaksituntutbaki(Request $request){
$auth_user = Auth::user(); $auth_user = Auth::user();
$aliranTunaiController = new AliranTunaiController();
$checkCashBox = $aliranTunaiController->periksaAliranTunai($request);
if($checkCashBox->getContent() !== 'sama')
{
return response('kemaskini', 200);
}
$lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/TuntutBaki/resit/' . $auth_user['cawangan'] . '/' . $request->norujukan)->json(); $lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/TuntutBaki/resit/' . $auth_user['cawangan'] . '/' . $request->norujukan)->json();
if($lelong) if($lelong)
@@ -115,18 +106,6 @@ class LelongController extends Controller
return response('Berjaya'); return response('Berjaya');
} }
$getTunai2=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/GetCurrentTunai/'.$auth_user['cawangan'],['kodlaluan' => $request->teller])->json();
$keluar = $getTunai2['keluar'];
$baki = $getTunai2['baki'];
$masuk = $getTunai2['masuk'];
$bakiakhir = $baki;
if(($bakiakhir < $request->jumlah) && $request->jenis == 'T'){
return response('Baki tidak mencukupi', 200);
}
$tuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/Tuntutbakisimpan/' . $auth_user['cawangan'], [ $tuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/Tuntutbakisimpan/' . $auth_user['cawangan'], [
'batchno' => $request->batchno, 'batchno' => $request->batchno,
'jenis' => $request->jenis, 'jenis' => $request->jenis,
@@ -143,6 +122,14 @@ class LelongController extends Controller
$updatetuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->put( config('api.url').'/api/tuntutbakiupdate/' . $auth_user['cawangan'] . '/' . $request->norujukan); $updatetuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->put( config('api.url').'/api/tuntutbakiupdate/' . $auth_user['cawangan'] . '/' . $request->norujukan);
$getTunai2=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/GetCurrentTunai/'.$auth_user['cawangan'],['kodlaluan' => $request->teller])->json();
$keluar = $getTunai2['keluar'];
$baki = $getTunai2['baki'];
$masuk = $getTunai2['masuk'];
$bakiakhir = $baki;
if($request->jenis == 'T') if($request->jenis == 'T')
{ {
$bakiakhir -= $request->jumlah; $bakiakhir -= $request->jumlah;
+3 -151
View File
@@ -87,17 +87,11 @@ class OperasiController extends Controller
'siri' => $request->siri 'siri' => $request->siri
])->json(); ])->json();
$updateData = [ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan, [
'sahkan' => 1, 'sahkan' => 1,
'namaoperasi' => $request->namaoperasi, 'namaoperasi' => $request->namaoperasi,
'siri' => $request->siri 'siri' => $request->siri
]; ])->json();
if ($request->has('actions')) {
$updateData['actions'] = $request->actions;
}
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan, $updateData)->json();
} else { } else {
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran', [ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran', [
'siri' => $request->siri, 'siri' => $request->siri,
@@ -145,49 +139,6 @@ class OperasiController extends Controller
return response()->json($updatelulus, 200); return response()->json($updatelulus, 200);
} }
public function createKelulusanByKhazanah(Request $request)
{
$auth_user = Auth::user();
$api_url = config('api.url');
$current = Carbon::now();
$current = new Carbon();
$norujukan = $request->norujukan;
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$getsiri = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListLatestLulus/'. $auth_user['cawangan'] . '/' . $norujukan)->json();
if(isset($getsiri['siri']))
{
$siri = $getsiri['siri'] + 1;
}else{
$siri = 1;
}
$createlulus = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/CreateKelulusan/' . $auth_user['cawangan'] . '/' . $norujukan . '/roles/khazanah', [
'komen' => $request->komen,
'dategadai' => $current->toDateString(),
'bilgadai' => 1,
'siri' => $siri,
'margin' => $request->margin,
'berat' => $request->berat,
'nilaimarhun' => $request->nilaimarhun,
'status' => $request->status,
'jumpinjam' => $request->jumpinjam,
'jenistebus' => "G",
'teller' => $request->teller,
'peloperasi' => "operasi",
'pelulus' => "operasi",
'actions' => "Mohon Pengesahan Pembayaran Pampasan"
])->json();
event(new OperasiNotice($auth_user['cawangan'],$auth_user['name']));
return response()->json($siri,201);
}
public function updatekelulusananggota(Request $request) public function updatekelulusananggota(Request $request)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
@@ -198,7 +149,7 @@ class OperasiController extends Controller
$kodcaw = $request->kodcaw; $kodcaw = $request->kodcaw;
$komen = $request->komenkelulusan; $komen = $request->komenkelulusan;
$namaoperasi = $request->namaoperasi; $namaoperasi = $request->namaoperasi;
$taglulus = $request->taglulus; // contoh: 'Y' = lulus, 'N' = batalmarginmutu() $taglulus = $request->taglulus; // contoh: 'Y' = lulus, 'N' = batal
// 1️⃣ Tentukan status kelulusan // 1️⃣ Tentukan status kelulusan
$status = ($taglulus == 'Y') ? 1 : 2; // 1 = Lulus, 2 = Batal/Tolak $status = ($taglulus == 'Y') ? 1 : 2; // 1 = Lulus, 2 = Batal/Tolak
@@ -450,103 +401,4 @@ class OperasiController extends Controller
return view('operasi.kelulusan_anggota', compact('cawangan_info', 'api_url', 'arraykelulusan')); return view('operasi.kelulusan_anggota', compact('cawangan_info', 'api_url', 'arraykelulusan'));
} }
public function marginmutu()
{
$auth_user = Auth::user();
$api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
// Get MaxMutuEmas data from API
$maxmutuemas = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/maxmutuemas')->json();
return view('operasi.marginmutu', compact('cawangan_info', 'api_url', 'maxmutuemas'));
}
public function editMarginMutu()
{
$auth_user = Auth::user();
$api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
return view('operasi.edit_marginmutu', compact('cawangan_info', 'api_url'));
}
public function laporanAudit()
{
$auth_user = Auth::user();
$api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
return view('homepage.operasi.laporan-audit', compact('cawangan_info', 'api_url'));
}
public function cetakLaporanAuditTrail(Request $request)
{
$api_url = config('api.url');
$auth_user = Auth::user();
$current = Carbon::now();
$current = new Carbon();
$tarikh_cetak = $current->toDateString();
if($request->dateaudit == null){
$date = $current->toDateString();
}else{
$split_date = explode('-', $request->dateaudit);
$date = $split_date[0] . '-' . $split_date[1] . '-' . $split_date[2];
}
if($request->dateaudit_till == null){
$date_till = $current->toDateString();
}else{
$split_date_till = explode('-', $request->dateaudit_till);
$date_till = $split_date_till[0] . '-' . $split_date_till[1] . '-' . $split_date_till[2];
}
$audittrail_raw = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url'). '/api/reports/audittrail/operasi',['date' => $date,'date_till' => $date_till])->json();
if(!$audittrail_raw){
return redirect()->back()->with('errormessage', 'Tiada data pada tarikh tersebut.');
}
// Transform the data to match view format
$audittrail = [];
foreach($audittrail_raw as $item) {
$created_at = \Carbon\Carbon::parse($item['created_at']);
// Format differences for display
$differences_text = '-';
if (isset($item['differences']) && !empty($item['differences'])) {
$diff_parts = [];
foreach ($item['differences'] as $field => $changes) {
$old = $changes['old'] ?? 'null';
$new = $changes['new'] ?? 'null';
$diff_parts[] = "{$field}: {$old}{$new}";
}
$differences_text = implode('; ', $diff_parts);
}
$audittrail[] = [
'tarikh' => $created_at->format('d/m/Y'),
'masa' => $created_at->format('H:i:s'),
'users' => $item['users'],
'actions' => $item['actions'],
'differ' => $differences_text
];
}
$cawangan_detail = [
'kodcaw' => 'operasi',
'namacaw' => 'Operasi Ar-Rahn',
'alamat1' => 'Lot 107, Jalan Parit Dalam,',
'alamat2' => 'Seksyen 8',
'poskod' => '15000',
'bandar' => 'Kota Bahru',
'negeri' => 'Kelantan',
'notel' => '03-12345678',
'nofaks' => '03-12345678',
];
return view('print.laporan_audittrail_operasi', compact('audittrail','cawangan_detail','tarikh_cetak','date','date_till','api_url'));
}
} }
+242 -192
View File
@@ -46,10 +46,7 @@ class PenebusanController extends Controller
$nilaihargasemasa = $this->tukaranhargaemas($norujukan); $nilaihargasemasa = $this->tukaranhargaemas($norujukan);
$pertambahpinjaman = 0.80; $pertambahpinjaman = 0.80;
return view('penebusan.' . $cawangan_info['version'] . '.index',compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa','pertambahpinjaman'));
$pampasan = $this->getPampasanByNorujukan($norujukan);
return view('penebusan.' . $cawangan_info['version'] . '.index',compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa','pertambahpinjaman', 'pampasan'));
} }
public function tebuspenuh(Request $request) public function tebuspenuh(Request $request)
@@ -281,167 +278,6 @@ class PenebusanController extends Controller
$auth_user = Auth::user(); $auth_user = Auth::user();
////////////////////////
/// UPDATE TEBUS API////
///////////////////////
$updatetebus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/updatetebus/'. $auth_user['cawangan'] .'/' . $request->norujukan,[
'nopelanggan' => $request->nopelanggan,
'jenistebus' => $request->jenistebus,
'jbg' => $request->jbg,
'kadarupah' => $request->kadarupah,
'nilai_marhun' => $request->nilai_marhun,
'pinjaman' => $request->pinjaman_lama,
'ansuran' => $request->ansuran,
'nowakil' => $request->nowakil,
'addpinjaman'=> $request->addpinjaman,
'bakipinjaman' => $request->bakipinjaman,
'bakiupah' => $request->bakiupah,
'historygadaian' => $request->historygadaian,
'marhun' => $request->marhun,
'jenisbayarantebus' => $request->jenisbayarantebus,
'jeniskeuntungan' => $request->jeniskeuntungan,
'teller' => $request->teller,
"duitpelanggan" => $request->bayaran,
"bakipelanggan" => $request->bakipelanggan,
])->json();
if($updatetebus == 'duplicate'){
return response()->json('duplicate');
}
//////////////////////
/// MAKING NEW SAG////
/////////////////////
$gadai_transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/'. $auth_user['cawangan'] . '/' . $current->toDateString())->json();
if($gadai_transaction){
$new_sirig = $gadai_transaction['sirig'] + 1;
}else{
$new_sirig = 1;
}
$new_transaction = sprintf("%04d",$new_sirig);
$norujukanbaru = strtoupper($auth_user['cawangan']) . $curent_year . $curent_month . $current_day . '-' .$new_transaction;
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/gadai/'.$auth_user['cawangan'],[
'norujukan' => $norujukanbaru,
'nopelanggan' => $request->nopelanggan,
'nokp' => $request->noic,
'sirig' => $new_sirig
]);
///////////////////////////
/// MARHUN UPDATE TABLE////
//////////////////////////
$arraymarhunbaru = [];
$marhunsediada = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/marhun/'. $request->norujukan)->json();
$marhunyangdiambil = $marhunsediada[0];
foreach($marhunyangdiambil as $index=>$marhunloop)
{
$karatbaru = str_replace('.','-',$marhunloop['karat']);
$hargabaru = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/harga_emas/'. $karatbaru)->json();
$nilaimarhun = (floatval($hargabaru['harga']) * floatval($marhunloop['berat']));
array_push($arraymarhunbaru, ["bil" => $marhunloop['bil'],"tag_permata" => $marhunloop['tag_permata'],"berat_batu_permata" => $marhunloop['berat_batu_permata'],"marhun" => $marhunloop['marhun'],"nota" => $marhunloop['nota'],"karat" => $marhunloop['karat'], "berat" => $marhunloop['berat'], "harga" => $hargabaru['harga'], "n_marhun" => $nilaimarhun]);
}
foreach($arraymarhunbaru as $array1){
$updatemarhun = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/marhun/'. $auth_user['cawangan'],[
'norujukan' => $norujukanbaru,
'marhun' => $array1['marhun'],
'nota' => $array1['nota'],
'karat' => $array1['karat'],
'berat_emas' => $array1['berat'],
'harga' => $array1['harga'],
'tag_permata' => $array1['tag_permata'],
'berat_batu_permata' => $array1['berat_batu_permata'],
'kuantiti' => $array1['bil']
])->json();
}
//////////////////////
////Update SAG BARU///
/////////////////////
$total_nilai_marhun = $request->nilai_marhun;
$margin_pinjaman = $request->pinjaman / $total_nilai_marhun;
$kadarupah = $request->kadarkeuntungan * 100;
$onepercent = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/onepercent',[
'pembiayaan' => $request->pinjaman,
'nilaimarhun' => $total_nilai_marhun,
'kadarujrah' => $request->kadarkeuntungan,
'margin' => ($margin_pinjaman*100),
'kodcaw' => Auth::user()->cawangan
])->json();
$keuntungan_sebln = $onepercent['keuntungan'];
$keuntungan_sebln = str_replace(',','',$keuntungan_sebln);
$keuntungan6bulan = $keuntungan_sebln * 6;
$keuntungan12bulan = $keuntungan_sebln * 12;
$hargajualan = $request->pinjaman + $keuntungan12bulan;
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/gadai/norujukan/'. $auth_user['cawangan'] .'/' . $norujukanbaru,[
'kodcaw' => $auth_user['cawangan'],
'nilaimarhun' => round($total_nilai_marhun, 2),
'berat' => round($request->total_berat, 2),
'pinjaman' => round($request->pinjaman, 2),
'kadarupah' => round($kadarupah, 2),
'marhun' => $request->marhun,
'percentpinj' => $margin_pinjaman,
'teller'=> $auth_user['name'],
'upah6' => $keuntungan6bulan,
'upah12' => $keuntungan12bulan,
'hargajualan' => $hargajualan,
'kuantiti_marhun' => $request->kuantiti_marhun
])->json();
$komuditi = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/komuditi/transaksi',[
'unit_komuditi' => round($request->pinjaman, 2),
'norujukan' => $norujukanbaru,
'kodcaw' => $auth_user['cawangan'],
'teller' => $auth_user['name']
]);
////////////////////////////
////Update History Gadaian///
////////////////////////////
$updatehistorygadaian = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/gadai/updatehistory/'. $auth_user['cawangan'] .'/' . $norujukanbaru,[
'historygadaian' => $request->norujukan,
'jenistebus' => $request->jenistebus,
])->json();
event(new TebusNotify('lulus',Auth::user()->cawangan));
event(new GadaiNotify('lulus',Auth::user()->cawangan));
$this->AliranTunaiController->alirantunaiTebus($request);
}
public function tambahpinjaman_latest(Request $request)
{
$api_url = config('api.url');
$current = Carbon::now();
$current = new Carbon();
$curent_year = substr($current->year,2,2);
$curent_month = sprintf("%02d", $current->month);
$current_day = sprintf("%02d", $current->day);
$auth_user = Auth::user();
//////////////////////// ////////////////////////
/// UPDATE TEBUS API//// /// UPDATE TEBUS API////
/////////////////////// ///////////////////////
@@ -512,16 +348,252 @@ class PenebusanController extends Controller
'totalbayaran' => $request->totalbayaran, 'totalbayaran' => $request->totalbayaran,
"duitpelanggan" => $request->bayaran, "duitpelanggan" => $request->bayaran,
"bakipelanggan" => $request->bakipelanggan, "bakipelanggan" => $request->bakipelanggan,
"noic" => $request->noic,
"jenisAT" => $request->jenisAT,
])->json(); ])->json();
if($updatetebus['result'] == 'success'){
if($updatetebus == 'duplicate'){
return response()->json('duplicate');
}
//////////////////////
/// MAKING NEW SAG////
/////////////////////
$gadai_transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/'. $auth_user['cawangan'] . '/' . $current->toDateString())->json();
if($gadai_transaction){
$new_sirig = $gadai_transaction['sirig'] + 1;
}else{
$new_sirig = 1;
}
$new_transaction = sprintf("%04d",$new_sirig);
$norujukanbaru = strtoupper($auth_user['cawangan']) . $curent_year . $curent_month . $current_day . '-' .$new_transaction;
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/gadai/'.$auth_user['cawangan'],[
'norujukan' => $norujukanbaru,
'nopelanggan' => $request->nopelanggan,
'nokp' => $request->noic,
'sirig' => $new_sirig
]);
///////////////////////////
/// MARHUN UPDATE TABLE////
//////////////////////////
$arraymarhunbaru = [];
$marhunsediada = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/marhun/'. $request->norujukan)->json();
$marhunyangdiambil = $marhunsediada[0];
foreach($marhunyangdiambil as $index=>$marhunloop)
{
$karatbaru = str_replace('.','-',$marhunloop['karat']);
$hargabaru = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/harga_emas/'. $karatbaru)->json();
$harga = ($request->jenisAT == 'hargalama') ? $marhunloop['harga'] : $hargabaru['harga'];
$nilaimarhun = (floatval($harga) * floatval($marhunloop['berat']));
array_push($arraymarhunbaru, ["bil" => $marhunloop['bil'],"tag_permata" => $marhunloop['tag_permata'],"berat_batu_permata" => $marhunloop['berat_batu_permata'],"marhun" => $marhunloop['marhun'],"nota" => $marhunloop['nota'],"karat" => $marhunloop['karat'], "berat" => $marhunloop['berat'], "harga" => $harga, "n_marhun" => $nilaimarhun]);
}
foreach($arraymarhunbaru as $array1){
$updatemarhun = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/marhun/'. $auth_user['cawangan'],[
'norujukan' => $norujukanbaru,
'marhun' => $array1['marhun'],
'nota' => $array1['nota'],
'karat' => $array1['karat'],
'berat_emas' => $array1['berat'],
'harga' => $array1['harga'],
'nilai_marhun' => $array1['n_marhun'],
'tag_permata' => $array1['tag_permata'],
'berat_batu_permata' => $array1['berat_batu_permata'],
'jenisAT' => $request->jenisAT,
'kuantiti' => $array1['bil']
])->json();
}
//////////////////////
////Update SAG BARU///
/////////////////////
$total_nilai_marhun = $request->total_nilai_marhun;
$margin_pinjaman = ($request->pinjaman / $total_nilai_marhun);
$onepercent = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/onepercent',[
'pembiayaan' => $request->pinjaman,
'nilaimarhun' => $total_nilai_marhun,
'kadarujrah' => $request->kadarkeuntungan,
'margin' => ($margin_pinjaman*100),
'kodcaw' => Auth::user()->cawangan
])->json();
$keuntungan_sebln = $onepercent['keuntungan'];
$keuntungan_sebln = str_replace(',','',$keuntungan_sebln);
$kadarupah = $request->kadarkeuntungan * 100;
$keuntungan6bulan = $keuntungan_sebln * 6;
$keuntungan12bulan = $keuntungan_sebln * 12;
$hargajualan = $request->pinjaman + $keuntungan12bulan;
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/gadai/norujukan/'. $auth_user['cawangan'] .'/' . $norujukanbaru,[
'kodcaw' => $auth_user['cawangan'],
'nilaimarhun' => round($total_nilai_marhun, 2),
'berat' => round($request->total_berat, 2),
'pinjaman' => round($request->pinjaman, 2),
'kadarupah' => round($kadarupah, 2),
'marhun' => $request->marhun_detail,
'percentpinj' => $margin_pinjaman,
'teller'=> $auth_user['name'],
'upah6' => $keuntungan6bulan,
'upah12' => $keuntungan12bulan,
'hargajualan' => $hargajualan,
'kuantiti_marhun' => $request->kuantiti_marhun,
]);
$komuditi = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/komuditi/transaksi',[
'unit_komuditi' => round($request->pinjaman, 2),
'norujukan' => $norujukanbaru,
'kodcaw' => $auth_user['cawangan'],
'teller' => $auth_user['name']
]);
////////////////////////////
////Update History Gadaian///
////////////////////////////
$updatehistorygadaian = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/gadai/updatehistory/'. $auth_user['cawangan'] .'/' . $norujukanbaru,[
'historygadaian' => $request->norujukan,
'jenistebus' => $request->jenistebus,
])->json();
if($updatetebus == 'duplicate'){
return response()->json('duplicate');
}
//////////////////////
/// MAKING NEW SAG////
/////////////////////
$gadai_transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/'. $auth_user['cawangan'] . '/' . $current->toDateString())->json();
if($gadai_transaction){
$new_sirig = $gadai_transaction['sirig'] + 1;
}else{
$new_sirig = 1;
}
$new_transaction = sprintf("%04d",$new_sirig);
$norujukanbaru = strtoupper($auth_user['cawangan']) . $curent_year . $curent_month . $current_day . '-' .$new_transaction;
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/gadai/'.$auth_user['cawangan'],[
'norujukan' => $norujukanbaru,
'nopelanggan' => $request->nopelanggan,
'nokp' => $request->noic,
'sirig' => $new_sirig
]);
///////////////////////////
/// MARHUN UPDATE TABLE////
//////////////////////////
$arraymarhunbaru = [];
$marhunsediada = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/marhun/'. $request->norujukan)->json();
$marhunyangdiambil = $marhunsediada[0];
foreach($marhunyangdiambil as $index=>$marhunloop)
{
$karatbaru = str_replace('.','-',$marhunloop['karat']);
$hargabaru = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/harga_emas/'. $karatbaru)->json();
$harga = ($request->jenisAT == 'hargalama') ? $marhunloop['harga'] : $hargabaru['harga'];
$nilaimarhun = (floatval($harga) * floatval($marhunloop['berat']));
array_push($arraymarhunbaru, ["bil" => $marhunloop['bil'],"tag_permata" => $marhunloop['tag_permata'],"berat_batu_permata" => $marhunloop['berat_batu_permata'],"marhun" => $marhunloop['marhun'],"nota" => $marhunloop['nota'],"karat" => $marhunloop['karat'], "berat" => $marhunloop['berat'], "harga" => $harga, "n_marhun" => $nilaimarhun]);
}
foreach($arraymarhunbaru as $array1){
$updatemarhun = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/marhun/'. $auth_user['cawangan'],[
'norujukan' => $norujukanbaru,
'marhun' => $array1['marhun'],
'nota' => $array1['nota'],
'karat' => $array1['karat'],
'berat_emas' => $array1['berat'],
'harga' => $array1['harga'],
'nilai_marhun' => $array1['n_marhun'],
'tag_permata' => $array1['tag_permata'],
'berat_batu_permata' => $array1['berat_batu_permata'],
'jenisAT' => $request->jenisAT,
'kuantiti' => $array1['bil']
])->json();
}
//////////////////////
////Update SAG BARU///
/////////////////////
$total_nilai_marhun = $request->total_nilai_marhun;
$margin_pinjaman = ($request->pinjaman / $total_nilai_marhun);
$onepercent = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/onepercent',[
'pembiayaan' => $request->pinjaman,
'nilaimarhun' => $total_nilai_marhun,
'kadarujrah' => $request->kadarkeuntungan,
'margin' => ($margin_pinjaman*100),
'kodcaw' => Auth::user()->cawangan
])->json();
$keuntungan_sebln = $onepercent['keuntungan'];
$keuntungan_sebln = str_replace(',','',$keuntungan_sebln);
$kadarupah = $request->kadarkeuntungan * 100;
$keuntungan6bulan = $keuntungan_sebln * 6;
$keuntungan12bulan = $keuntungan_sebln * 12;
$hargajualan = $request->pinjaman + $keuntungan12bulan;
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/gadai/norujukan/'. $auth_user['cawangan'] .'/' . $norujukanbaru,[
'kodcaw' => $auth_user['cawangan'],
'nilaimarhun' => round($total_nilai_marhun, 2),
'berat' => round($request->total_berat, 2),
'pinjaman' => round($request->pinjaman, 2),
'kadarupah' => round($kadarupah, 2),
'marhun' => $request->marhun_detail,
'percentpinj' => $margin_pinjaman,
'teller'=> $auth_user['name'],
'upah6' => $keuntungan6bulan,
'upah12' => $keuntungan12bulan,
'hargajualan' => $hargajualan,
'kuantiti_marhun' => $request->kuantiti_marhun,
]);
$komuditi = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/komuditi/transaksi',[
'unit_komuditi' => round($request->pinjaman, 2),
'norujukan' => $norujukanbaru,
'kodcaw' => $auth_user['cawangan'],
'teller' => $auth_user['name']
]);
////////////////////////////
////Update History Gadaian///
////////////////////////////
$updatehistorygadaian = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url').'/api/gadai/updatehistory/'. $auth_user['cawangan'] .'/' . $norujukanbaru,[
'historygadaian' => $request->norujukan,
'jenistebus' => $request->jenistebus,
])->json();
$alirantunai = new AliranTunaiController(); $alirantunai = new AliranTunaiController();
event(new TebusNotify('lulus',Auth::user()->cawangan)); event(new TebusNotify('lulus',Auth::user()->cawangan));
event(new GadaiNotify('lulus',Auth::user()->cawangan)); event(new GadaiNotify('lulus',Auth::user()->cawangan));
$alirantunai->alirantunaiTebusAutoTawarruq($request); $alirantunai->alirantunaiTebusAutoTawarruq($request);
}
return response()->json($updatetebus['result'],200); return response()->json($updatemarhun,200);
} }
public function tebusseparuh(Request $request) public function tebusseparuh(Request $request)
@@ -789,26 +861,4 @@ class PenebusanController extends Controller
return view($view, compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa')); return view($view, compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa'));
} }
public function getPampasanByNorujukan($norujukan)
{
$auth_user = Auth::user();
$pampasanListResponse = Http::get(config('api.url'). '/api/palsu/laporan', [
'kodcaw' => $auth_user['cawangan'],
'status' => 'all',
]);
if($pampasanListResponse->failed()){
throw new \Exception("Something wrong with API", 1);
}
$pampasanList = array_filter($pampasanListResponse->json(), function($pampasan) use($norujukan){
return $pampasan['norujukan'] == $norujukan;
});
$pampasan = sizeof($pampasanList) == 0 ? null : array_pop($pampasanList);
return $pampasan;
}
} }
-1
View File
@@ -72,6 +72,5 @@ class Kernel extends HttpKernel
'admin' => 'App\Http\Middleware\Admin', 'admin' => 'App\Http\Middleware\Admin',
'audit' => 'App\Http\Middleware\Audit', 'audit' => 'App\Http\Middleware\Audit',
'masteradmin' => 'App\Http\Middleware\Masteradmin', 'masteradmin' => 'App\Http\Middleware\Masteradmin',
'role' => 'App\Http\Middleware\RoleAccess',
]; ];
} }
-71
View File
@@ -1,71 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Closure;
class RoleAccess
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string ...$roles
* @return mixed
*/
public function handle($request, Closure $next, ...$roles)
{
if (!Auth::check()) {
return redirect('/login');
}
$user = Auth::user();
$userRole = $user->roles;
$userRoleHarian = $user->role_harian ?? null;
// Check each allowed role
foreach ($roles as $role) {
switch ($role) {
case 'teller':
if ($userRoleHarian == 'teller' || $userRole == 'teller') {
return $next($request);
}
break;
case 'khazanah':
if ($userRole == 'pc' || $userRole == 'ppc') {
return $next($request);
}
break;
case 'admin':
if ($userRole == 'admin') {
return $next($request);
}
break;
case 'penilai':
if ($userRole == 'penilai') {
return $next($request);
}
break;
case 'operasi':
if ($userRole == 'operasi') {
return $next($request);
}
break;
case 'audit':
if ($userRole == 'audit') {
return $next($request);
}
break;
}
}
// If no roles matched, deny access
abort(403, 'Access denied. Required roles: ' . implode(', ', $roles));
}
}
-77
View File
@@ -1,77 +0,0 @@
# Staging stack — isolated from local docker-compose.yml (8081 / 3307)
# and from api_arrahn staging (8090 / 3308).
#
# Local:
# docker compose --env-file .env.staging -f docker-compose.staging.yml up -d --build
#
# CI (image already in registry):
# APP_IMAGE=git.koppkb.com/kopkb/kaunter IMAGE_TAG=<sha> \
# docker compose --env-file .env.staging -f docker-compose.staging.yml up -d --no-build
#
# Host nginx reverse-proxies the public domain to 127.0.0.1:${HTTP_PORT}.
# See docker/nginx/host-proxy.example.conf
#
# If 8091 or 3309 is already taken, set HTTP_PORT / MYSQL_PUBLISH_PORT in .env.staging.
name: kaunter_staging
services:
app:
image: ${APP_IMAGE:-kaunter}:${IMAGE_TAG:-staging}
build:
context: .
dockerfile: docker/php/Dockerfile
target: staging
container_name: kaunter_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: kaunter_staging_web
ports:
- "${HTTP_PORT:-8091}: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: kaunter_staging_mysql
command: --default-authentication-plugin=mysql_native_password
ports:
- "127.0.0.1:${MYSQL_PUBLISH_PORT:-3309}:3306"
environment:
MYSQL_DATABASE: kaunter_erahn
MYSQL_USER: kaunteruser
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:
-43
View File
@@ -1,43 +0,0 @@
services:
app:
build:
context: .
dockerfile: docker/php/Dockerfile
target: development
working_dir: /var/www/html
volumes:
- ./:/var/www/html:cached
environment:
APP_ENV: local
APP_DEBUG: "true"
# Lets PHP resolve host.docker.internal to the host machine (Linux Docker; Desktop already provides this).
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- mysql
web:
image: nginx:1.25-alpine
ports:
- "8081:80"
volumes:
- ./:/var/www/html:cached
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
mysql:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
ports:
- "3307:3306"
environment:
MYSQL_DATABASE: kaunter_erahn
MYSQL_USER: kaunteruser
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
-36
View File
@@ -1,36 +0,0 @@
server {
listen 80;
server_name _;
root /var/www/html/public;
index index.php index.html;
charset utf-8;
client_max_body_size 50M;
location / {
try_files $uri $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;
}
}
-51
View File
@@ -1,51 +0,0 @@
FROM php:7.4-fpm AS base
WORKDIR /var/www/html
RUN apt-get 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
RUN 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
@@ -1,35 +0,0 @@
#!/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
@@ -1,4 +0,0 @@
memory_limit=512M
upload_max_filesize=50M
post_max_size=50M
max_execution_time=120
-3
View File
@@ -1,3 +0,0 @@
[www]
; Pass container env vars (from compose env_file) through to PHP workers.
clear_env = no
Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

-30
View File
@@ -1,30 +0,0 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./bootstrap');
window.Vue = require('vue');
/**
* The following block of code may be used to automatically register your
* Vue components. It will recursively scan this directory for the Vue
* components and automatically register them with their "basename".
*
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
// const files = require.context('./', true, /\.vue$/i)
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
const app = new Vue({
el: '#app',
});
+3 -3
View File
@@ -35,7 +35,7 @@ window.Pusher = require('pusher-js');
window.Echo = new Echo({ window.Echo = new Echo({
broadcaster: 'pusher', broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY, key: '26b0ec2f297f94b7aa9b',
cluster: process.env.MIX_PUSHER_APP_CLUSTER, cluster: 'ap1',
forceTLS: false forceTLS: true
}); });
+6 -3
View File
@@ -558,12 +558,15 @@
function cetaklaporanalirantunai() function cetaklaporanalirantunai()
{ {
let urlroute = '{{ route("laporan.alirantunai") }}'; let teller = "{{ Auth::user()->name }}";
let urlroute = '{{ route("laporan.alirantunai", ":id") }}';
urlroute = urlroute.replace(':id', teller);
window.open(urlroute, '_blank');
window.location.href = urlroute;
} }
function cetakserahankeseluruhan() function cetakserahankeseluruhan()
{ {
let urlroute = '{{ route("laporan.serahanteller") }}'; let urlroute = '{{ route("laporan.serahanteller") }}';
@@ -1,19 +1,75 @@
<html>
<head>
<style> <style>
.header{
font-size:12px;
font-weight: bold;
margin-left:40px;
}
body {
background: white;
}
page {
background: white;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
/* box-shadow: 0 0 0.5cm rgba(0,0,0,0.5); */
}
page[size="A4"] {
width: 21cm;
/* height: 29.7cm; */
}
page[size="A4"][layout="landscape"] {
width: 29.7cm;
height: 21cm;
}
@media print {
body, page {
margin: 0;
box-shadow: 0;
}
}
.middleheader{
text-align: center;
}
.container{
font-family: Arial, Helvetica, sans-serif;
width: 25%;
border: 2px solid gray;
border-radius: 15px;
padding: 5px 10px 10px 30px;
margin: 0 auto;
}
#header { #header {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
margin-left:40px;
} }
#header td, #customers th { #header td, #customer th {
padding:4px; padding:4px;
font-size:10px; font-size:10px;
} }
#header tr:nth-child(even){background-color: #ffffff;} #header tr:nth-child(even){
background-color: #ffffff;
}
#header tr:hover {background-color: #ddd;} /* #header tr:hover {
background-color: #ddd;
} */
#header th { #header th {
padding-top: 12px; padding-top: 12px;
@@ -22,125 +78,45 @@
padding:4px; padding:4px;
color:black; color:black;
} }
</style>
.statements{
<style>
#scan {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 95%;
margin: 0 auto;
} }
.statements th{
#scan td, #scan th { font-size:14px;
background-color: #f9ca24;
padding: 8px; border:1px solid gray;
font-size:11px;
}
#scan tr:nth-child(even){background-color: #ffffff;}
#scan tr:hover {background-color: #ddd;}
#scan th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black; color:black;
padding:4px 10px 4px 10px;
} }
</style>
.statements td{
border:1px solid gray;
padding:4px 4px 4px 4px;
<style> }
#scan {
font-family: Arial, Helvetica, sans-serif; .center{
border-collapse: collapse; position: fixed;
left: 0;
bottom: 0;
width: 100%; width: 100%;
} color: white;
#scan td, #scan th {
border-collapse: collapse;
padding: 8px;
font-size:11px;
}
#scan tr:nth-child(even){background-color: #ffffff;}
#scan tr:hover {background-color: #ddd;}
#scan th {
border-collapse: collapse;
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style>
<style>
#details {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 50%;
}
#details td, #details th {
padding: 8px;
font-size:11px;
}
#details tr:nth-child(even){background-color: #ffffff;}
#details tr:hover {background-color: #ddd;}
#details th {
padding-top: 12px;
font-style:bold;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style>
<style>
#sign {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#sign td, #sign th {
padding: 8px;
font-size:11px;
text-align: center; text-align: center;
} }
#sign tr:nth-child(even){background-color: #ffffff;}
#sign tr:hover {background-color: #ddd;}
#sign th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style> </style>
</head>
<body onload="window.print()">
<page size="A4">
<h6 class="header">SULIT DAN PERSENDIRIAN</h6>
<table id="header"> <table id="header">
<tr> <tr>
<th rowspan="4" style="width:50px"><br><img src="{{ asset('img/ARRAHN1.png') }}" style="width:70px"></img></th> <th rowspan="4" style="width:50px"><br><img src="{{ asset('img/icon_pkb.png') }}" style="width:70px"></img></th>
<th colspan="1">KOPERASI PERMODALAN KELANTAN BERHAD</th> <th colspan="1">KOPERASI PERMODALAN KELANTAN BERHAD</th>
</tr> </tr>
<tr> <tr>
@@ -156,143 +132,80 @@
<td></td> <td></td>
</tr> </tr>
</table> </table>
<h6 class="middleheader">PENYATA ALIRAN TUNAI : {{ $teller }}</h6>
<div class="row" style="display: flex; justify-content: start;">
<div class="container" style="flex: 1; margin-left: 20px;">
<h3>Baki Awal</h3>
<span>RM {{ number_format($alirantunai['bakiawal'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Pendahuluan</h3>
<span>RM {{ number_format($alirantunai['tambah'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Penyelesaian Pem.</h3>
<span>RM {{ number_format($alirantunai['masuk'], 2) }}</span>
</div>
</div>
<div class="row" style="display: flex; justify-content: start; margin-top: 20px;">
<div class="container" style="flex: 1; margin-left: 20px;">
<h3>Baki Tunai Semasa</h3>
<span>RM {{ number_format($alirantunai['baki'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Serahan</h3>
<span>RM {{ number_format($alirantunai['kurang'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Pembiayaan</h3>
<span>RM {{ number_format($alirantunai['keluar'], 2) }}</span>
</div>
</div>
<h6 class="middleheader" style="margin-bottom:-5px;">KEMASUKAN TUNAI</h6>
<br> <br>
<table id="scan"> <table class="statements">
<tr> <tr>
<th colspan="3" style=" <th>TARIKH</th>
text-align: left; <th>DEBIT (RM)</th>
font-size: 16px; <th>KREDIT (RM)</th>
font-weight: bold; <th>NOTA</th>
text-transform: uppercase;
padding-top: 10px;
padding-bottom: 10px;
letter-spacing: 0.5px;
">
LAPORAN ALIRAN TUNAI TELLER
</th>
</tr> </tr>
@php $totaltambah = 0; $totalkurang = 0; @endphp
<tr> @foreach($addtunai as $index=>$ad)
<td style="width:100px"><b>TARIKH:</b></td> @php $totaltambah += $ad['tambah']; $totalkurang += $ad['kurang']; @endphp
<td><b> <tr style="text-align:center;">
@php <td>{{ $ad['tarikh'] }}</td>
$tarikhTeller = DateTime::createFromFormat('Y-m-d', $tunai['tarikh']); <td>{{ number_format($ad['tambah'],2) }}</td>
echo $tarikhTeller->format('d-m-Y'); <td>{{ number_format($ad['kurang'],2) }}</td>
@endphp <td>{{ $ad['nota'] }}</td>
</b></td>
</tr> </tr>
@endforeach
<tr> <tr style="text-align:center;">
<td><b>TARIKH CETAK:</b></td> <td style="font-weight:bold;">JUMLAH</td>
<td><b> <td>{{ number_format($totaltambah,2) }}</td>
@php <td>{{ number_format($totalkurang,2) }}</td>
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
$formattedweddingdate = $myDateTime->format('d-m-Y');
echo $formattedweddingdate;
@endphp
</b></td>
</tr>
</table>
<br>
<table id="details">
<tr>
<th>BAKI AWAL</th>
</tr>
<tr>
<td>Baki Awal</td>
<td>:</td>
<td>RM {{ number_format($tunai['bakiawal'],2) }}</td>
</tr>
<tr>
<th>TAMBAH</th>
</tr>
<tr>
<td>Pendahuluan</td>
<td>:</td>
<td>RM {{ number_format($tunai['tambah'],2) }}</td>
</tr>
<tr>
<td>Pen. Pembiayaan / Keuntungan</td>
<td>:</td>
<td>RM {{ number_format($tunai['masuk'],2) }}</td>
</tr>
<tr>
<td>Kerugian Baki Lelong</td>
<td>:</td>
<td>RM {{ number_format($bakiLelong['rugi_lelong'],2) }}</td>
</tr>
<tr>
<td>Jumlah</td>
<td>:</td>
<td>RM {{ number_format($jumlahTambah,2) }}</td>
</tr>
<tr>
<th>TOLAK</th>
</tr>
<tr>
<td>Serahan</td>
<td>:</td>
<td>RM {{ number_format($tunai['kurang'],2) }}</td>
</tr>
<tr>
<td>Pembiayaan</td>
<td>:</td>
<td>RM {{ number_format($tunai['keluar'],2) }}</td>
</tr>
<tr>
<td>Baki Lelong</td>
<td>:</td>
<td>RM {{ number_format($bakiLelong['baki_lelong'],2) }}</td>
</tr>
<tr>
<td>Jumlah</td>
<td>:</td>
<td>RM {{ number_format($jumlahTolak,2) }}</td>
</tr>
<tr><th>BAKI AKHIR</th></tr>
<tr>
<td colspan="3" style="
border: 2px solid black;
text-align: center;
background-color: #f8f8f8;
font-weight: bold;
font-size: 13px;
padding: 10px;
">
BAKI AKHIR TELLER: RM {{ number_format($tunai['bakiawal'] + $jumlahTambah - $jumlahTolak,2) }}
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<table id="sign">
<tr>
<td></td>
<td colspan="2"> .................................................................. </td>
<td> </td>
<td colspan="2">.................................................................. </td>
<td> </td>
</tr>
<tr>
<td></td>
<td colspan="2"><B> DI SEMAK</B> </td>
<td> </td>
<td colspan="2"><B>DI SAHKAN </B></td>
<td></td> <td></td>
</tr> </tr>
</table> </table>
</page>
<script>
</script>
</body>
</html>
+2 -17
View File
@@ -102,7 +102,7 @@
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5> <h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form name="form-store" action="{{ route('customer.store') }}" onsubmit="verifycustomer()" method="POST"> <form action="{{ route('customer.store') }}" onsubmit="verifycustomer()" method="POST">
@csrf @csrf
<div class="row form-group"> <div class="row form-group">
<div class="col-md-6"> <div class="col-md-6">
@@ -373,7 +373,7 @@
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5> <h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form name="form-store" action="{{ route('customer.store') }}" onsubmit="verifycustomerpassport()" method="POST"> <form action="{{ route('customer.store') }}" onsubmit="verifycustomerpassport()" method="POST">
@csrf @csrf
<div class="row form-group"> <div class="row form-group">
<div class="col-md-6"> <div class="col-md-6">
@@ -1393,21 +1393,6 @@ var api_url = @json($api_url ?? '');
lainContainer.hide(); lainContainer.hide();
} }
}); });
document.getElementsByName('form-store')[0].addEventListener('keypress', function(e) {
// Jika tekan Enter
if (e.key === 'Enter') {
// Jika bukan butang submit dan bukan textarea
const tag = e.target.tagName.toLowerCase();
const type = e.target.type ? e.target.type.toLowerCase() : '';
if (tag !== 'textarea' && type !== 'submit') {
e.preventDefault();
return false;
}
}
});
</script> </script>
@push('additional_scripts') @push('additional_scripts')
<script> <script>
+8 -306
View File
@@ -24,9 +24,6 @@
</div> </div>
<div class="col-12 text-right mb-2"> <div class="col-12 text-right mb-2">
<button type="button" style="margin:auto" class="btn btn-primary" data-toggle="modal" data-target="#daftar_marhun">Daftar Marhun</button> <button type="button" style="margin:auto" class="btn btn-primary" data-toggle="modal" data-target="#daftar_marhun">Daftar Marhun</button>
<button type="button" id="toggleTableBtn" class="btn btn-info ml-2">
<i class="fas fa-exchange-alt"></i> Papar Margin
</button>
</div> </div>
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
@@ -56,33 +53,6 @@
<th colspan="5"></th> <th colspan="5"></th>
</tfoot> </tfoot>
</table> </table>
<!-- Margin Summary Table (Hidden by default) -->
<table class="table table-striped table-hover text-center" id="marginTable" style="display: none;">
<thead class="thead-dark">
<tr>
<th>Bil</th>
<th>Karat</th>
<th>Nilai Marhun</th>
<th>Margin Teller (%)</th>
<th>Margin PC (%)</th>
<th>Nilai Marhun Teller</th>
<th>Nilai Marhun PC</th>
</tr>
</thead>
<tbody id="marginTableBody">
<!-- Dynamic content will be inserted here -->
</tbody>
<tfoot class="thead-success">
<tr>
<th colspan="2" class="text-center">Jumlah</th>
<th id="totalNilaiMarhunMargin"></th>
<th colspan="2"></th>
<th id="totalNilaiTellerMargin"></th>
<th id="totalNilaiPCMargin"></th>
</tr>
</tfoot>
</table>
</div> </div>
</div> </div>
<div class="card"> <div class="card">
@@ -541,21 +511,7 @@
"visible": false, "visible": false,
"searchable": false "searchable": false
} }
], ]
"language": {
"lengthMenu": "Papar _MENU_ rekod setiap halaman",
"zeroRecords": "Tiada rekod dijumpai",
"info": "Memapar halaman _PAGE_ dari _PAGES_",
"infoEmpty": "Tiada rekod tersedia",
"infoFiltered": "(ditapis dari _MAX_ jumlah rekod)",
"search": "Cari:",
"paginate": {
"first": "Pertama",
"last": "Akhir",
"next": "Seterusnya",
"previous": "Sebelumnya"
}
}
}); });
$(".select2").select2({ $(".select2").select2({
@@ -611,7 +567,6 @@
total_berat = 0; total_berat = 0;
total_kuantiti = 0; total_kuantiti = 0;
var marhun_details = ''; var marhun_details = '';
var array_mutu = [];
tablemarhun.clear().draw(); tablemarhun.clear().draw();
$.each(data,function(index,marhun){ $.each(data,function(index,marhun){
$.each(marhun,function(index,marhun_detail){ $.each(marhun,function(index,marhun_detail){
@@ -621,7 +576,6 @@
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
total_kuantiti += Number(marhun_detail['bil']); total_kuantiti += Number(marhun_detail['bil']);
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
tablemarhun.row.add([ tablemarhun.row.add([
counter, counter,
marhun_detail['recno'], marhun_detail['recno'],
@@ -634,7 +588,7 @@
marhun_detail['harga'], marhun_detail['harga'],
status_tag_permata, status_tag_permata,
marhun_detail['berat_batu_permata'], marhun_detail['berat_batu_permata'],
"<div class='buttonpunya text-center'><button onclick='viewmarhun(this)' class='btn btn-info'><i class='fas fa-eye'></i></button> <button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>" "<div class='buttonpunya text-center'><button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>"
]).draw(); ]).draw();
count++; count++;
counter = counter + 1; counter = counter + 1;
@@ -647,7 +601,7 @@
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
if (count == 1){ if (count == 1){
$('.buttonpunya').html("<button onclick='viewmarhun(this)' class='btn btn-info'><i class='fas fa-eye'></i></button> <button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button>"); $('.buttonpunya').html("<button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button>");
} }
// if(total_nilai_marhun > 0 && total_nilai_marhun < 401){ // if(total_nilai_marhun > 0 && total_nilai_marhun < 401){
@@ -702,32 +656,25 @@
$('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2))); $('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2)));
$('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2))); $('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2)));
var max_teller = 0;
var max_pelulus = 0;
$.ajax({ $.ajax({
method:'GET', method:'GET',
url: api_url + '/api/maxpinjaman', url: api_url + '/api/maxpinjaman',
data: {
'mutu': array_mutu,
'total_nilai_marhun': total_nilai_marhun,
},
success:function(data){ success:function(data){
$.each(data,function(index,pinjaman){ $.each(data,function(index,pinjaman){
if(pinjaman['user_type'] == 'teller'){ if(pinjaman['user_type'] == 'teller'){
pinjaman_teller = Number(pinjaman['max']); pinjaman_teller = Number(pinjaman['max']);
max_teller = pinjaman['teller_pinjaman'];
} }
if(pinjaman['user_type'] == 'khazanah'){ if(pinjaman['user_type'] == 'khazanah'){
pinjaman_pelulus = Number(pinjaman['max']); pinjaman_pelulus = Number(pinjaman['max']);
max_pelulus = pinjaman['pc_pinjaman'];
} }
}); });
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %'); $('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
$('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %'); $('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %');
var max_teller = total_nilai_marhun * (pinjaman_teller/100);
var max_pelulus = total_nilai_marhun * (pinjaman_pelulus/100);
$('#pembiayaan_max_teller').val(formatter.format(max_teller)); $('#pembiayaan_max_teller').val(formatter.format(max_teller));
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus)); $('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2)));
} }
}); });
} }
@@ -754,103 +701,6 @@
}); });
} }
function viewmarhun(e){
let selectedrow = $(e).closest('tr');
let recno = tablemarhun.row(selectedrow).data();
let nm = recno[3];
let karat = recno[4];
let berat = recno[5];
let harga = recno[8];
let nota = recno[7];
let kuantiti = recno[6];
let jenismarhun = recno[2];
let beratpermata = recno[10];
// Call API to get specific MaxMutuEmas data by karat
$.ajax({
url: '{{ config("api.url") }}/api/maxmutuemas/specific',
type: 'GET',
data: { karat: karat, nilaimarhun: nm },
success: function(response) {
let marginInfo = '';
let marginTable = '';
if (response && response.karat) {
marginTable = `
<table class="table table-bordered table-sm mt-3">
<thead class="thead-light">
<tr><th colspan="2" class="text-center"><strong>Maklumat Margin</strong></th></tr>
</thead>
<tbody>
<tr><td><strong>Margin Teller</strong></td><td>${response.teller}%</td></tr>
<tr><td><strong>Margin PC</strong></td><td>${response.pc}%</td></tr>
<tr><td><strong>Nilai Marhun Teller</strong></td><td>RM${parseFloat(response.maxteller).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
<tr><td><strong>Nilai Marhun PC</strong></td><td>RM${parseFloat(response.maxpc).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
</tbody>
</table>
`;
}
let details = `
<table class="table table-bordered table-sm">
<thead class="thead-light">
<tr><th colspan="2" class="text-center"><strong>Maklumat Marhun</strong></th></tr>
</thead>
<tbody>
<tr><td><strong>Jenis Marhun</strong></td><td>${jenismarhun}</td></tr>
<tr><td><strong>Nilai Marhun Asal</strong></td><td>${nm}</td></tr>
<tr><td><strong>Karat</strong></td><td>${karat}</td></tr>
<tr><td><strong>Berat</strong></td><td>${berat}g</td></tr>
<tr><td><strong>Kuantiti</strong></td><td>${kuantiti}</td></tr>
<tr><td><strong>Harga</strong></td><td>RM${harga}</td></tr>
<tr><td><strong>Nota</strong></td><td>${nota}</td></tr>
<tr><td><strong>Berat Batu Permata</strong></td><td>${beratpermata}g</td></tr>
</tbody>
</table>
${marginTable}
`;
Swal.fire({
title: 'Maklumat Marhun & Margin',
html: details,
icon: 'info',
confirmButtonText: 'OK',
width: '600px'
});
},
error: function(xhr) {
// If API call fails, show basic marhun info only
let details = `
<table class="table table-bordered table-sm">
<thead class="thead-light">
<tr><th colspan="2" class="text-center"><strong>Maklumat Marhun</strong></th></tr>
</thead>
<tbody>
<tr><td><strong>Jenis Marhun</strong></td><td>${jenismarhun}</td></tr>
<tr><td><strong>Nama</strong></td><td>${nm}</td></tr>
<tr><td><strong>Karat</strong></td><td>${karat}</td></tr>
<tr><td><strong>Berat</strong></td><td>${berat}g</td></tr>
<tr><td><strong>Kuantiti</strong></td><td>${kuantiti}</td></tr>
<tr><td><strong>Harga</strong></td><td>RM${harga}</td></tr>
<tr><td><strong>Nota</strong></td><td>${nota}</td></tr>
<tr><td><strong>Berat Batu Permata</strong></td><td>${beratpermata}g</td></tr>
</tbody>
</table>
<div class="alert alert-warning text-center">
<em>Maklumat margin tidak tersedia</em>
</div>
`;
Swal.fire({
title: 'Maklumat Marhun',
html: details,
icon: 'info',
confirmButtonText: 'OK',
width: '600px'
});
}
});
}
function editmarhun(e){ function editmarhun(e){
let norujuk = $('#norujukan').val(); let norujuk = $('#norujukan').val();
let selectedrow = $(e).closest('tr'); let selectedrow = $(e).closest('tr');
@@ -1652,7 +1502,7 @@
swalWithBootstrapButtons.fire({ swalWithBootstrapButtons.fire({
title: 'Dapatkan Pengesahan Daripada Khazanah?', title: 'Dapatkan Pengesahan Daripada Khazanah?',
text: "Tetapan Margin Melebihi Limit Maksima Teller!", text: "Tetapan margin melebihi" + pinjaman_teller + "% untuk Khazanah!",
icon: 'info', icon: 'info',
showCancelButton: true, showCancelButton: true,
confirmButtonText: 'Hantar', confirmButtonText: 'Hantar',
@@ -1664,7 +1514,7 @@
let norujukan = $('#norujukan').val(); let norujukan = $('#norujukan').val();
let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text(); let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text();
// let komen = "Pembiayaan Melebihi Margin 70%|" + nm + "|" + ber + "|" + marg + "|"; // let komen = "Pembiayaan Melebihi Margin 70%|" + nm + "|" + ber + "|" + marg + "|";
let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%"; let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%";
let jumpinjam = $('#pinjaman').val(); let jumpinjam = $('#pinjaman').val();
let teller = "{{ Auth::user()->name }}"; let teller = "{{ Auth::user()->name }}";
@@ -1768,153 +1618,5 @@
} }
} }
} }
// Toggle Table Functionality
let isMarginTableVisible = false;
$('#toggleTableBtn').on('click', function() {
if (!isMarginTableVisible) {
// Show margin table, hide main table
$('#myTable_wrapper').hide();
$('#marginTable').show();
$(this).html('<i class="fas fa-exchange-alt"></i> Papar Marhun');
loadMarginData();
isMarginTableVisible = true;
} else {
// Show main table, hide margin table
$('#marginTable_wrapper').hide();
$('#myTable_wrapper').show();
$(this).html('<i class="fas fa-exchange-alt"></i> Papar Margin');
isMarginTableVisible = false;
}
});
function loadMarginData() {
let marginData = [];
let totalNilaiMarhun = 0;
let totalNilaiTeller = 0;
let totalNilaiPC = 0;
// Process each individual row from the main table
let rowsData = [];
tablemarhun.rows().data().each(function(row, index) {
let recno = row[1]; // Recno column
let karat = row[4]; // Karat column
let nilaiMarhun = parseFloat(row[3].replace(/[^0-9.-]+/g, "")); // Nilai Marhun column
rowsData.push({
index: index,
recno: recno,
karat: karat,
nilaiMarhun: nilaiMarhun
});
});
let bil = 1;
let processedCount = 0;
let totalEntries = rowsData.length;
rowsData.forEach((rowData) => {
// Call API to get margin data for each individual item
$.ajax({
url: '{{ config("api.url") }}/api/maxmutuemas/specific',
type: 'GET',
data: { karat: rowData.karat, nilaimarhun: rowData.nilaiMarhun },
success: function(response) {
if (response && response.karat) {
let nilaiTeller = parseFloat(response.maxteller) || 0;
let nilaiPC = parseFloat(response.maxpc) || 0;
marginData.push({
index: rowData.index,
bil: rowData.index + 1,
recno: rowData.recno,
karat: rowData.karat,
nilaiMarhun: rowData.nilaiMarhun,
marginTeller: response.teller,
marginPC: response.pc,
nilaiTeller: nilaiTeller,
nilaiPC: nilaiPC
});
totalNilaiMarhun += rowData.nilaiMarhun;
totalNilaiTeller += nilaiTeller;
totalNilaiPC += nilaiPC;
}
processedCount++;
if (processedCount === totalEntries) {
// Sort by original index to maintain order
marginData.sort((a, b) => a.index - b.index);
populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC);
}
},
error: function() {
processedCount++;
if (processedCount === totalEntries) {
// Sort by original index to maintain order
marginData.sort((a, b) => a.index - b.index);
populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC);
}
}
});
});
}
let marginDataTable = null;
function populateMarginTable(data, totalMarhun, totalTeller, totalPC) {
// If DataTable already exists, destroy it first
if (marginDataTable !== null) {
marginDataTable.destroy();
marginDataTable = null;
}
let tbody = $('#marginTableBody');
tbody.empty();
data.forEach(function(item) {
let row = `
<tr>
<td>${item.bil}</td>
<td>${item.karat}</td>
<td>RM${item.nilaiMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
<td>${item.marginTeller}%</td>
<td>${item.marginPC}%</td>
<td>RM${item.nilaiTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
<td>RM${item.nilaiPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
</tr>
`;
tbody.append(row);
});
// Initialize DataTable
marginDataTable = $('#marginTable').DataTable({
"pageLength": 10,
"ordering": false,
"order": [[ 0, "asc" ]],
"responsive": true,
"language": {
"lengthMenu": "Papar _MENU_ rekod setiap halaman",
"zeroRecords": "Tiada rekod dijumpai",
"info": "Memapar halaman _PAGE_ dari _PAGES_",
"infoEmpty": "Tiada rekod tersedia",
"infoFiltered": "(ditapis dari _MAX_ jumlah rekod)",
"search": "Cari:",
"paginate": {
"first": "Pertama",
"last": "Akhir",
"next": "Seterusnya",
"previous": "Sebelumnya"
}
},
"footerCallback": function (row, data, start, end, display) {
// Update footer totals
$('#totalNilaiMarhunMargin').text('RM' + totalMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
$('#totalNilaiTellerMargin').text('RM' + totalTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
$('#totalNilaiPCMargin').text('RM' + totalPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
}
});
}
</script> </script>
@endsection @endsection
+54 -242
View File
@@ -14,7 +14,7 @@
@endphp @endphp
@if($gadai_session != null) @if($gadai_session != null)
<div class="p-4"> <div class="container">
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-md-12 col-lg-12"> <div class="col-md-12 col-lg-12">
@@ -64,14 +64,6 @@
</div> </div>
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<!-- Toggle Button -->
<div class="mb-3">
<button type="button" class="btn btn-info" id="toggleTableBtn">
<i class="fas fa-exchange-alt"></i> Papar Margin
</button>
</div>
<!-- Main Marhun Table -->
<table class="table table-striped table-hover text-center" id="myTable"> <table class="table table-striped table-hover text-center" id="myTable">
<thead class="thead-dark"> <thead class="thead-dark">
<tr> <tr>
@@ -98,35 +90,6 @@
<th colspan="5"></th> <th colspan="5"></th>
</tfoot> </tfoot>
</table> </table>
<!-- Margin Summary Table (Hidden by default) -->
<table class="table table-striped table-hover text-center" id="marginTable" style="display: none;">
<thead class="thead-dark">
<tr>
<th>Bil</th>
<th>Karat</th>
<th>Nilai Marhun</th>
<th>Margin Teller (%)</th>
<th>Margin PC (%)</th>
<th>Pembiayaan Teller</th>
<th>Pembiayaan PC</th>
</tr>
</thead>
<tbody id="marginTableBody">
<!-- Data will be populated by JavaScript -->
</tbody>
<tfoot class="thead-dark">
<tr>
<th>Jumlah</th>
<th></th>
<th id="totalNilaiMarhunMargin"></th>
<th></th>
<th></th>
<th id="totalNilaiTellerMargin"></th>
<th id="totalNilaiPCMargin"></th>
</tr>
</tfoot>
</table>
</div> </div>
</div> </div>
<div class="card"> <div class="card">
@@ -218,6 +181,17 @@
</div> </div>
</diV> </diV>
</div> </div>
<div class="col-4">
<div class="form-group row">
<div class="col-md-6">
Kadar Rebet
</div>
<div class="col-md-6">
<input type="text" class="form-control" readonly name="rebate" id="rebate">
<input type="text" class="form-control" readonly name="kadar_rebate" id="kadar_rebate">
</div>
</div>
</div>
<div class="col-12"> <div class="col-12">
<input type="text" name="norujukan_gadai" id="norujukan_gadai" value="{{ $norujukan }}" hidden> <input type="text" name="norujukan_gadai" id="norujukan_gadai" value="{{ $norujukan }}" hidden>
<input type="text" name="marhun_detail" id="marhun_detail" value="" hidden> <input type="text" name="marhun_detail" id="marhun_detail" value="" hidden>
@@ -513,31 +487,18 @@
var tablemarhun = $('#myTable').DataTable({ var tablemarhun = $('#myTable').DataTable({
"ordering": false, "ordering": false,
"columnDefs": [{ "columnDefs": [
{
"targets": [ 1 ], "targets": [ 1 ],
"visible": false, "visible": false,
"searchable": false "searchable": false
}, },
{ {
"targets": [ 7 ], "targets": [ 7 ],
"visible": true, "visible": false,
"searchable": false "searchable": false
} }
], ]
"language": {
"lengthMenu": "Papar _MENU_ rekod setiap halaman",
"zeroRecords": "Tiada rekod dijumpai",
"info": "Memapar halaman _PAGE_ dari _PAGES_",
"infoEmpty": "Tiada rekod tersedia",
"infoFiltered": "(ditapis dari _MAX_ jumlah rekod)",
"search": "Cari:",
"paginate": {
"first": "Pertama",
"last": "Akhir",
"next": "Seterusnya",
"previous": "Sebelumnya"
}
},
}); });
$(".select2").select2({ $(".select2").select2({
@@ -586,14 +547,12 @@
var jumlah_nilai_marhun = 0; var jumlah_nilai_marhun = 0;
var pinjaman_pelulus = 0; var pinjaman_pelulus = 0;
var pinjaman_teller = 0; var pinjaman_teller = 0;
function marhuntable(data){ function marhuntable(data){
var counter = 1; var counter = 1;
total_nilai_marhun = 0; total_nilai_marhun = 0;
total_berat = 0; total_berat = 0;
total_kuantiti = 0; total_kuantiti = 0;
var marhun_details = ''; var marhun_details = '';
var array_mutu = [];
jumlah_nilai_marhun = 0; jumlah_nilai_marhun = 0;
tablemarhun.clear().draw(); tablemarhun.clear().draw();
$.each(data,function(index,marhun){ $.each(data,function(index,marhun){
@@ -604,7 +563,6 @@
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
total_kuantiti += Number(marhun_detail['bil']); total_kuantiti += Number(marhun_detail['bil']);
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
tablemarhun.row.add([ tablemarhun.row.add([
counter, counter,
marhun_detail['recno'], marhun_detail['recno'],
@@ -628,7 +586,13 @@
$('#bilangan_marhun').val(formatter.format(counter-1)); $('#bilangan_marhun').val(formatter.format(counter-1));
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
// if(total_nilai_marhun > 0 && total_nilai_marhun < 401){
// kadarupah = 1.2/100;
// }else if(total_nilai_marhun >= 401 && total_nilai_marhun < 2001){
// kadarupah = 1.5/100;
// }else if(total_nilai_marhun >= 2001 ){
// kadarupah = 1.7/100;
// }
$.ajax({ $.ajax({
method:'GET', method:'GET',
@@ -655,31 +619,24 @@
$('#kadarkeuntungan').val(formatter.format(kadarupah)); $('#kadarkeuntungan').val(formatter.format(kadarupah));
$('#kuantiti_marhun').val(formatter.format(jumlah_marhun)); $('#kuantiti_marhun').val(formatter.format(jumlah_marhun));
var max_teller = 0;
var max_pelulus = 0;
$.ajax({ $.ajax({
method:'GET', method:'GET',
url: api_url + '/api/maxpinjaman', url: api_url + '/api/maxpinjaman',
data: {
'mutu': array_mutu,
'total_nilai_marhun': total_nilai_marhun,
},
success:function(data){ success:function(data){
$.each(data,function(index,pinjaman){ $.each(data,function(index,pinjaman){
if(pinjaman['user_type'] == 'teller'){ if(pinjaman['user_type'] == 'teller'){
pinjaman_teller = Number(pinjaman['max']); pinjaman_teller = Number(pinjaman['max']);
max_teller = pinjaman['teller_pinjaman'];
} }
if(pinjaman['user_type'] == 'khazanah'){ if(pinjaman['user_type'] == 'khazanah'){
pinjaman_pelulus = Number(pinjaman['max']); pinjaman_pelulus = Number(pinjaman['max']);
max_pelulus = pinjaman['pc_pinjaman'];
} }
}); });
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %'); $('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
$('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %'); $('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %');
$('#pembiayaan_max_teller').val(formatter.format(max_teller)); var max_teller = total_nilai_marhun * (pinjaman_teller/100);
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus)); var max_pelulus = total_nilai_marhun * (pinjaman_pelulus/100);
$('#pembiayaan_max_teller').val(formatter.format(max_teller.toFixed(2)));
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2)));
} }
}); });
} }
@@ -717,12 +674,35 @@
var keuntungan_sebulan = getRoundedMethod(array_keuntungan['keuntungan']); var keuntungan_sebulan = getRoundedMethod(array_keuntungan['keuntungan']);
var keuntungan_6bln = getRoundedMethod(keuntungan_sebulan * 6); var keuntungan_6bln = getRoundedMethod(keuntungan_sebulan * 6);
var ujrah = getRoundedMethod(array_keuntungan['ujrah']);
var onepercent = getRoundedMethod(array_keuntungan['onepercent']);
// **Rebate Calculation**
let rebate, kadar_rebate;
if (pinjaman < 20000) {
rebate = keuntungan_sebulan * 0.05;
kadar_rebate = 5;
} else if (pinjaman >= 20000 && pinjaman <= 50000) {
rebate = keuntungan_sebulan * 0.10;
kadar_rebate = 10;
} else if (pinjaman > 50000 && pinjaman <= 100000) {
rebate = keuntungan_sebulan * 0.15;
kadar_rebate = 15;
} else {
rebate = keuntungan_sebulan * 0.20;
kadar_rebate = 20;
}
rebate = getRoundedMethod(rebate); // ✅ Round rebate before displaying
// **Display values**
$('.span-pinjaman').text(formatter.format(percent_pinjaman.toFixed(2)) + ' %'); $('.span-pinjaman').text(formatter.format(percent_pinjaman.toFixed(2)) + ' %');
$('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2))); $('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2)));
$('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2))); $('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2)));
$('#ujrah').val(formatter.format(getRoundedMethod(array_keuntungan['ujrah']).toFixed(2))); $('#ujrah').val(formatter.format(getRoundedMethod(array_keuntungan['ujrah']).toFixed(2)));
$('#onepercent').val(formatter.format(getRoundedMethod(array_keuntungan['onepercent']).toFixed(2))); $('#onepercent').val(formatter.format(getRoundedMethod(array_keuntungan['onepercent']).toFixed(2)));
$('#rebate').val(formatter.format(rebate.toFixed(2))); // Correctly displaying rebate
$('#kadar_rebate').val(formatter.format(kadar_rebate.toFixed(2)) + ' %');
}); });
@@ -928,7 +908,6 @@
var beratpermata = $('#beratpermata').val(); var beratpermata = $('#beratpermata').val();
var kuantiti = $('#kuantiti').val(); var kuantiti = $('#kuantiti').val();
if(kuantiti > 10) if(kuantiti > 10)
{ {
$("#tambah_marhun").prop('disabled', false); $("#tambah_marhun").prop('disabled', false);
@@ -1494,7 +1473,7 @@
swalWithBootstrapButtons.fire({ swalWithBootstrapButtons.fire({
title: 'Dapatkan Pengesahan Khazanah', title: 'Dapatkan Pengesahan Khazanah',
text: "Tetapan Margin Melebihi Limit Maksima Teller!", text: "Tetapan margin melebihi " + pinjaman_teller + "% untuk Khazanah!",
icon: 'info', icon: 'info',
showCancelButton: true, showCancelButton: true,
confirmButtonText: 'Hantar', confirmButtonText: 'Hantar',
@@ -1504,10 +1483,8 @@
if (result.isConfirmed) { if (result.isConfirmed) {
let norujukan = $('#norujukan').val(); let norujukan = $('#norujukan').val();
let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g, "")); let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text();
let ber = $('#total_berat').val(); let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%";
let marg = $('.span-pinjaman').text();
let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%";
let jumpinjam = $('#pinjaman').val(); let jumpinjam = $('#pinjaman').val();
let teller = "{{ Auth::user()->name }}"; let teller = "{{ Auth::user()->name }}";
@@ -1678,8 +1655,7 @@
}, },
success:function(data){ success:function(data){
location.reload(); location.reload();
}, },error: function(xhr, status, error) {
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")"); var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText); alert(xhr.responseText);
} }
@@ -1922,169 +1898,5 @@
} }
}); });
// Toggle Table Functionality
let isMarginTableVisible = false;
$('#toggleTableBtn').on('click', function() {
if (!isMarginTableVisible) {
// Check if main table has data before showing margin table
let tableData = $('#myTable').DataTable().data();
if (tableData.length === 0) {
Swal.fire({
icon: 'warning',
title: 'Amaran!',
text: 'Tiada data marhun untuk papar margin. Sila daftar marhun terlebih dahulu.'
});
return;
}
// Show margin table, hide main table
$('#myTable_wrapper').hide();
$('#marginTable').show();
$(this).html('<i class="fas fa-exchange-alt"></i> Papar Marhun');
loadMarginData();
isMarginTableVisible = true;
// Disable Daftar Marhun button when margin table is visible
$('button[data-target="#daftar_marhun"]').prop('disabled', true);
} else {
// Show main table, hide margin table
$('#marginTable_wrapper').hide();
$('#myTable_wrapper').show();
$(this).html('<i class="fas fa-exchange-alt"></i> Papar Margin');
isMarginTableVisible = false;
// Enable Daftar Marhun button when main table is visible
$('button[data-target="#daftar_marhun"]').prop('disabled', false);
}
});
function loadMarginData() {
let marginData = [];
let totalNilaiMarhun = 0;
let totalNilaiTeller = 0;
let totalNilaiPC = 0;
// Process each individual row from the main table
let rowsData = [];
tablemarhun.rows().data().each(function(row, index) {
console.log(row);
let recno = row[1]; // Recno column
let karat = row[4]; // Karat column
let nilaiMarhun = parseFloat(row[3].replace(/[^0-9.-]+/g, "")); // Nilai Marhun column
rowsData.push({
index: index,
recno: recno,
karat: karat,
nilaiMarhun: nilaiMarhun
});
});
let bil = 1;
let processedCount = 0;
let totalEntries = rowsData.length;
rowsData.forEach((rowData) => {
// Call API to get margin data for each individual item
$.ajax({
url: '{{ config("api.url") }}/api/maxmutuemas/specific',
type: 'GET',
data: { karat: rowData.karat, nilaimarhun: rowData.nilaiMarhun },
success: function(response) {
if (response && response.karat) {
let nilaiTeller = parseFloat(response.maxteller) || 0;
let nilaiPC = parseFloat(response.maxpc) || 0;
marginData.push({
index: rowData.index,
bil: rowData.index + 1,
recno: rowData.recno,
karat: rowData.karat,
nilaiMarhun: rowData.nilaiMarhun,
marginTeller: response.teller,
marginPC: response.pc,
nilaiTeller: nilaiTeller,
nilaiPC: nilaiPC
});
totalNilaiMarhun += rowData.nilaiMarhun;
totalNilaiTeller += nilaiTeller;
totalNilaiPC += nilaiPC;
}
processedCount++;
if (processedCount === totalEntries) {
// Sort by original index to maintain order
marginData.sort((a, b) => a.index - b.index);
populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC);
}
},
error: function() {
processedCount++;
if (processedCount === totalEntries) {
// Sort by original index to maintain order
marginData.sort((a, b) => a.index - b.index);
populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC);
}
}
});
});
}
let marginDataTable = null;
function populateMarginTable(data, totalMarhun, totalTeller, totalPC) {
// If DataTable already exists, destroy it first
if (marginDataTable !== null) {
marginDataTable.destroy();
marginDataTable = null;
}
let tbody = $('#marginTableBody');
tbody.empty();
data.forEach(function(item) {
let row = `
<tr>
<td>${item.bil}</td>
<td>${item.karat}</td>
<td>RM${item.nilaiMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
<td>${item.marginTeller}%</td>
<td>${item.marginPC}%</td>
<td>RM${item.nilaiTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
<td>RM${item.nilaiPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
</tr>
`;
tbody.append(row);
});
// Initialize DataTable
marginDataTable = $('#marginTable').DataTable({
"pageLength": 10,
"ordering": false,
"order": [[ 0, "asc" ]],
"responsive": true,
"language": {
"lengthMenu": "Papar _MENU_ rekod setiap halaman",
"zeroRecords": "Tiada rekod dijumpai",
"info": "Memapar halaman _PAGE_ dari _PAGES_",
"infoEmpty": "Tiada rekod tersedia",
"infoFiltered": "(ditapis dari _MAX_ jumlah rekod)",
"search": "Cari:",
"paginate": {
"first": "Pertama",
"last": "Akhir",
"next": "Seterusnya",
"previous": "Sebelumnya"
}
},
"footerCallback": function (row, data, start, end, display) {
// Update footer totals
$('#totalNilaiMarhunMargin').text('RM' + totalMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
$('#totalNilaiTellerMargin').text('RM' + totalTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
$('#totalNilaiPCMargin').text('RM' + totalPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
}
});
}
</script> </script>
@endsection @endsection
@@ -20,9 +20,7 @@
<a href="{{ route('parameter') }}" class="btn btn-info btn-lg">Parameter</a> <a href="{{ route('parameter') }}" class="btn btn-info btn-lg">Parameter</a>
<a href="{{ route('komuditi') }}" class="btn btn-info btn-lg">Komoditi</a> <a href="{{ route('komuditi') }}" class="btn btn-info btn-lg">Komoditi</a>
<a href="{{ route('perubatan') }}" class="btn btn-info btn-lg">Perubatan</a> <a href="{{ route('perubatan') }}" class="btn btn-info btn-lg">Perubatan</a>
<a href="{{ route('operasi.laporan.audit') }}" class="btn btn-info btn-lg">Laporan Audit</a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,46 +0,0 @@
@extends('layouts.app_operasi')
@section('content')
<div class="container">
<div class="row justify-content-center mt-5">
<div class="col-md-10">
<div class="card">
<nav aria-label="breadcrumb">
<ol class="breadcrumb pb-3">
<li class="breadcrumb-item"><a href="{{ route('home') }}">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Laporan Audit</li>
</ol>
</nav>
<div class="card-header">
<h4 class="text-center">Laporan Audit</h4>
</div>
<div class="card-body">
<form action="{{ route('operasi.audittrail.laporancetak') }}" method="GET">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="dateaudit">Tarikh Mula:</label>
<input type="date" class="form-control" id="dateaudit" name="dateaudit" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="dateaudit_till">Tarikh Akhir:</label>
<input type="date" class="form-control" id="dateaudit_till" name="dateaudit_till" required>
</div>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-info btn-lg">
<i class="fas fa-route"></i> Generate Audit Trail
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -1,63 +0,0 @@
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="card">
<nav aria-label="breadcrumb">
<ol class="breadcrumb pb-3">
<li class="breadcrumb-item"><a href="{{ route('home') }}">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Aliran Tunai</li>
</ol>
</nav>
@if(session()->has('errormessage'))
<div class="alert alert-danger">
{{ session()->get('errormessage') }}
</div>
@endif
<div class="card-body text-center">
<div class="row form-group">
<div class="col-md-2">
</div>
<div class="col-md-10">
</div>
</div>
<div class="row">
<div class="col-md-5">
<form action="{{ route('alirantunai.laporancetak') }}" method="post">
@csrf
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1">Tarikh</span>
</div>
<input type="text" class="form-control" placeholder="Pilih Tarikh" aria-label="Tarikh" id="datetimepicker1" name="datetimepicker1" aria-describedby="basic-addon1">
<input type="submit" class="btn btn-primary ml-md-5" id="submit_button" name="submit_button" value="Cetak">
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var api_url = "<?php echo $api_url ?>";
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
$(document).ready( function () {
$('#datetimepicker1').datepicker({
format: 'dd-mm-yyyy'
});
});
var tablecustomers = $('#myTable').DataTable({
"ordering": false
});
</script>
@endsection
@@ -1,282 +0,0 @@
@extends('layouts.app')
@section('content')
<div class="container">
<h2 class="text-center font-weight-bold my-4">PAMPASAN</h2>
<div class="row mb-4">
<div class="col-md-6">
<label>NAMA</label>
<input type="text" class="form-control mb-2" value="{{ $customer_info['nama'] ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NO PELANGGAN</label>
<input type="text" class="form-control mb-2" value="{{ $gadai_info['nopelanggan'] ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NO RUJUKAN</label>
<input type="text" class="form-control mb-2" value="{{ $gadai_info['norujukan'] ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NO KAD PENGENALAN</label>
<input type="text" class="form-control mb-2" value="{{ $gadai_info['nokp'] ?? '-' }}" readonly>
</div>
</div>
<div class="card p-4 mx-auto" style="max-width:900px;">
<div class="row mb-3">
<div class="col-md-6">
<label>BAUCER NO</label>
<input type="text" class="form-control" value="{{ $baucerno ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NILAI MARHUN</label>
<input type="text" class="form-control"
value="RM {{ number_format($barang_kes_info['nilaimarhun'], 2) }}" readonly>
</div>
<div class="col-md-6">
<label>BAKI PEMBIAYAAN</label>
<input type="text" class="form-control"
value="RM {{ number_format($barang_kes_info['pembiayaan'], 2) }}" readonly>
</div>
<div class="col-md-6">
<label>KEUNTUNGAN</label>
<input type="text" class="form-control" value="RM {{ number_format($barang_kes_info['untung'], 2) }}"
readonly>
</div>
<div class="col-md-6">
<label>JUMLAH PAMPASAN</label>
@php
$nilaimarhun = floatval($barang_kes_info['nilaimarhun'] ?? 0);
$pembiayaan = floatval($barang_kes_info['pembiayaan'] ?? 0);
$untung = floatval($barang_kes_info['untung'] ?? 0);
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
@endphp
<input type="text" class="form-control" value="RM {{ number_format($jumlah_pampasan, 2) }}" readonly>
</div>
<div class="col-md-6">
<label>JUMLAH TEBUS</label>
<input type="text" class="form-control" value="RM {{ number_format($jumlah_tebus, 2) }}" readonly>
</div>
<div class="col-md-12 row mb-3 justify-content-center">
<div class="col-md-6 text-center">
<label><strong>JUMLAH PANJAR</strong></label>
<input type="text" class="form-control text-center"
value="RM {{ number_format($jumlahPanjar, 2) }}" readonly>
</div>
</div>
</div>
<div class="row mb-3">
<div class="col-12">
<div class="alert alert-info text-center font-weight-bold" style="font-size: 1.2rem;">
Cara Pengiraan Jumlah Pampasan:<br>
<span style="font-size:1.3rem;">
<b>Jumlah Pampasan = Nilai Marhun - Baki Pembiayaan - Keuntungan</b>
</span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 text-right">
<button type="button" class="btn btn-success mr-2" data-toggle="modal"
data-target="#denominasipampasan" data-jumlah="{{ $jumlah_pampasan }}">
DENO
</button>
<button type="button" class="btn btn-danger" onclick="window.history.back()">BATAL</button>
</div>
</div>
</div>
</div>
<script>
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
var arrayambilan = [
["bundle1", 0],
["bundle5", 0],
["bundle10", 0],
["bundle20", 0],
["bundle50", 0],
["bundle100", 0],
["sen1", 0],
["sen5", 0],
["sen10", 0],
["sen20", 0],
["sen50", 0],
["ringgit1", 0],
["ringgit5", 0],
["ringgit10", 0],
["ringgit20", 0],
["ringgit50", 0],
["ringgit100", 0]
];
function totalamount(idwang, bilangan) {
var amount = 0;
switch (idwang) {
case 'bundle1':
amount += (bilangan * 100);
break;
case 'bundle20':
amount += (bilangan * 1000);
break;
case 'bundle5':
amount += (bilangan * 500);
break;
case 'bundle50':
amount += (bilangan * 5000);
break;
case 'bundle10':
amount += (bilangan * 1000);
break;
case 'bundle100':
amount += (bilangan * 5000);
break;
case 'sen1':
amount += (bilangan * 0.01);
break;
case 'sen5':
amount += (bilangan * 0.05);
break;
case 'sen10':
amount += (bilangan * 0.10);
break;
case 'sen20':
amount += (bilangan * 0.20);
break;
case 'sen50':
amount += (bilangan * 0.50);
break;
case 'ringgit1':
amount += (bilangan * 1);
break;
case 'ringgit5':
amount += (bilangan * 5);
break;
case 'ringgit10':
amount += (bilangan * 10);
break;
case 'ringgit20':
amount += (bilangan * 20);
break;
case 'ringgit50':
amount += (bilangan * 50);
break;
case 'ringgit100':
amount += (bilangan * 100);
break;
}
return amount;
}
function kiraanpanjar(datakeyin) {
var idkey = $(datakeyin).attr('id');
var valkey = $(datakeyin).val();
var amount = 0;
let amountkiraan = 0;
var validate = parseFloat($(datakeyin).data('amaun'));
$.each(arrayambilan, function(index, arr) {
if (arr[0] == idkey) {
arrayambilan[index][1] = totalamount(idkey, valkey);
}
amount += arr[1];
});
if (Number(valkey) > Number(validate)) {
Swal.fire({
icon: 'error',
title: 'Amaran',
text: 'Jumlah denominasi melebihi kadar'
});
$(datakeyin).val('');
} else {
$('#amaunkiraan').val(amount);
}
switch (idkey) {
case 'bundle1':
amountkiraan += (valkey * 100);
$('#totalb1').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle20':
amountkiraan += (valkey * 1000);
$('#totalb20').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle5':
amountkiraan += (valkey * 500);
$('#totalb5').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle50':
amountkiraan += (valkey * 5000);
$('#totalb50').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle10':
amountkiraan += (valkey * 1000);
$('#totalb10').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle100':
amountkiraan += (valkey * 5000);
$('#totalb100').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen1':
amountkiraan += (valkey * 0.01);
$('#totalsen1').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen5':
amountkiraan += (valkey * 0.05);
$('#totalsen5').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen10':
amountkiraan += (valkey * 0.10);
$('#totalsen10').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen20':
amountkiraan += (valkey * 0.20);
$('#totalsen20').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen50':
amountkiraan += (valkey * 0.50);
$('#totalsen50').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit1':
amountkiraan += (valkey * 1);
$('#totalring1').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit5':
amountkiraan += (valkey * 5);
$('#totalring5').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit10':
amountkiraan += (valkey * 10);
$('#totalring10').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit20':
amountkiraan += (valkey * 20);
$('#totalring20').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit50':
amountkiraan += (valkey * 50);
$('#totalring50').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit100':
amountkiraan += (valkey * 100);
$('#totalring100').val(formatter.format(amountkiraan.toFixed(2)));
break;
}
}
</script>
@include('modal.denopampasan')
@endsection
+55 -430
View File
@@ -23,8 +23,7 @@
@php @php
$session = Session::get("messageinformation"); $session = Session::get("messageinformation");
@endphp @endphp
<script> <script> Swal.fire({
Swal.fire({
icon: '{!! $session["status"] !!}', icon: '{!! $session["status"] !!}',
title: 'Status!', title: 'Status!',
text: '{!! $session["message"] !!}' text: '{!! $session["message"] !!}'
@@ -32,32 +31,16 @@
</script> </script>
@endif @endif
@if(Session::has('pampasaninformation')) <div class="row mb-4">
@php <div class="col-2 justify-content-start">
$session = Session::get("pampasaninformation");
@endphp
<script>
onclickPampasan('all');
</script>
@endif
<div class="row mb-4" id="status-filter-container" style="display: none;">
<div class="col-12 d-flex justify-content-end align-items-center">
<div id="item">
<label class="mr-3 mb-0">
<input type="radio" name="status" data-status="all" checked> Semua
</label>
<label class="mr-3 mb-0">
<input type="radio" name="status" data-status="dituntut"> Dituntut
</label>
<label class="mr-3 mb-0">
<input type="radio" name="status" data-status="belum-tuntut"> Belum Dituntut
</label>
</div> </div>
<div class="col-8 mt-3 justify-content-center">
</div>
<div class="col-2">
</div> </div>
</div> </div>
<div class="mb-5" id="date-range-container"> <div class="mb-5">
<div class="row"> <div class="row">
<div class="col-1"></div> <div class="col-1"></div>
<label class="col-3 text-right">Mula</label> <label class="col-3 text-right">Mula</label>
@@ -80,15 +63,9 @@
<button class="btn btn-primary btn-lg btn-block" data-toggle="modal" data-target="#DapurModal" data-backdrop="static" data-keyboard="false">Dapur</button> <button class="btn btn-primary btn-lg btn-block" data-toggle="modal" data-target="#DapurModal" data-backdrop="static" data-keyboard="false">Dapur</button>
<button class="btn btn-primary btn-lg btn-block" data-toggle="modal" data-target="#PosModal" data-backdrop="static" data-keyboard="false">Pos</button> <button class="btn btn-primary btn-lg btn-block" data-toggle="modal" data-target="#PosModal" data-backdrop="static" data-keyboard="false">Pos</button>
@if(isset($cawangan_info['kodcaw']) && $cawangan_info['kodcaw'] === '011237')
<button class="btn btn-warning btn-lg btn-block" id="btnPampasan">Pampasan</button>
@endif
<button class="btn btn-primary btn-lg btn-block mt-5" data-toggle="modal" data-target="#BakiPerubatanModal" data-backdrop="static" data-keyboard="false">Baki Perubatan</button> <button class="btn btn-primary btn-lg btn-block mt-5" data-toggle="modal" data-target="#BakiPerubatanModal" data-backdrop="static" data-keyboard="false">Baki Perubatan</button>
</div> </div>
<div class="col-9"> <div class="col-9">
<div id="default-table-section">
<table class='table table-striped table-hover' id='table-panjar' style="width:100%;"> <table class='table table-striped table-hover' id='table-panjar' style="width:100%;">
<thead class="thead-dark"> <thead class="thead-dark">
<tr> <tr>
@@ -102,28 +79,6 @@
</thead> </thead>
</table> </table>
</div> </div>
<div id="pampasan-table-section" style="display:none;">
<div class="table-responsive">
<table class='table table-striped table-hover table-sm' id='table-pampasan' style="width:100%; font-size: 0.85rem;">
<thead class="thead-dark">
<tr style="font-size: 0.8rem;">
<th style="width: 5%; padding: 0.4rem 0.2rem;">bil</th>
<th style="width: 8%; padding: 0.4rem 0.2rem;">nokp</th>
<th style="width: 12%; padding: 0.4rem 0.2rem;">norujukan</th>
<th style="width: 10%; padding: 0.4rem 0.2rem;">pembiayaan</th>
<th style="width: 10%; padding: 0.4rem 0.2rem;">nilai marhun</th>
<th style="width: 5%; padding: 0.4rem 0.2rem;">jbg</th>
<th style="width: 12%; padding: 0.4rem 0.2rem;">status</th>
<th style="width: 18%; padding: 0.4rem 0.2rem;">tindakan</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div> </div>
</div> </div>
@@ -134,6 +89,9 @@
</div> </div>
<script src="{{ asset('js/main.js') }}"></script> <script src="{{ asset('js/main.js') }}"></script>
<script> <script>
var api_url = "<?php echo $api_url ?>"; var api_url = "<?php echo $api_url ?>";
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>"; var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
@@ -142,7 +100,8 @@
$.ajax({ $.ajax({
method: 'get', method: 'get',
url: api_url + '/api/SenaraiPanjar/list/' + kodcaw, url: api_url + '/api/SenaraiPanjar/list/' + kodcaw,
success: function(data) { success:function(data)
{
let today = new Date(); let today = new Date();
let dd = String(today.getDate()).padStart(2, '0'); let dd = String(today.getDate()).padStart(2, '0');
let mm = String(today.getMonth() + 1).padStart(2, '0'); //Januari Keno Wak 0 Macei Array La let mm = String(today.getMonth() + 1).padStart(2, '0'); //Januari Keno Wak 0 Macei Array La
@@ -181,8 +140,7 @@
url: api_url + '/api/SenaraiPanjar/'+kodcaw, url: api_url + '/api/SenaraiPanjar/'+kodcaw,
success: function(panjar){ success: function(panjar){
listtable(panjar); listtable(panjar);
}, },error: function(xhRequest, ErrorText, thrownError){
error: function(xhRequest, ErrorText, thrownError) {
Swal.fire({ Swal.fire({
icon: 'error', icon: 'error',
title: 'Amaran!', title: 'Amaran!',
@@ -209,17 +167,15 @@
$.each(data,function(index,panjar){ $.each(data,function(index,panjar){
// Check if deskripsi starts with "BAYARAN PAMPASAN" to hide trash button if(today === panjar['tarikh'])
const showTrashButton = !panjar['deskripsi'].startsWith('BAYARAN PAMPASAN'); {
if (today === panjar['tarikh']) {
tablepanjar.row.add([ tablepanjar.row.add([
counter, counter,
panjar['tarikh'], panjar['tarikh'],
panjar['deskripsi'], panjar['deskripsi'],
panjar['kategori'], panjar['kategori'],
panjar['bayaran'], panjar['bayaran'],
showTrashButton ? '<button onclick="deletepanjar(this);" data-baucer="' + panjar['nobaucer'] + '" data-recno="' + panjar['recno'] + '" class="btn btn-danger fas fa-trash-alt"></button>' : '' '<button onclick="deletepanjar(this);" data-baucer="' + panjar['nobaucer'] + '" data-recno="' + panjar['recno'] + '" class="btn btn-danger fas fa-trash-alt"></button>'
]).draw(); ]).draw();
}else{ }else{
tablepanjar.row.add([ tablepanjar.row.add([
@@ -228,7 +184,7 @@
panjar['deskripsi'], panjar['deskripsi'],
panjar['kategori'], panjar['kategori'],
panjar['bayaran'], panjar['bayaran'],
showTrashButton ? '<button data-baucer="' + panjar['nobaucer'] + '" data-recno="' + panjar['recno'] + '" class="btn btn-secondary fas fa-trash-alt"></button>' : '' '<button data-baucer="' + panjar['nobaucer'] + '" data-recno="' + panjar['recno'] + '" class="btn btn-secondary fas fa-trash-alt"></button>'
]).draw(); ]).draw();
} }
@@ -240,7 +196,8 @@
} }
function deletepanjar(e) { function deletepanjar(e)
{
let rec_no = $(e).data('recno'); let rec_no = $(e).data('recno');
let no_baucer = $(e).data('baucer'); let no_baucer = $(e).data('baucer');
@@ -267,7 +224,8 @@
}, },
success:function(data){ success:function(data){
if (data === 'berjaya') { if(data === 'berjaya')
{
location.reload(); location.reload();
}else{ }else{
@@ -289,17 +247,21 @@
}); });
} }
function caritarikh() { function caritarikh()
{
let mula = $('#mula').val(); let mula = $('#mula').val();
let akhir = $('#akhir').val(); let akhir = $('#akhir').val();
if (mula == '' || akhir == '') { if(mula == '' || akhir == '')
{
Swal.fire({ Swal.fire({
icon: 'error', icon: 'error',
title: 'Amaran!', title: 'Amaran!',
text: 'Mesti letakkan kedua-dua input' text: 'Mesti letakkan kedua-dua input'
}); });
} else { }
else
{
//date //date
let split_date = mula.split('-'); let split_date = mula.split('-');
@@ -314,8 +276,7 @@
url: api_url + '/api/SenaraiPanjar/'+kodcaw + '/' + mula_date + '/' + akhir_date, url: api_url + '/api/SenaraiPanjar/'+kodcaw + '/' + mula_date + '/' + akhir_date,
success: function(panjar){ success: function(panjar){
listtable(panjar); listtable(panjar);
}, },error: function(xhRequest, ErrorText, thrownError){
error: function(xhRequest, ErrorText, thrownError) {
Swal.fire({ Swal.fire({
icon: 'error', icon: 'error',
title: 'Amaran!', title: 'Amaran!',
@@ -329,7 +290,8 @@
} }
function kiraanpanjar(datakeyin) { function kiraanpanjar(datakeyin)
{
var idkey = $(datakeyin).attr('id'); var idkey = $(datakeyin).attr('id');
var valkey = $(datakeyin).val(); var valkey = $(datakeyin).val();
var amount = 0; var amount = 0;
@@ -338,7 +300,8 @@
var validate = parseFloat($(datakeyin).data('amaun')); var validate = parseFloat($(datakeyin).data('amaun'));
$.each(arrayambilan, function( index, arr ){ $.each(arrayambilan, function( index, arr ){
if (arr[0] == idkey) { if(arr[0] == idkey)
{
arrayambilan[index][1] = totalamount(idkey,valkey); arrayambilan[index][1] = totalamount(idkey,valkey);
} }
@@ -346,14 +309,17 @@
amount += arr[1]; amount += arr[1];
}); });
if (Number(valkey) > Number(validate)) { if(Number(valkey) > Number(validate))
{
Swal.fire({ Swal.fire({
icon: 'error', icon: 'error',
title: 'Amaran', title: 'Amaran',
text: 'Jumlah denominasi melebihi kadar' text: 'Jumlah denominasi melebihi kadar'
}); });
$(datakeyin).val(''); $(datakeyin).val('');
} else { }
else
{
$('#amaunkiraan').val(amount); $('#amaunkiraan').val(amount);
@@ -432,7 +398,8 @@
} }
function checkformpanjar(formdata) { function checkformpanjar(formdata)
{
$("#terima_transaksi_keraian").prop('disabled', true); $("#terima_transaksi_keraian").prop('disabled', true);
$("#terima_transaksi_selenggara").prop('disabled', true); $("#terima_transaksi_selenggara").prop('disabled', true);
$("#terima_transaksi_belanjaam").prop('disabled', true); $("#terima_transaksi_belanjaam").prop('disabled', true);
@@ -451,12 +418,10 @@
let bayaran = $(formdata).find("[name='bayaran']").val(); let bayaran = $(formdata).find("[name='bayaran']").val();
let booltarikh = true; let booltarikh = true; let booltarikhbil = true; let booldeskripsi = true; let boolbayaran = true;
let booltarikhbil = true;
let booldeskripsi = true;
let boolbayaran = true;
if (!tarikh) { if(!tarikh)
{
$(formdata).find("[name='errortarikh']").show(); $(formdata).find("[name='errortarikh']").show();
$(formdata).find("[name='errortarikh']").text("*Isikan tarikh dalam input!"); $(formdata).find("[name='errortarikh']").text("*Isikan tarikh dalam input!");
$(formdata).find("[name='tarikh']").addClass('is-invalid'); $(formdata).find("[name='tarikh']").addClass('is-invalid');
@@ -471,7 +436,8 @@
booltarikh = true; booltarikh = true;
} }
if (!tarikhbil) { if(!tarikhbil)
{
$(formdata).find("[name='errorbil']").show(); $(formdata).find("[name='errorbil']").show();
$(formdata).find("[name='errorbil']").text("*Isikan tarikh bil dalam input!"); $(formdata).find("[name='errorbil']").text("*Isikan tarikh bil dalam input!");
$(formdata).find("[name='tarikhbil']").addClass('is-invalid'); $(formdata).find("[name='tarikhbil']").addClass('is-invalid');
@@ -487,7 +453,8 @@
booltarikhbil = true; booltarikhbil = true;
} }
if (!$.trim(deskripsi)) { if(!$.trim(deskripsi))
{
$(formdata).find("[name='errordeskripsi']").show(); $(formdata).find("[name='errordeskripsi']").show();
$(formdata).find("[name='errordeskripsi']").text("*Isikan tarikh deskripsi dalam input!"); $(formdata).find("[name='errordeskripsi']").text("*Isikan tarikh deskripsi dalam input!");
$(formdata).find("[name='deskripsi']").addClass('is-invalid'); $(formdata).find("[name='deskripsi']").addClass('is-invalid');
@@ -502,7 +469,8 @@
booldeskripsi = true; booldeskripsi = true;
} }
if (!bayaran) { if(!bayaran)
{
$(formdata).find("[name='errorbayaran']").show(); $(formdata).find("[name='errorbayaran']").show();
$(formdata).find("[name='errorbayaran']").text("*Isikan bayaran dalam input!"); $(formdata).find("[name='errorbayaran']").text("*Isikan bayaran dalam input!");
$(formdata).find("[name='bayaran']").addClass('is-invalid'); $(formdata).find("[name='bayaran']").addClass('is-invalid');
@@ -524,7 +492,8 @@
let errordeskripsi = $(formdata).find("[name='errordeskripsi']").text(); let errordeskripsi = $(formdata).find("[name='errordeskripsi']").text();
let errorbayaran = $(formdata).find("[name='errorbayaran']").text(); let errorbayaran = $(formdata).find("[name='errorbayaran']").text();
if (booltarikh === true && booltarikhbil === true && booldeskripsi === true && boolbayaran === true) { if(booltarikh === true && booltarikhbil === true && booldeskripsi === true && boolbayaran === true)
{
return true; return true;
@@ -547,12 +516,14 @@
} }
function openupdeno() { function openupdeno()
{
$('#denominasipanjar').modal('show'); $('#denominasipanjar').modal('show');
} }
function terimadeno() { function terimadeno()
{
// alert($('#keraianModal').hasClass('in')); --> nak tahu modal mano huk shown lagi // alert($('#keraianModal').hasClass('in')); --> nak tahu modal mano huk shown lagi
// $keraian = $('#keraianModal').hasClass('in'); // $keraian = $('#keraianModal').hasClass('in');
@@ -793,352 +764,6 @@
//End Modal Reset //End Modal Reset
$('#btnPampasan').on('click', function() {
onclickPampasan('all');
});
// Initialize tooltips for dynamic content
function initializeTooltips() {
$('[data-toggle="tooltip"]').tooltip('dispose').tooltip();
}
function onclickPampasan(status) {
$('#default-table-section').hide();
$('#pampasan-table-section').show();
$('#mula').hide();
$('#akhir').hide();
$('#date-range-container').hide();
$('#status-filter-container').fadeIn();
// Get kodcaw and date range
let kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
let tarikh_mula = $('#mula').val();
let tarikh_akhir = $('#akhir').val();
// If datepickers are empty, use today as default
if (!tarikh_mula || !tarikh_akhir) {
let today = new Date();
let dd = String(today.getDate()).padStart(2, '0');
let mm = String(today.getMonth() + 1).padStart(2, '0');
let yyyy = today.getFullYear();
let todayStr = yyyy + '-' + mm + '-' + dd;
tarikh_mula = todayStr;
tarikh_akhir = todayStr;
} else {
// Convert dd-mm-yyyy to yyyy-mm-dd if needed
let mulaSplit = tarikh_mula.split('-');
tarikh_mula = mulaSplit[2] + '-' + mulaSplit[1] + '-' + mulaSplit[0];
let akhirSplit = tarikh_akhir.split('-');
tarikh_akhir = akhirSplit[2] + '-' + akhirSplit[1] + '-' + akhirSplit[0];
}
let targetUrl = api_url + '/api/palsu/laporan';
if (status == 'all') {
targetUrl = targetUrl + '?status=all';
} else if (status == 'dituntut') {
targetUrl = targetUrl + '?status=dituntut';
} else {
targetUrl = targetUrl + '?status=belum-tuntut';
}
console.log(targetUrl);
$.ajax({
method: 'get',
url: targetUrl,
data: {
kodcaw: '011237',
},
success: function(data) {
console.log(data);
const options = {
style: 'currency',
currency: 'MYR',
minimumFractionDigits: 2,
maximumFractionDigits: 2
};
let tbody = $('#table-pampasan tbody');
tbody.empty();
let bil = 1;
let sudahTuntutSecaraManual = [
'011237240719-0015',
'011237240806-0011',
'011237240828-0001',
'011237240731-0026',
'011237240912-0009'
];
data.forEach(function(row) {
let gadaianBelumTebus = row.gadaian_sudah_tebus == false;
let status = '';
let printSuratPerjanjian = 'disabled';
let prosesTebus = 'disabled';
if (gadaianBelumTebus) {
status = '<span class="badge badge-secondary">belum tebus</span>';
printSuratPerjanjian = 'disabled';
prosesTebus = 'disabled';
} else {
status = row.status == "1" ?
'<span class="badge badge-success">dituntut</span>' :
'<span class="badge badge-danger">belum tuntut</span>';
printSuratPerjanjian = row.status == "1" ?
'disabled' :
'';
prosesTebus = row.status == "1" ?
'disabled' :
'';
}
// create a logic here if row.norujukan is part of sudahTuntutManual, then status will be badge dituntut, printSuratPerjanjian will be disabled and also prosesTebus will be disabled
if (sudahTuntutSecaraManual.includes(row.norujukan)) {
status = '<span class="badge badge-warning">dituntut manual</span>';
printSuratPerjanjian = 'disabled';
prosesTebus = 'disabled';
}
tbody.append(`
<tr style="font-size: 0.85rem;">
<td style="padding: 0.4rem 0.2rem;">${bil}</td>
<td style="padding: 0.4rem 0.2rem;">${row.nokp}</td>
<td style="padding: 0.4rem 0.2rem; font-size: 0.8rem;">${row.norujukan}</td>
<td style="padding: 0.4rem 0.2rem;">${row.pembiayaan ? parseFloat(row.pembiayaan).toLocaleString('en-MY', options) : '-'}</td>
<td style="padding: 0.4rem 0.2rem;">${row.nilaimarhun ? parseFloat(row.nilaimarhun).toLocaleString('en-MY', options) : '-'}</td>
<td style="padding: 0.4rem 0.2rem;">${row.jbg}</td>
<td style="padding: 0.4rem 0.2rem;">${status}</td>
<td style="padding: 0.4rem 0.2rem;">
<button class="btn btn-link btn-proses-pampasan" data-norujukan="${row.norujukan}" ${prosesTebus} title="Proses Tuntutan" data-toggle="tooltip" data-placement="top">
<i class="fas fa-arrow-circle-right fa-lg" style="pointer-events: none; color: ${prosesTebus === 'disabled' ? '#6c757d' : 'green'};"></i>
</button>
<button class="btn btn-link" ${printSuratPerjanjian} title="Cetak Surat Perjanjian" data-toggle="tooltip" data-placement="top"
onclick="${printSuratPerjanjian === 'disabled' ? '' : `window.open('/pampasan/surat/${row.norujukan}', '_blank')`}">
<i class="fas fa-print fa-lg" style="pointer-events: none; ${printSuratPerjanjian === 'disabled' ? 'color: #6c757d;' : ''}"></i>
</button>
</td>
</tr>
`);
bil++;
});
// Initialize tooltips for dynamically added buttons
initializeTooltips();
}
});
}
// When any other modal is opened, show the default table again
$('.btn[data-target^="#"][data-target!="#PampasanModal"]').on('click', function() {
$('#default-table-section').show();
$('#pampasan-table-section').hide();
$('#mula').show();
$('#akhir').show();
$('#date-range-container').show();
$('#status-filter-container').fadeOut();
});
// Also, when Pampasan modal is closed, show the default table again
$('#PampasanModal').on('hidden.bs.modal', function() {
$('#default-table-section').show();
$('#pampasan-table-section').hide();
$('#mula').show();
$('#akhir').show();
$('#date-range-container').show();
$('#status-filter-container').fadeOut();
});
const companyInfo = {
name: "KOPERASI PERMODALAN KELANTAN BERHAD",
address: "Lot PT 448, Tingkat 1, Jalan Kuala Krai, Batu 3<br> Wakaf Che Yeh, 15150 Kota Bharu, Kelantan",
phone: "09-741 4331 / 4334",
website: "www.koppkb.com",
email: "admin@koppkb.com"
};
// Simpan norujukan global untuk redirect
let currentNorujukan = null;
function askOperasiApproval(gadaianDetail) {
const swalWithBootstrapButtons = Swal.mixin({
customClass: {
confirmButton: 'btn btn-success',
cancelButton: 'btn btn-danger'
},
buttonsStyling: false
});
swalWithBootstrapButtons.fire({
title: 'Dapatkan Pengesahan Operasi',
text: 'Kelulusan Pengeluaran Pampasan',
icon: 'info',
showCancelButton: true,
confirmButtonText: 'Hantar',
cancelButtonText: 'Batal',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
let norujukan = gadaianDetail.norujukan;
let nm = gadaianDetail.nilaimarhun;
let ber = gadaianDetail.berat;
let marg = gadaianDetail.margin_semasa;
let status = 'Kelulusan Pengeluaran Pampasan';
let jumpinjam = gadaianDetail.pinjaman;
let teller = "{{ Auth::user()->name }}";
Swal.fire({
title: 'Tunggu Pengesahan Daripada Operasi.',
icon: 'info',
width: 600,
padding: '3em',
background: '#fffff',
showCancelButton: false,
showConfirmButton: false,
allowOutsideClick: false,
allowEscapeKey: false,
allowEnterKey: false
})
let siricreated = 0;
$.ajax({
method: 'post',
url: "{{ route('operasi.createkelulusan-by-khazanah') }}",
data: {
"_token": "{{ csrf_token() }}",
"norujukan": norujukan,
"komen": '',
"margin": marg,
"berat": ber,
"nilaimarhun": nm,
"status": status,
"jumpinjam": jumpinjam,
"teller": teller,
"pelulus": 'operasi'
},
success: function(data) {
siricreated = data;
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
var pusher = new Pusher("{{ env('PUSHER_APP_KEY') }}", {
cluster: 'ap1',
encrypted: true
});
var channel = pusher.subscribe('notice-kelulusan');
channel.bind('my-kelulusan', function(data) {
if (data.norujukan == norujukan && data.siri == siricreated && data.teller == teller) {
console.log(data);
if (data.kelulusan == 'lulus') {
let komen = data.komen == null ? 'tiada' : data.komen;
Swal.fire({
icon: 'success',
title: 'Telah Disahkan',
text: `Komen : ${komen}`
}).then(function() {
window.location.href = '/pampasan/detail/' + norujukan;
});
} else if (data.kelulusan == 'batal') {
let komen = data.komen == null ? 'tiada' : data.komen;
Swal.fire({
icon: 'warning',
title: 'Telah Dibatalkan',
text: `Komen : ${komen}`
}).then(function() {
return false;
});
}
}
});
} else if (result.dismiss === Swal.DismissReason.cancel) {
$("#terima_gadai").prop('disabled', false);
swalWithBootstrapButtons.fire(
'Batal',
'Maklumat Pembiayaan Tidak Berjaya Disimpan',
'error'
)
}
})
}
document.addEventListener('click', async function(e) {
const suratBtn = e.target.closest('.btn-proses-pampasan');
if (suratBtn) {
const norujukan = suratBtn.getAttribute('data-norujukan');
let gadaianDetail = await fetch("{{ config('api.url') }}" + `/api/gadai/norujukankodcaw/${kodcaw}/${norujukan}`)
.then(response => response.json());
askOperasiApproval(gadaianDetail[0][0]);
}
});
document.addEventListener("DOMContentLoaded", function() {
const params = new URLSearchParams(window.location.search);
let pampasanExist = params.get("pampasan");
if (pampasanExist) {
document.getElementById('btnPampasan').click();
}
});
document.addEventListener('DOMContentLoaded', function() {
let radioStatusAll = document.querySelector('input[type="radio"][data-status="all"]');
let radioStatusDituntut = document.querySelector('input[type="radio"][data-status="dituntut"]');
let radioStatusBelumTuntut = document.querySelector('input[type="radio"][data-status="belum-tuntut"]');
radioStatusAll.addEventListener('click', function() {
onclickPampasan('all');
})
radioStatusDituntut.addEventListener('click', function() {
onclickPampasan('dituntut');
})
radioStatusBelumTuntut.addEventListener('click', function() {
onclickPampasan('belum-tuntut');
})
// Check if Bootstrap tooltip is available, if not, load it
if (typeof $().tooltip === 'undefined') {
console.log('Bootstrap tooltip not available, using title attributes instead');
return;
}
// Initialize tooltips on page load
initializeTooltips();
// Re-initialize tooltips when new content is added via AJAX
$(document).on('DOMNodeInserted', function() {
setTimeout(initializeTooltips, 100);
});
});
</script> </script>
@endsection @endsection
+34 -109
View File
@@ -13,7 +13,7 @@
@include('modal.agh') @include('modal.agh')
<div class="container col-12"> <div class="container">
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-md-12 col-lg-12"> <div class="col-md-12 col-lg-12">
<div class="card"> <div class="card">
@@ -171,7 +171,7 @@
</nav> </nav>
<div class="tab-content" id="navtawarruqdannottawarruq"> <div class="tab-content" id="navtawarruqdannottawarruq">
<div class="tab-pane fade {{ $activate_pane_SAG_baru }}" id="nav-tawarruq" role="tabpanel" aria-labelledby="nav-tawarruq-tab"> <div class="tab-pane fade {{ $activate_pane_SAG_baru }}" id="nav-tawarruq" role="tabpanel" aria-labelledby="nav-tawarruq-tab">
<table class="table table-striped table-hover" id="myTable" style="width: 100%"> <table class="table table-striped table-hover" id="myTable">
<thead class="thead-dark"> <thead class="thead-dark">
<tr> <tr>
<th>Bil</th> <th>Bil</th>
@@ -184,14 +184,23 @@
<th>Tempoh</th> <th>Tempoh</th>
<th>Keuntungan</th> <th>Keuntungan</th>
<th>Lelong</th> <th>Lelong</th>
<th>Pembayaran Terakhir</th>
</tr> </tr>
</thead> </thead>
</table> </table>
</div> </div>
<div class="tab-pane fade {{ $activate_pane_SAG_lama }}" id="nav-xtawarruq" role="tabpanel" aria-labelledby="nav-xtawarruq-tab"> <div class="tab-pane fade {{ $activate_pane_SAG_lama }}" id="nav-xtawarruq" role="tabpanel" aria-labelledby="nav-xtawarruq-tab">
<table id="xtawarruq" class="table table-striped table-hover" style="width:100%"> <table id="xtawarruq" class="table table-striped table-hover">
<thead class="thead-dark"> <thead class="thead-dark">
{{-- <tr>
<th>Bil</th>
<th>No Rujukan</th>
<th>Tarikh Gadai</th>
<th>Tarikh Matang</th>
<th>Pembiayaan</th>
<th>Margin</th>
<th>Tempoh</th>
<th>Lelong</th>
</tr> --}}
<tr> <tr>
<th>Bil</th> <th>Bil</th>
<th>No Rujukan</th> <th>No Rujukan</th>
@@ -203,7 +212,6 @@
<th>Tempoh</th> <th>Tempoh</th>
<th>Keuntungan</th> <th>Keuntungan</th>
<th>Lelong</th> <th>Lelong</th>
<th>Pembayaran Terakhir</th>
</tr> </tr>
</thead> </thead>
</table> </table>
@@ -225,9 +233,7 @@
</thead> </thead>
</table> </table>
{{-- Lelong --}} <table id="lelongTable" class="table table-striped table-hover">
<table id="lelongTable" class="table table-striped table-hover" style="width:100%">
<thead class="thead-dark"> <thead class="thead-dark">
<tr> <tr>
<th>Bil</th> <th>Bil</th>
@@ -508,7 +514,7 @@
}); });
var xtawarruq = $('#xtawarruq').DataTable({ var xtawarruq = $('#xtawarruq').DataTable({
"scrollX": true, "scrollX": false
}); });
var tabledahtebus = $('#dahtebusTable').DataTable({ var tabledahtebus = $('#dahtebusTable').DataTable({
@@ -557,26 +563,6 @@
function checkserah(data){ function checkserah(data){
var urlpenebusan = $(data).data("url"); var urlpenebusan = $(data).data("url");
var norujukan = $(data).data("norujukan"); var norujukan = $(data).data("norujukan");
var isBlocked = $(data).data("blocked");
if(isBlocked === true || isBlocked === "true"){
Swal.fire({
icon: 'error',
title: 'Amaran',
text: 'Pembiayaan Sedang Dilelong'
});
return false;
}
Swal.fire({
title: 'Memuatkan...',
allowEscapeKey : false,
allowOutsideClick: false,
didOpen: function () {
Swal.showLoading()
}
});
$.ajax({ $.ajax({
method:'get', method:'get',
url: api_url + '/api/check/serah/gadai', url: api_url + '/api/check/serah/gadai',
@@ -599,41 +585,6 @@
}); });
} }
function getPembayaranTerakhir(tarikhLelong)
{
if (!tarikhLelong || tarikhLelong === '') {
return { tarikh: '', blocked: false };
}
let lelongDate;
if (tarikhLelong.includes('-')) {
const parts = tarikhLelong.split('-');
if (parts[0].length === 4) {
lelongDate = new Date(tarikhLelong);
} else {
lelongDate = new Date(parts[2], parts[1] - 1, parts[0]);
}
}
let pembayaranTerakhir = new Date(lelongDate);
pembayaranTerakhir.setDate(pembayaranTerakhir.getDate() - 3);
let today = new Date();
today.setHours(0, 0, 0, 0);
pembayaranTerakhir.setHours(0, 0, 0, 0);
let isBlocked = today > pembayaranTerakhir;
let day = String(pembayaranTerakhir.getDate()).padStart(2, '0');
let month = String(pembayaranTerakhir.getMonth() + 1).padStart(2, '0');
let year = pembayaranTerakhir.getFullYear();
return {
tarikh: `${year}-${month}-${day}`,
blocked: isBlocked
};
}
function gadaiTable(data,jenistebus){ function gadaiTable(data,jenistebus){
var counter = 1; var counter = 1;
@@ -665,7 +616,15 @@
var taglel = ''; var taglel = '';
if(gadai_detail['taglel'] == 1){ if(gadai_detail['taglel'] == 1){
if(tagarrahnbid == 1){ if(tagarrahnbid == 1){
taglel = gadai_detail['t_lelong']; $.ajax({
method:"GET",
async:false,
url:api_arrahnbid + 'portalApi?norujukan=' + gadai_detail['norujukan'],
success: function(data){
taglel = data.lelong.t_lelong;
}
});
} else { } else {
$.ajax({ $.ajax({
method:"GET", method:"GET",
@@ -688,18 +647,7 @@
if(gadai_detail["percentpinj"] != 0) if(gadai_detail["percentpinj"] != 0)
xtawarruq.row.add([ xtawarruq.row.add([
'<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>', '<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>',
// '<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>', '<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
let blockedAttr = bayaranInfo.blocked ? 'data-blocked="true"' : '';
return '<a href="#" onclick="checkserah(this)" ' +
'data-pinjaman='+ gadai_detail['pinjaman'] +' ' +
'data-hargajualan='+ gadai_detail['hargajualan'] +' ' +
'data-norujukan='+ gadai_detail['norujukan'] +' ' +
'data-url=' + urlroute + ' ' +
blockedAttr + '>' +
gadai_detail['norujukan'] + '</a>';
})(),
gadai_detail['t_gadai'], gadai_detail['t_gadai'],
tarikh_matang, tarikh_matang,
'RM '+ formatter.format(gadai_detail['bakihargajualan']), 'RM '+ formatter.format(gadai_detail['bakihargajualan']),
@@ -708,23 +656,20 @@
gadai_detail['tempoh'], gadai_detail['tempoh'],
'RM '+ upahsemasa, 'RM '+ upahsemasa,
'<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>', '<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
if (!bayaranInfo.tarikh) {
return '';
}
let color = bayaranInfo.blocked ? 'red' : 'green';
return '<div style="white-space: nowrap; color: ' + color + '; font-weight: bold;">' +
bayaranInfo.tarikh + '</div>';
})()
]).draw(); ]).draw();
}else{ }else{
var taglel = ''; var taglel = '';
if(gadai_detail['taglel'] == 1){ if(gadai_detail['taglel'] == 1){
if(tagarrahnbid == 1){ if(tagarrahnbid == 1){
if(gadai_detail['t_lelong'] != null) { $.ajax({
taglel = gadai_detail['t_lelong']; method:"GET",
async:false,
url:api_arrahnbid + 'portalApi?norujukan=' + gadai_detail['norujukan'],
success: function(data){
taglel = data.lelong.t_lelong;
} }
});
} else { } else {
$.ajax({ $.ajax({
method:"GET", method:"GET",
@@ -745,18 +690,7 @@
// let radio_action = "onclick=checkCanChangeGadaianDetail(" + "'" + table_norujukan + "'" + ")"; // let radio_action = "onclick=checkCanChangeGadaianDetail(" + "'" + table_norujukan + "'" + ")";
tablegadai.row.add([ tablegadai.row.add([
'<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>', '<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>',
// '<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>', '<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
let blockedAttr = bayaranInfo.blocked ? 'data-blocked="true"' : '';
return '<a href="#" onclick="checkserah(this)" ' +
'data-pinjaman='+ gadai_detail['pinjaman'] +' ' +
'data-hargajualan='+ gadai_detail['hargajualan'] +' ' +
'data-norujukan='+ gadai_detail['norujukan'] +' ' +
'data-url=' + urlroute + ' ' +
blockedAttr + '>' +
gadai_detail['norujukan'] + '</a>';
})(),
gadai_detail['t_gadai'], gadai_detail['t_gadai'],
tarikh_matang, tarikh_matang,
'RM '+ formatter.format(gadai_detail['bakihargajualan']), 'RM '+ formatter.format(gadai_detail['bakihargajualan']),
@@ -765,15 +699,6 @@
gadai_detail['tempoh'], gadai_detail['tempoh'],
'RM '+ upahsemasa['pendapatan'], 'RM '+ upahsemasa['pendapatan'],
'<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>', '<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
if (!bayaranInfo.tarikh) {
return '';
}
let color = bayaranInfo.blocked ? 'red' : 'green';
return '<div style="white-space: nowrap; color: ' + color + '; font-weight: bold;">' +
bayaranInfo.tarikh + '</div>';
})()
]).draw(); ]).draw();
} }
}else if(jenistebus == "sudah_tebus"){ }else if(jenistebus == "sudah_tebus"){
+1 -1
View File
@@ -39,12 +39,12 @@
<link rel="stylesheet" href="{{ asset('vendor/datepicker/css/bootstrap-datepicker.min.css') }}"/> <link rel="stylesheet" href="{{ asset('vendor/datepicker/css/bootstrap-datepicker.min.css') }}"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="{{ asset('js/jquery.min.js') }}"></script> <script src="{{ asset('js/jquery.min.js') }}"></script>
<script src="{{ asset('js/popper.min.js') }}"></script>
<script src="{{ asset('vendor/bootstrap/js/bootstrap.min.js') }}"></script> <script src="{{ asset('vendor/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('js/select2.min.js') }}"></script> <script src="{{ asset('js/select2.min.js') }}"></script>
<script src="{{ asset('js/apexcharts.js') }}"></script> <script src="{{ asset('js/apexcharts.js') }}"></script>
<script src="{{ asset('js/numeral.min.js') }}"></script> <script src="{{ asset('js/numeral.min.js') }}"></script>
<script src="{{ asset('js/sweetalert.min.js') }}"></script> <script src="{{ asset('js/sweetalert.min.js') }}"></script>
<script src="{{ asset('js/popper.min.js') }}"></script>
<script src="{{ asset('vendor/DataTables/datatables.min.js') }}"></script> <script src="{{ asset('vendor/DataTables/datatables.min.js') }}"></script>
<script src="{{ asset('vendor/datepicker/js/bootstrap-datepicker.min.js') }}"></script> <script src="{{ asset('vendor/datepicker/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('js/typehead.jquery.js') }}"></script> <script src="{{ asset('js/typehead.jquery.js') }}"></script>
-26
View File
@@ -601,23 +601,6 @@ function ubahwakil(e)
'hargajual' : hargajual 'hargajual' : hargajual
}, },
success:function(data){ success:function(data){
if(data == 'kemaskini'){
Swal.fire(
'Amaran!',
'Sila kemaskini aliran tunai dahulu!',
'error'
)
return false;
}
else if(data == 'Baki tidak mencukupi'){
Swal.fire(
'Amaran!',
'Baki tunai tidak mencukupi. Sila tambah baki tunai dahulu!',
'error'
)
return false;
}else if(data == 'Berjaya'){
let urlroute = '{{ route("resit.tuntutbaki", ":id") }}'; let urlroute = '{{ route("resit.tuntutbaki", ":id") }}';
urlroute = urlroute.replace(':id', norujukan); urlroute = urlroute.replace(':id', norujukan);
Swal.fire( Swal.fire(
@@ -628,15 +611,6 @@ function ubahwakil(e)
window.open(urlroute, '_blank'); window.open(urlroute, '_blank');
window.location.replace("{{ route('customer_info') }}"); window.location.replace("{{ route('customer_info') }}");
}) })
}else{
Swal.fire(
'Amaran!',
'Terdapat ralat semasa proses. Sila cuba lagi!',
'error'
)
return false;
}
},error: function(xhr, status, error) { },error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")"); var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText); alert(xhr.responseText);
@@ -1,199 +0,0 @@
<div class="modal fade" id="denominasipampasan" tabindex="-1" role="dialog"
aria-labelledby="denominasipampasanModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-xl" role="document">
<div class="modal-content">
<div class="modal-header">
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" data-toggle="pill" href="#home" role="tab"
aria-controls="pills-flamingo" aria-selected="true">Keping</a>
</li>
</ul>
<label class="mt-2 ml-3">Amaun Kiraan:</label>
<input type="text" class="form-control col-3 ml-3" id="amaunkiraan" placeholder="0.00" readonly>
<label class="mt-2 ml-3">Jumlah Panjar:</label>
<input type="text" class="form-control col-3 ml-2 bg-light font-weight-bold" id="jumlahPanjar"
value="{{ number_format($jumlahPanjar, 2) }}" readonly>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="formPampasan" method="POST" onsubmit="return terimadeno(event)" action="{{ route('pampasan.terima') }}">
@csrf
<input type="hidden" id="norujukan" name="norujukan" value="{{ $gadai_info['norujukan'] }}">
<input type="hidden" id="baucerno" name="baucerno" value="{{ $baucerno }}">
<input type="hidden" name="jumlahpampasan" value="{{ $jumlah_pampasan }}">
<input type="hidden" name="jumlahPanjar" value="{{ $jumlahPanjar }}">
<input type="hidden" name="teller" value="{{ auth()->user()->name }}">
<div class="tab-content">
<div class="tab-pane fade show active" id="home" role="tabpanel"
aria-labelledby="flamingo-tab">
<table class="table text-center">
<tr>
<th></th>
<th name="denominasi" class="denominasi">Peti Besi</th>
<th>Ambilan</th>
<th>Jumlah (RM)</th>
<th></th>
<th name="denominasi" class="denominasi">Peti Besi</th>
<th>Ambilan</th>
<th>Jumlah (RM)</th>
</tr>
<tr>
<td>RM0.01</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen1'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen1]" class="form-control kosong" id="sen1"
data-amaun="{{ $denominasi['txtsen1'] }}" onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen1]" id="totalsen1" class="form-control kosong"
value="0.00" readonly /> </td>
<td>RM1</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring1'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring1]" class="form-control kosong" id="ringgit1"
data-amaun="{{ $denominasi['txtring1'] }}" onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring1]" id="totalring1" class="form-control kosong"
value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.05</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen5'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen5]" class="form-control kosong" id="sen5"
data-amaun="{{ $denominasi['txtsen5'] }}" onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen5]" id="totalsen5" class="form-control kosong"
value="0.00" readonly /> </td>
<td>RM5</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring5'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring5]" class="form-control kosong" id="ringgit5"
data-amaun="{{ $denominasi['txtring5'] }}" onkeyup="kiraanpanjar(this)" />
</td>
<td><input type="text" name="denominasi[totalring5]" id="totalring5"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.10</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen10'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen10]" class="form-control kosong"
id="sen10" data-amaun="{{ $denominasi['txtsen10'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen10]" id="totalsen10"
class="form-control kosong" value="0.00" readonly /> </td>
<td>RM10</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring10'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring10]" class="form-control kosong"
id="ringgit10" data-amaun="{{ $denominasi['txtring10'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring10]" id="totalring10"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.20</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen20'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen20]" class="form-control kosong"
id="sen20" data-amaun="{{ $denominasi['txtsen20'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen20]" id="totalsen20"
class="form-control kosong" value="0.00" readonly /> </td>
<td> RM20</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring20'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring20]" class="form-control kosong"
id="ringgit20" data-amaun="{{ $denominasi['txtring20'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring20]" id="totalring20"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.50</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen50'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen50]" class="form-control kosong"
id="sen50" data-amaun="{{ $denominasi['txtsen50'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen50]" id="totalsen50"
class="form-control kosong" value="0.00" readonly /> </td>
<td>RM50</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring50'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring50]" class="form-control kosong"
id="ringgit50" data-amaun="{{ $denominasi['txtring50'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring50]" id="totalring50"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>RM100</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring100'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring100]" class="form-control kosong"
id="ringgit100" data-amaun="{{ $denominasi['txtring100'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring100]" id="totalring100"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
</table>
</div>
</div>
<input type="hidden" id="jenisjenis" />
<input type="hidden" id="kodcawangan" />
<input type="hidden" id="tellerla" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger btn-lg" data-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-success btn-lg">Terima</button>
</div>
</form>
</div>
</div>
</div>
<script>
function terimadeno(e) {
e.preventDefault();
let amaunKiraan = parseFloat($('#amaunkiraan').val()) || 0;
let jumlahPampasan = parseFloat($('input[name="jumlahpampasan"]').val()) || 0;
let jumlahPanjar = parseFloat($('input[name="jumlahPanjar"]').val()) || 0;
// Validation
if (amaunKiraan !== jumlahPanjar) {
Swal.fire({
icon: 'error',
title: 'Jumlah Tidak Sama',
text: 'Amaun kiraan mesti sama dengan Jumlah Panjar.'
});
return false;
}
Swal.fire({
icon: 'success',
title: 'Berjaya',
text: 'Pampasan berjaya!',
showConfirmButton: true
}).then(() => {
$('#formPampasan')[0].submit();
});
return false;
}
</script>
+1 -1
View File
@@ -63,7 +63,7 @@
@endforeach @endforeach
</select> </select>
</div> </div>
<div class="col-md-4">Berat Bersih</div> <div class="col-md-4">Berat</div>
<div class="col-md-8"><input type="text" class="form-control" name="berat_edit" id="berat_edit" onkeyup="calculationharga(this)"/></div> <div class="col-md-8"><input type="text" class="form-control" name="berat_edit" id="berat_edit" onkeyup="calculationharga(this)"/></div>
<div class="col-md-4">Harga</div> <div class="col-md-4">Harga</div>
<div class="col-md-8"><input type="text" name="harga_edit" id="harga_edit" class="form-control" readonly/></div> <div class="col-md-8"><input type="text" name="harga_edit" id="harga_edit" class="form-control" readonly/></div>
-20
View File
@@ -571,25 +571,5 @@
</div> </div>
</div> </div>
<!-- Modal Surat Agreement -->
<div class="modal fade" id="suratModal" tabindex="-1" role="dialog" aria-labelledby="suratModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="suratModalLabel">Surat Agreement</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="surat-content" style="font-family: 'Times New Roman', Times, serif;">
<!-- Surat content will be injected here -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<button type="button" class="btn btn-primary" id="btnPrintSurat">Cetak & Teruskan</button>
</div>
</div>
</div>
</div>
@@ -1,148 +0,0 @@
@extends('layouts.app_operasi')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<nav aria-label="breadcrumb">
<ol class="breadcrumb pb-3">
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
<li class="breadcrumb-item"><a href="{{ url('operasi/parameter') }}">Parameter</a></li>
<li class="breadcrumb-item"><a href="{{ url('operasi/marginmutu') }}">Margin Mutu Emas</a></li>
<li class="breadcrumb-item active" aria-current="page">Edit Margin Mutu</li>
</ol>
</nav>
<div class="card-body">
<h4 class="text-center mb-4">Edit Margin Mutu Emas</h4>
<form id="editMarginForm">
@csrf
<input type="hidden" id="recno" name="recno">
<div class="form-group">
<label for="karat">Karat</label>
<input type="text" class="form-control" id="karat" name="karat" readonly>
</div>
<div class="form-group">
<label for="keterangan">Keterangan</label>
<input type="text" class="form-control" id="keterangan" name="keterangan" readonly>
</div>
<div class="form-group">
<label for="teller">Teller (%)</label>
<input type="number" step="0.01" class="form-control" id="teller" name="teller" required>
</div>
<div class="form-group">
<label for="pc">PC (%)</label>
<input type="number" step="0.01" class="form-control" id="pc" name="pc" required>
</div>
<div class="form-group">
<label for="operasi">Operasi (%)</label>
<input readonly type="number" step="0.01" class="form-control" id="operasi" name="operasi" required>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">Update</button>
<a href="{{ route('operasi.marginmutu') }}" class="btn btn-secondary">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
// Get data from URL parameters
const urlParams = new URLSearchParams(window.location.search);
$('#recno').val(urlParams.get('recno'));
$('#karat').val(urlParams.get('karat'));
$('#keterangan').val(urlParams.get('keterangan'));
$('#teller').val(urlParams.get('teller'));
$('#pc').val(urlParams.get('pc'));
$('#operasi').val(urlParams.get('operasi'));
var username = '{{ Auth::user()->name }}';
$('#editMarginForm').on('submit', function(e) {
e.preventDefault();
const formData = {
recno: $('#recno').val(),
karat: $('#karat').val(),
keterangan: $('#keterangan').val(),
teller: $('#teller').val(),
pc: $('#pc').val(),
operasi: $('#operasi').val(),
_token: $('input[name="_token"]').val(),
username : username
};
$.ajax({
url: '{{ config("api.url") }}/api/maxmutuemas/update',
type: 'POST',
data: formData,
success: function(response) {
if(response.status === 'success') {
Swal.fire({
title: 'Berjaya!',
text: 'Data berhasil diupdate!',
icon: 'success',
confirmButtonText: 'OK'
}).then((result) => {
window.location.href = '{{ route("operasi.marginmutu") }}';
});
} else {
Swal.fire({
title: 'Ralat!',
text: response.message,
icon: 'error',
confirmButtonText: 'OK'
});
}
},
error: function(xhr) {
let errorMessage = 'Error updating data';
try {
let response = JSON.parse(xhr.responseText);
// If validation errors exist, show them
if (response.errors) {
let errorMessages = [];
Object.keys(response.errors).forEach(function(key) {
response.errors[key].forEach(function(error) {
errorMessages.push(error);
});
});
errorMessage = errorMessages.join('\n');
} else if (response.message) {
errorMessage = response.message;
}
} catch (e) {
// If JSON parsing fails, use the raw responseText
errorMessage = xhr.responseText || 'Unknown error occurred';
}
Swal.fire({
title: 'Ralat!',
text: errorMessage,
icon: 'error',
confirmButtonText: 'OK'
});
}
});
});
$('input[type="number"]').on('keydown', function(e) {
if (['e', 'E', '+', '-'].includes(e.key)) e.preventDefault();
});
});
</script>
@endsection
+38 -163
View File
@@ -2,76 +2,6 @@
@section('content') @section('content')
<div class="modal fade" id="kelulusan_pampasan_modal">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="text-center">Maklumat Lanjut</h4>
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<!-- Modal body -->
<div class="modal-body">
<div class="row col-12 text-center">
<div class="row col-7">
<label>Nombor Rujukan : </label>
<span id="norujukan_pampasan"> </span>
</div>
</div>
<div class="row col-12 text-center">
<div class="row col-7">
<label>Nama : </label>
<span id="namalanjut_pampasan"> </span>
</div>
<div class="row col-5">
<label>Kad Pengenalan : </label>
<span id="nokplanjut_pampasan"> </span>
</div>
</div>
<div class="row mt-3">
<div class="col-12">
<div class="table-responsive">
<table class="table table-hover">
<tbody>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Nilai Marhun</th>
<td id="nilaiMarhun">text</td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Baki Pembiayaan</th>
<td id="pembiayaan"></td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Jumlah Pampasan</th>
<td id="jumlahPampasan"></td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Keuntungan</th>
<td id="keuntungan"></td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Ansuran Pembiayaan</th>
<td id="bayaranAnsuran"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="kelulusanmodal"> <div class="modal fade" id="kelulusanmodal">
<div class="modal-dialog modal-lg modal-dialog-centered"> <div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content"> <div class="modal-content">
@@ -193,12 +123,7 @@
<tbody> <tbody>
@foreach($arraykelulusan as $index=>$k) @foreach($arraykelulusan as $index=>$k)
<tr> <tr>
@php <td><a href="#" data-toggle="modal" data-target="#kelulusanmodal" data-kodcawangan="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}">{{ $k['norujukan'] }} </a></td>
$targetModal = '#kelulusanmodal';
$targetModal = strtolower($k['status']) == 'kelulusan pengeluaran pampasan' ? '#kelulusan_pampasan_modal' : $targetModal;
@endphp
<td><a href="#" data-toggle="modal" data-target="{{$targetModal}}" data-kodcawangan="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}">{{ $k['norujukan'] }} </a></td>
<td>{{ $k['cawangan'] }}</td> <td>{{ $k['cawangan'] }}</td>
<td>{{ $k['namateller'] }}</td> <td>{{ $k['namateller'] }}</td>
<th>{{ $k['komen'] }}</th> <th>{{ $k['komen'] }}</th>
@@ -212,9 +137,8 @@
<td>{{ $k['nilaimarhun'] }}</td> <td>{{ $k['nilaimarhun'] }}</td>
<td>{{ $k['berat'] }}</td> <td>{{ $k['berat'] }}</td>
<td>{{ $k['margin'] }}</td> <td>{{ $k['margin'] }}</td>
<td><button class="btn btn-primary mr-2" onclick="updatelulus(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}" data-status="{{ $k['status'] ?? '' }}"><i class="fas fa-thumbs-up"></i></button> <td><button class="btn btn-primary mr-2" onclick="updatelulus(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}"><i class="fas fa-thumbs-up"></i></button>
<button class="btn btn-danger" onclick="updatebatal(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}"><i class="fas fa-thumbs-down"></i></button> <button class="btn btn-danger" onclick="updatebatal(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}" ><i class="fas fa-thumbs-down"></i></button></td>
</td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>
@@ -232,6 +156,7 @@
</div> </div>
</div> </div>
<script> <script>
var tablekelulusan = $('#table-kelulusan').DataTable({ var tablekelulusan = $('#table-kelulusan').DataTable({
"scrollX": true "scrollX": true
}); });
@@ -288,8 +213,7 @@
$('#pinjterkumpul').text('RM' + formatter.format(outstandingsemasa)); $('#pinjterkumpul').text('RM' + formatter.format(outstandingsemasa));
}, },error: function(xhr, status, error) {
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")"); var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText); alert(xhr.responseText);
} }
@@ -305,7 +229,8 @@
dataType: 'json', dataType: 'json',
success:function(data){ success:function(data){
let bilanganaktif = 0; let bilanganaktif = 0;
if (data == null) { if(data == null)
{
bilanganaktif = 0; bilanganaktif = 0;
}else{ }else{
bilanganaktif = data[0].length; bilanganaktif = data[0].length;
@@ -326,7 +251,8 @@
let bilanganlelong = 0; let bilanganlelong = 0;
if (data == null) { if(data == null)
{
bilanganlelong = 0; bilanganlelong = 0;
}else{ }else{
bilanganlelong = data.length; bilanganlelong = data.length;
@@ -344,11 +270,10 @@
}); });
async function updatelulus(e) { async function updatelulus(e)
{
const { const { value: katalaluan } = await Swal.fire({
value: katalaluan
} = await Swal.fire({
title: 'Masukkan Katalaluan Semula', title: 'Masukkan Katalaluan Semula',
input: 'password', input: 'password',
inputPlaceholder: 'Katalaluan', inputPlaceholder: 'Katalaluan',
@@ -364,17 +289,18 @@
method:'get', method:'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}", url: "{{ route('operasi.getmintasemulakelulusan') }}",
async:false, async:false,
data: { data:{ passsemula : katalaluan },
passsemula: katalaluan success:function(data)
}, {
success: function(data) { if(data == "False")
if (data == "False") { {
dataminta = data; dataminta = data;
} }
} }
}); });
if (dataminta == 'False') { if(dataminta == 'False')
{
Swal.fire({ Swal.fire({
icon: 'error', icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya' title: 'Pengesahan Katalaluan Tidak Berjaya'
@@ -412,9 +338,7 @@
// }); // });
// } // }
const { const { value: komenkelulusan } = await Swal.fire({
value: komenkelulusan
} = await Swal.fire({
title: 'Masukkan Komen!', title: 'Masukkan Komen!',
input: 'text', input: 'text',
inputPlaceholder: 'Komen', inputPlaceholder: 'Komen',
@@ -429,11 +353,13 @@
let namaoperasi = "{{ Auth::user()->name }}"; let namaoperasi = "{{ Auth::user()->name }}";
let teller = $(e).closest('tr').children('td:eq(2)').text(); let teller = $(e).closest('tr').children('td:eq(2)').text();
let taglulus = $(e).data('taglulus'); let taglulus = $(e).data('taglulus');
let status = $(e).data('status');
teller = String(teller); teller = String(teller);
let requestData = { $.ajax({
method:'put',
url: "{{ route('operasi.updatekelulusan') }}",
data: {
"_token": "{{ csrf_token() }}", "_token": "{{ csrf_token() }}",
"taglulus" : taglulus, "taglulus" : taglulus,
"norujukan" : norujukan, "norujukan" : norujukan,
@@ -442,16 +368,7 @@
"siri" : siri, "siri" : siri,
'namaoperasi' : namaoperasi, 'namaoperasi' : namaoperasi,
'teller' : teller 'teller' : teller
}; },
if (status === 'Kelulusan Pengeluaran Pampasan') {
requestData.actions = 'Pengesahan Pembayaran Pampasan';
}
$.ajax({
method: 'put',
url: "{{ route('operasi.updatekelulusan') }}",
data: requestData,
success:function(data){ success:function(data){
console.log(data); console.log(data);
Swal.fire({ Swal.fire({
@@ -461,8 +378,7 @@
location.reload(); location.reload();
}); });
}, },error: function(xhr, status, error) {
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")"); var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText); alert(xhr.responseText);
} }
@@ -470,10 +386,9 @@
} }
async function updatebatal(e) { async function updatebatal(e)
const { {
value: katalaluan const { value: katalaluan } = await Swal.fire({
} = await Swal.fire({
title: 'Masukkan Katalaluan Semula', title: 'Masukkan Katalaluan Semula',
input: 'password', input: 'password',
inputPlaceholder: 'Katalaluan', inputPlaceholder: 'Katalaluan',
@@ -489,17 +404,18 @@
method:'get', method:'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}", url: "{{ route('operasi.getmintasemulakelulusan') }}",
async:false, async:false,
data: { data:{ passsemula : katalaluan },
passsemula: katalaluan success:function(data)
}, {
success: function(data) { if(data == "False")
if (data == "False") { {
dataminta = data; dataminta = data;
} }
} }
}); });
if (dataminta == 'False') { if(dataminta == 'False')
{
Swal.fire({ Swal.fire({
icon: 'error', icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya' title: 'Pengesahan Katalaluan Tidak Berjaya'
@@ -508,9 +424,7 @@
return false; return false;
} }
const { const { value: komenkelulusan } = await Swal.fire({
value: komenkelulusan
} = await Swal.fire({
title: 'Masukkan Komen', title: 'Masukkan Komen',
input: 'text', input: 'text',
inputPlaceholder: 'Komen', inputPlaceholder: 'Komen',
@@ -549,51 +463,12 @@
}); });
}, },error: function(xhr, status, error) {
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")"); var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText); alert(xhr.responseText);
} }
}); });
} }
$('#kelulusan_pampasan_modal').on('show.bs.modal', async function(event) {
const triggerModalButton = event.relatedTarget;
const norujukan = triggerModalButton.dataset.norujukan;
const kodcaw = triggerModalButton.dataset.kodcawangan;
const pampasan = await fetch(api + `/api/pampasan?norujukan=${norujukan}&kodcaw=${kodcaw}`)
.then(response => response.json())
.then(x => x.data.pop());
const barangkes = await fetch(api + `/api/palsu/laporan?kodcaw=${kodcaw}`)
.then(response => response.json())
.then(x => x.filter(x => x.norujukan == norujukan))
.then(x => x.pop());
const tebus = await fetch(api + `/api/tebus/norujukan/${kodcaw}/${norujukan}`)
.then(response => response.json())
.then(x => x[0]);
const customer = await fetch(api + `/api/customers/${barangkes.nokp}`)
.then(response => response.json());
const formatMYR = (value) => {
return new Intl.NumberFormat('ms-MY', {
style: 'currency',
currency: 'MYR'
}).format(value);
};
document.getElementById('norujukan_pampasan').textContent = norujukan;
document.getElementById('namalanjut_pampasan').textContent = customer.nama;
document.getElementById('nokplanjut_pampasan').textContent = customer.kpbaru;
document.getElementById('nilaiMarhun').textContent = formatMYR(barangkes.nilaimarhun);
document.getElementById('pembiayaan').textContent = formatMYR(barangkes.pembiayaan);
document.getElementById('jumlahPampasan').innerHTML = '<strong>' + formatMYR(barangkes.nilaimarhun - barangkes.pembiayaan - barangkes.untung) + '</strong>';
document.getElementById('keuntungan').textContent = formatMYR(barangkes.untung);
document.getElementById('bayaranAnsuran').textContent = formatMYR(tebus.pinjaman - (tebus.bakipjm - tebus.bakiupah));
});
</script> </script>
@endsection @endsection
@@ -1,64 +0,0 @@
@extends('layouts.app_operasi')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<nav aria-label="breadcrumb">
<ol class="breadcrumb pb-3">
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
<li class="breadcrumb-item"><a href="{{ url('operasi/parameter') }}">Parameter</a></li>
<li class="breadcrumb-item active" aria-current="page">Margin Mutu Emas</li>
</ol>
</nav>
<div class="card-body text-center">
<div class="mt-3">
<table class='table table-striped table-hover' id='table-marginmutu' style="width:100%;">
<thead class="thead-dark">
<tr>
<th>Bil</th>
<th>Karat</th>
<th>Keterangan</th>
<th>Teller (%)</th>
<th>PC (%)</th>
<th>Operasi (%)</th>
<th>Tarikh Update</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
@foreach($maxmutuemas as $index=>$mme)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $mme['karat'] }}</td>
<td>{{ $mme['keterangan'] }}</td>
<td>{{ $mme['teller'] }}%</td>
<td>{{ $mme['pc'] }}%</td>
<td>{{ $mme['operasi'] }}%</td>
<td>{{ \Carbon\Carbon::parse($mme['tarikhupdate'])->format('d/m/Y') }}</td>
<td>
<a href="{{ route('operasi.marginmutu.edit') }}?recno={{ $mme['recno'] }}&karat={{ $mme['karat'] }}&keterangan={{ $mme['keterangan'] }}&teller={{ $mme['teller'] }}&pc={{ $mme['pc'] }}&operasi={{ $mme['operasi'] }}"
class="btn btn-sm btn-warning">Edit</a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var table_marginmutu = $('#table-marginmutu').DataTable({
"pageLength": 25,
"order": [[ 0, "asc" ]]
});
</script>
@endsection
+1 -1
View File
@@ -16,7 +16,7 @@
<div class="card-body text-center"> <div class="card-body text-center">
<a href="{{ route('operasi.hargaemas') }}" class="btn btn-info btn-lg">Harga Emas</a> <a href="{{ route('operasi.hargaemas') }}" class="btn btn-info btn-lg">Harga Emas</a>
<a href="{{ route('operasi.margin') }}" class="btn btn-info btn-lg">Margin Pembiayaan</a> <a href="{{ route('operasi.margin') }}" class="btn btn-info btn-lg">Margin Pembiayaan</a>
<a href="{{ route('operasi.marginmutu') }}" class="btn btn-info btn-lg">Margin Mutu Emas</a> <a href="#" class="btn btn-info btn-lg">Contoh 2</a>
</div> </div>
</div> </div>
</div> </div>
+101 -173
View File
@@ -131,20 +131,6 @@
</div> </div>
</div> </div>
@if($pampasan)
<div class="bg-white p-3 my-3">
<div class="border text-center p-2 mx-auto" style="border: 2px solid red !important; width: 209px;">
<span class="text-danger font-weight-bold">PAMPASAN</span>
</div>
<div class="text-center mt-2">
<a href="{{ route('pampasan.surat', $gadai['norujukan']) }}" target="_blank"
class="btn surat-perjanjian-btn" data-norujukan="{{ $gadai['norujukan'] }}" title="Lihat Surat" style="background-color: red; color: white; border: 2px solid red;">
<i class="fas fa-file-alt fa-lg"></i> Cetak Surat Perjanjian
</a>
</div>
</div>
@endif
<div class="card" id="infomarhun"> <div class="card" id="infomarhun">
<div class="card-body"> <div class="card-body">
<table id="tablemarhun" class="table table-striped table-hover table-bordered text-center"> <table id="tablemarhun" class="table table-striped table-hover table-bordered text-center">
@@ -222,6 +208,15 @@
</div> </div>
</div> </div>
{{-- <div class="form-group row">
<div class="col-4">
JUMLAH PERLU DIBAYAR SELEPAS DISKAUN (RM)
</div>
<div class="col-8">
<input type="text" id="jumlahselepasdiskaun" class="form-control" readonly/>
</div>
</div> --}}
<div> <div>
<fieldset class="scheduler-border"> <fieldset class="scheduler-border">
<div class="form-group row" id="divduitPelanggan"> <div class="form-group row" id="divduitPelanggan">
@@ -327,6 +322,16 @@
</div> </div>
</div> </div>
<div class="form-group row" id="divtelahdibayar">
<div class="col-4">
REBET DISKAUN (RM)
</div>
<div class="col-8">
<input type="text" id="jumlahDiskaun" value="{{ number_format($gadai['diskaun'],2) }}" class="form-control" readonly/>
</div>
</div>
</div> </div>
</div> </div>
<div id="jenisS" class="col-12 form-group row"> <div id="jenisS" class="col-12 form-group row">
@@ -342,6 +347,14 @@
</div> </div>
</div> </div>
<div class="form-group row">
<div class="col-4">
JUMLAH PERLU DIBAYAR SELEPAS DISKAUN (RM)
</div>
<div class="col-8">
<input type="text" id="perludibayarAkhir" class="form-control" readonly/>
</div>
</div>
<div> <div>
<fieldset class="scheduler-border"> <fieldset class="scheduler-border">
@@ -442,6 +455,15 @@
</div> </div>
</div> </div>
<div class="form-group row" id="divtelahdibayar">
<div class="col-4">
REBET DISKAUN (RM)
</div>
<div class="col-8">
<input type="text" id="jumlahDiskaun" value="{{ number_format($gadai['diskaun'],2) }}" class="form-control" readonly/>
</div>
</div>
<div id="divbakipinjaman"> <div id="divbakipinjaman">
<div class="form-group row"> <div class="form-group row">
<div class="col-4"> <div class="col-4">
@@ -577,6 +599,16 @@
</div> </div>
</div> </div>
<div class="form-group row" id="divtelahdibayar">
<div class="col-4">
REBET DISKAUN (RM)
</div>
<div class="col-8">
<input type="text" id="jumlahDiskaun" value="{{ number_format($gadai['diskaun'],2) }}" class="form-control" readonly/>
</div>
</div>
</div> </div>
</div> </div>
@@ -1096,28 +1128,6 @@
</div> </div>
</div> </div>
<!-- Modal Surat Agreement -->
<div class="modal fade" id="suratModal" tabindex="-1" role="dialog" aria-labelledby="suratModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="suratModalLabel">Surat Agreement</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="surat-content" style="font-family: 'Times New Roman', Times, serif;">
<!-- Surat content will be injected here -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<button type="button" class="btn btn-primary" id="btnPrintSurat">Cetak & Teruskan</button>
</div>
</div>
</div>
</div>
<script> <script>
let elem_jenisAT = $('#jenisAT').remove(); let elem_jenisAT = $('#jenisAT').remove();
@@ -1188,7 +1198,6 @@
var percent_mora = 0; var percent_mora = 0;
var pinjaman_teller = 0; var pinjaman_teller = 0;
var pinjaman_pelulus = 0; var pinjaman_pelulus = 0;
var pampasan = @json($pampasan);
@@ -1402,10 +1411,6 @@
} }
}); });
if(pampasan != null){
$('#jumlahupah').val(pampasan.untung);
}
$.ajax({ $.ajax({
method:'GET', method:'GET',
url: api + '/api/upahrebettawarruq/' + kodcaw + '/' + norujukan, url: api + '/api/upahrebettawarruq/' + kodcaw + '/' + norujukan,
@@ -1436,19 +1441,17 @@
dataType: 'json', dataType: 'json',
async:false, async:false,
success:function(harga_tebus){ success:function(harga_tebus){
if(pampasan != null){ // // Ambil nilai diskaun
let pembiayaan = safeMoneyParse(pampasan.pembiayaan); // let diskaun = parseFloat($('#jumlahDiskaun').val().replace(/,/g, '')) || 0;
let untung = safeMoneyParse(pampasan.untung);
$('#perludibayar').val(formatter.format(pembiayaan + untung)); // // Tolak diskaun terus dari harga tebus
// let harga_tebus_akhir = parseFloat(harga_tebus) - diskaun;
$('#duitPelanggan').val(formatter.format(pembiayaan + untung)); // // Set balik ke input 'PERLU DIBAYAR'
$('#duitPelanggan').prop('readonly', true);
}else {
$('#perludibayar').val(formatter.format(harga_tebus)); $('#perludibayar').val(formatter.format(harga_tebus));
} }
}
}); });
// Telah dibayar // Telah dibayar
@@ -1669,6 +1672,13 @@
} }
} }
function kiraPerluDibayarSelepasDiskaun() {
var perluDibayar = parseFloat(document.getElementById("perludibayar").value.replace(/,/g, '')) || 0;
var diskaun = parseFloat(document.getElementById("jumlahDiskaun").value.replace(/,/g, '')) || 0;
var akhir = perluDibayar - diskaun;
document.getElementById("perludibayarAkhir").value = akhir.toFixed(2);
}
function bayartawarruq(e){ function bayartawarruq(e){
var keuntungan = parseFloat($('#jumlahupah').val().replace(/[^0-9.-]+/g,"")); var keuntungan = parseFloat($('#jumlahupah').val().replace(/[^0-9.-]+/g,""));
var bayaran = parseFloat(e.value); var bayaran = parseFloat(e.value);
@@ -1805,129 +1815,8 @@
let teller = "{{ Auth::user()->name }}"; let teller = "{{ Auth::user()->name }}";
async function getPampasanByNorujukan(norujukan) { function bayaransemua()
const params = new URLSearchParams({
kodcaw: kodcaw,
status: 'all'
});
try {
const pampasanListResponse = await fetch(`{{ config('api.url') }}/api/palsu/laporan?${params}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
if (!pampasanListResponse.ok) {
throw new Error(`HTTP error! status: ${pampasanListResponse.status}`);
}
const pampasanListData = await pampasanListResponse.json();
const pampasanList = pampasanListData.filter(pampasan => pampasan.norujukan === norujukan);
const pampasan = pampasanList.length === 0 ? null : pampasanList.pop();
return pampasan;
} catch (error) {
console.error('Failed to fetch pampasan data:', error);
throw new Error("Something wrong with API");
}
}
// Helper function for safe money parsing
const safeMoneyParse = (value) => {
const parsed = parseFloat(value);
return isNaN(parsed) ? 0 : Math.round(parsed * 100) / 100; // Round to 2 decimal places
};
async function checkWangPetiBesiEnoughForTuntutanPampasan(pampasan) {
const currentDate = new Date().toISOString().split('T')[0];
let wangpetibesi = await fetch(api + '/api/TunaiDiTangan/' + kodcaw + '?tarikh=' + currentDate).then(response => response.json());
const nilaimarhun = safeMoneyParse(pampasan.nilaimarhun);
const pembiayaan = safeMoneyParse(pampasan.pembiayaan);
const untung = safeMoneyParse(pampasan.untung);
const jumlahpampasan = safeMoneyParse(nilaimarhun - pembiayaan - untung);
const balancewangpetibesiafterdeduct = wangpetibesi - jumlahpampasan < 0 ? false : true;
if(! balancewangpetibesiafterdeduct){
Swal.fire({
title: 'Peringatan',
html: `
<p>Wang peti besi tidak mencukupi untuk proses tuntutan pampasan</p>
<br>
<div style="text-align: left; margin: 0 auto; display: inline-block;">
<strong>Wang Peti Besi:</strong> RM ${formatter.format(wangpetibesi)}<br><br>
<strong>Jumlah Diperlukan:</strong> RM ${formatter.format(jumlahpampasan)}<br><br>
<strong>Kekurangan:</strong> <span style="color: red;">RM ${formatter.format(jumlahpampasan - wangpetibesi)}</span>
</div>
`,
icon: 'warning'
});
return false;
}
return true;
}
async function bayaransemua()
{ {
// Instantiate pampasan using the JavaScript function
const pampasan = await getPampasanByNorujukan(norujukan);
if(pampasan != null){
if(pampasan && !pampasan.hasOwnProperty('agreement_printed_at')){
Swal.fire({
title: 'Peringatan',
text: 'Sila print surat perjanjian',
icon: 'warning'
});
return; // Exit early if agreement not printed
}
const isEnough = await checkWangPetiBesiEnoughForTuntutanPampasan(pampasan);
if(! isEnough){
return;
}
}
if(pampasan != null){
const result = await Swal.fire({
title: 'Pengesahan Proses Tuntutan Pampasan',
html: `
<div style="text-align: left; margin: 20px 0; min-width: 500px;">
<p><strong>Sila pastikan wang untuk proses tuntutan pampasan adalah mencukupi.</strong></p>
<br>
<p style="color: #d33; font-weight: bold;">⚠️ Proses tidak dapat diundur</p>
<p style="color: #d33;">⚠️ Short wang teller atau peti besi akan ditanggung oleh anda</p>
<br>
<p>Adakah anda ingin meneruskan proses ini?</p>
</div>
`,
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Teruskan',
cancelButtonText: 'Batal',
allowOutsideClick: false,
allowEscapeKey: false,
width: '600px'
});
if (!result.isConfirmed) {
return; // Exit if user cancels
}
}
$("#terima_transaksi").prop('disabled', true); $("#terima_transaksi").prop('disabled', true);
// Swal.fire({ // Swal.fire({
// title: 'Memuatkan...', // title: 'Memuatkan...',
@@ -2008,6 +1897,25 @@
jeniskeuntungan = "asal"; jeniskeuntungan = "asal";
} }
//kira rebet diskaun
// let diskaun
// if (pinjaman < 20000) {
// diskaun = jumupah * 0.05;
// } else if (pinjaman >= 20000 && pinjaman <= 50000) {
// diskaun = jumupah * 0.10;
// } else if (pinjaman > 50000 && pinjaman <= 100000) {
// diskaun = jumupah * 0.15;
// } else {
// diskaun = jumupah * 0.20;
// }
//$('#jumdiskaun').val(formatter.format(diskaun.toFixed(2)));
var nopelanggan = "{{ $gadai['nopelanggan'] }}"; var nopelanggan = "{{ $gadai['nopelanggan'] }}";
var jenistebus = $('#sltjenistebus').find(":selected").val(); var jenistebus = $('#sltjenistebus').find(":selected").val();
var jbg = "{{ $gadai['tempoh'] }}"; var jbg = "{{ $gadai['tempoh'] }}";
@@ -2023,6 +1931,7 @@
var nowakil = nw; var nowakil = nw;
var duitpelanggan = $('#duitPelanggan').val().replace(/[^0-9.-]+/g,""); var duitpelanggan = $('#duitPelanggan').val().replace(/[^0-9.-]+/g,"");
var bakipelanggan = $('#bakiPelanggan').val().replace(/[^0-9.-]+/g,""); var bakipelanggan = $('#bakiPelanggan').val().replace(/[^0-9.-]+/g,"");
//var diskaun = $('#diskaun').val().replace(/[^0-9.-]+/g,"");
if(Number(duitpelanggan) < Number(bakipinjaman)){ if(Number(duitpelanggan) < Number(bakipinjaman)){
@@ -2051,6 +1960,7 @@
"addpinjaman" : addpinjaman, "addpinjaman" : addpinjaman,
"bakipinjaman" : bakipinjaman, "bakipinjaman" : bakipinjaman,
"bakiupah" : bakiupah, "bakiupah" : bakiupah,
//"diskaun": diskaun,
"historygadaian" : historygadaian, "historygadaian" : historygadaian,
"marhun" : marhun, "marhun" : marhun,
"nowakil" : nowakil, "nowakil" : nowakil,
@@ -2152,10 +2062,27 @@
let hadbayaransuran = (parseFloat("{{ $gadai['nilaimarhun']}}") * 0.1); let hadbayaransuran = (parseFloat("{{ $gadai['nilaimarhun']}}") * 0.1);
//kira rebet diskaun
// let diskaun
// if (pinjaman < 20000) {
// diskaun = jumupah * 0.05;
// } else if (pinjaman >= 20000 && pinjaman <= 50000) {
// diskaun = jumupah * 0.10;
// } else if (pinjaman > 50000 && pinjaman <= 100000) {
// diskaun = jumupah * 0.15;
// } else {
// diskaun = jumupah * 0.20;
// }
var bayar = Number(parseFloat($('#bayaran').val().replace(/[^0-9.-]+/g,"")).toFixed(2)); var bayar = Number(parseFloat($('#bayaran').val().replace(/[^0-9.-]+/g,"")).toFixed(2));
var bakipinjam = parseFloat("{{ $gadai['bakipjm'] }}") - hadbayaransuran + jumupah; var bakipinjam = parseFloat("{{ $gadai['bakipjm'] }}") - hadbayaransuran + jumupah;
var duitpelanggan = parseFloat($('#duitPelanggan').val().replace(/[^0-9.-]+/g,"")); var duitpelanggan = parseFloat($('#duitPelanggan').val().replace(/[^0-9.-]+/g,""));
var bakipelanggan = parseFloat($('#bakiPelanggan').val().replace(/[^0-9.-]+/g,"")); var bakipelanggan = parseFloat($('#bakiPelanggan').val().replace(/[^0-9.-]+/g,""));
//var diskaun = parseFloat($('#diskaun').val().replace(/[^0-9.-]+/g,""));
if(isNaN(duitpelanggan)) duitpelanggan = 0; if(isNaN(duitpelanggan)) duitpelanggan = 0;
@@ -3377,7 +3304,7 @@
/////////// ///////////
} }
//Bayaran Semua function end file
} }
function gadaiautotawarruq() function gadaiautotawarruq()
@@ -4639,6 +4566,7 @@ return true;
}; };
}(jQuery)); }(jQuery));
</script> </script>
@endsection @endsection
@@ -1,261 +0,0 @@
<style>
#header {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#header td, #customers th {
padding:4px;
font-size:10px;
}
#header tr:nth-child(even){background-color: #ffffff;}
#header tr:hover {background-color: #ddd;}
#header th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style>
<style>
#scan {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#scan td, #scan th {
padding: 8px;
font-size:11px;
}
#scan tr:nth-child(even){background-color: #ffffff;}
#scan tr:hover {background-color: #ddd;}
#scan th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style>
<style>
#scan {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#scan td, #scan th {
border-collapse: collapse;
padding: 8px;
font-size:11px;
}
#scan tr:nth-child(even){background-color: #ffffff;}
#scan tr:hover {background-color: #ddd;}
#scan th {
border-collapse: collapse;
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style>
<style>
#details {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#details td, #details th {
padding: 8px;
font-size:8px;
}
#details tr:nth-child(even){background-color: #ffffff;}
#details tr:hover {background-color: #ddd;}
#details th {
padding-top: 12px;
font-style:bold;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
</style>
<style>
#sign {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#sign td, #sign th {
padding: 8px;
font-size:11px;
text-align: center;
}
#sign tr:nth-child(even){background-color: #ffffff;}
#sign tr:hover {background-color: #ddd;}
#sign th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
padding:4px;
color:black;
}
@media print {
.new-page {
page-break-before: always;
}
}
</style>
<table id="header">
<tr>
{{-- <th rowspan="4" style="width:50px"><br><img src="{{ asset('img/ARRAHN1.png') }}" style="width:70px"></img></th> --}}
<th colspan="1">KOPERASI PERMODALAN KELANTAN BERHAD</th>
</tr>
<tr>
<td style="font-size:20px;font-weight:bold;">{{ $cawangan_detail['namacaw'] }}</td>
<th colspan="1">{{ $cawangan_detail['namacaw'] }}</th>
</tr>
<tr>
<td>{{ $cawangan_detail['alamat1'] }}</td>
<td></td>
</tr>
<tr>
<td>{{ $cawangan_detail['alamat2'].' No Tel : '. $cawangan_detail['notel'].' No Faks : '. $cawangan_detail['nofaks'] }}</td>
<td></td>
</tr>
</table>
<br>
<table id="scan">
<tr>
<th colspan ="5"><b>LAPORAN AUDIT TRAIL OPERASI (arOS V3)</b></th>
<th> </th>
<th> </th>
<th></th>
</tr>
<tr>
<th colspan="5"><b> TARIKH CETAK:</b>
@php
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
$formattedweddingdate = $myDateTime->format('d-m-Y');
echo($formattedweddingdate);
@endphp
</th>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td style="width:20px"> <b>TARIKH MULA:</b></td>
<td>@php
$myDateTime = DateTime::createFromFormat('Y-m-d', $date);
$formattedweddingdate = $myDateTime->format('d-m-Y');
echo($formattedweddingdate);
@endphp</td>
<td style="width:20px"> <b>HINGGA:</b></td>
<td>@php
$myDateTime = DateTime::createFromFormat('Y-m-d', $date_till);
$formattedweddingdate = $myDateTime->format('d-m-Y');
echo($formattedweddingdate);
@endphp</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<br>
<table id="details">
<tr>
<th>Bil</th>
<th>Tarikh</th>
<th>Masa</th>
<th>Pengguna</th>
<th>Tindakan</th>
<th>Perbezaan</th>
</tr>
@php $counter = 1; @endphp
@foreach($audittrail as $index=>$item)
<tr>
<td>{{ $counter }}</td>
<td>{{ $item['tarikh'] }}</td>
<td>{{ $item['masa'] }}</td>
<td>{{ $item['users'] }}</td>
<td>{{ $item['actions'] }}</td>
<td>{{ $item['differ'] }}</td>
</tr>
@php $counter++;@endphp
@endforeach
</table>
<br><br>
<br>
<br><br><br>
<table id="sign">
<tr>
<td></td>
<td colspan="2"> .................................................................. </td>
<td> </td>
<td colspan="2"> .................................................................. </td>
<td> </td>
<td colspan="2">.................................................................. </td>
<td> </td>
</tr>
<tr>
<td></td>
<td colspan="2"><B> Disediakan </B> </td>
<td></td>
<td colspan="2"><B> Disemak </B> </td>
<td> </td>
<td colspan="2"><B> Disahkan </B></td>
<td> </td>
</tr>
</table>
@@ -230,6 +230,7 @@
<th>Lain-Lain Caj (RM)</th> <th>Lain-Lain Caj (RM)</th>
<th>Keuntungan 1% (RM)</th> <th>Keuntungan 1% (RM)</th>
<th>Keuntungan</th> <th>Keuntungan</th>
<th>Diskaun Rebet</th>
<th>Peratus (%)</th> <th>Peratus (%)</th>
</tr> </tr>
@php @php
@@ -301,6 +302,7 @@
<td>{{ number_format($item['ujrah']*12,2) }}</td> <td>{{ number_format($item['ujrah']*12,2) }}</td>
<td>{{ number_format($item['onepercent']*12,2) }}</td> <td>{{ number_format($item['onepercent']*12,2) }}</td>
<td>{{ number_format($item['upah12'],2) }}</td> <td>{{ number_format($item['upah12'],2) }}</td>
<td>{{ number_format($item['diskaun'],2) }}</td>
<td>{{ $item['percentpinj'] }}</td> <td>{{ $item['percentpinj'] }}</td>
</tr> </tr>
@php $counter++; @endphp @php $counter++; @endphp
@@ -471,21 +471,23 @@
<tr style="font-weight:bold;"> <tr style="font-weight:bold;">
<td colspan="2">Baki</td> <td colspan="2">Baki</td>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalbil1 = $gad1 - $teb1 - $lel1 /*- $ans1*/ - $hpk1; echo number_format($totalbil1);@endphp @php $totalbil1 = $gad1 - $teb1 - $lel1 - $ans1 - $hpk1; echo number_format($totalbil1);@endphp
</td> </td>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalpinj1 = $gadpinj1 - $tebpinj1 - $lelpinj1 - $anspinj1 - $hpkpinj1; echo number_format($totalpinj1,2);@endphp @php $totalpinj1 = $gadpinj1 - $tebpinj1 - $lelpinj1 - $anspinj1 - $hpkpinj1; echo number_format($totalpinj1,2);@endphp
</td> </td>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalbil2 = $gad2 - $teb2 - $lel2 /*- $ans2*/ - $hpk2; echo number_format($totalbil2);@endphp @php $totalbil2 = $gad2 - $teb2 - $lel2 - $ans2 - $hpk2; echo number_format($totalbil2);@endphp
</td> </td>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalpinj2 = $gadpinj2 - $tebpinj2 - $lelpinj2 - $anspinj2 - $hpkpinj2; echo number_format($totalpinj2,2);@endphp @php $totalpinj2 = $gadpinj2 - $tebpinj2 - $lelpinj2 - $anspinj2 - $hpkpinj2; echo number_format($totalpinj2,2);@endphp
</td> </td>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalbil3 = $gad3 - $teb3 - $lel3 /*- $ans3*/ - $hpk3; echo number_format($totalbil3);@endphp @php $totalbil3 = $gad3 - $teb3 - $lel3 = - $ans3 - $hpk3; echo number_format($totalbil3);@endphp
</td> </td>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalpinj3 = $gadpinj3 - $tebpinj3 - $lelpinj3 - $anspinj3 - $hpkpinj3; echo number_format($totalpinj3,2);@endphp @php $totalpinj3 = $gadpinj3 - $tebpinj3 - $lelpinj3 - $anspinj3 - $hpkpinj3; echo number_format($totalpinj3,2);@endphp
@@ -241,6 +241,7 @@
<th>B.Pembiayaan(RM)</th> <th>B.Pembiayaan(RM)</th>
<th>Lain-Lain Caj (RM)</th> <th>Lain-Lain Caj (RM)</th>
<th>Untung 1% (RM)</th> <th>Untung 1% (RM)</th>
<th>Diskaun Rebet (RM)</th>
<th>Pendapatan(RM)</th> <th>Pendapatan(RM)</th>
<th>Bayaran(RM)</th> <th>Bayaran(RM)</th>
<th>Jumlah(RM)</th> <th>Jumlah(RM)</th>
@@ -254,6 +255,7 @@
$totalupah = 0; $totalupah = 0;
$totalujrah = 0; $totalujrah = 0;
$totalonepercent = 0; $totalonepercent = 0;
$totaldiskaunrebate = 0;
@endphp @endphp
@foreach ($tebus as $index => $item) @foreach ($tebus as $index => $item)
@@ -266,6 +268,7 @@
$totalnm += $item['nilaimarhun']; $totalnm += $item['nilaimarhun'];
$totalujrah += $item['ujrah']; $totalujrah += $item['ujrah'];
$totalonepercent += $item['onepercent']; $totalonepercent += $item['onepercent'];
$totaldiskaunrebate += $item['diskaun_rebate'];
@endphp @endphp
@@ -282,6 +285,7 @@
$totalbayaranteller = 0; $totalbayaranteller = 0;
$totalujrahteller = 0; $totalujrahteller = 0;
$totalonepercentteller = 0; $totalonepercentteller = 0;
$totaldiskaunrebateteller = 0;
@endphp @endphp
@endif @endif
@else @else
@@ -297,6 +301,7 @@
$totaljumlahteller = 0; $totaljumlahteller = 0;
$totalujrahteller = 0; $totalujrahteller = 0;
$totalonepercentteller = 0; $totalonepercentteller = 0;
$totaldiskaunrebateteller = 0;
@endphp @endphp
@endif @endif
@@ -337,6 +342,7 @@
<td>{{ number_format($item['ujrah'], 2) }}</td> <td>{{ number_format($item['ujrah'], 2) }}</td>
<td>{{ number_format($item['onepercent'], 2) }}</td> <td>{{ number_format($item['onepercent'], 2) }}</td>
{{-- <td>{{ number_format($item['bakiupah'], 2) }}</td> --}} {{-- <td>{{ number_format($item['bakiupah'], 2) }}</td> --}}
<td>{{ number_format($item['diskaun_rebate'], 2) }}</td>
<td> <td>
@php @php
if ($item['tagbaru']) { if ($item['tagbaru']) {
@@ -371,6 +377,7 @@
$totalbayaranteller += $item['bakipjm']; // $totalbayaranteller += $item['bakipjm']; //
$totalujrahteller += $item['ujrah']; $totalujrahteller += $item['ujrah'];
$totalonepercentteller += $item['onepercent']; $totalonepercentteller += $item['onepercent'];
$totaldiskaunrebateteller += $item['diskaun_rebate'];
@endphp @endphp
@php @php
@@ -388,6 +395,7 @@
<td><b>{{ number_format($totalpinjamanteller, 2) }} </b></td> <td><b>{{ number_format($totalpinjamanteller, 2) }} </b></td>
<td><b>{{ number_format($totalujrahteller, 2) }} </b></td> <td><b>{{ number_format($totalujrahteller, 2) }} </b></td>
<td><b>{{ number_format($totalonepercentteller, 2) }} </b></td> <td><b>{{ number_format($totalonepercentteller, 2) }} </b></td>
<td><b>{{ number_format($totaldiskaunrebateteller, 2) }} </b></td>
<td><b>{{ number_format($totalupahteller, 2) }} </b></td> <td><b>{{ number_format($totalupahteller, 2) }} </b></td>
<td><b>{{ number_format($totalbayaranteller, 2) }} </b></td> <td><b>{{ number_format($totalbayaranteller, 2) }} </b></td>
<td><b>{{ number_format($totaljumlahteller, 2) }} </b></td> <td><b>{{ number_format($totaljumlahteller, 2) }} </b></td>
@@ -402,6 +410,7 @@
$totaljumlahteller = 0; $totaljumlahteller = 0;
$totalujrahteller = 0; $totalujrahteller = 0;
$totalonepercentteller = 0; $totalonepercentteller = 0;
$totaldiskaunrebateteller = 0;
@endphp @endphp
@endif @endif
@else @else
@@ -412,6 +421,7 @@
<td><b>{{ number_format($totalpinjamanteller, 2) }} </b></td> <td><b>{{ number_format($totalpinjamanteller, 2) }} </b></td>
<td><b>{{ number_format($totalujrahteller, 2) }} </b></td> <td><b>{{ number_format($totalujrahteller, 2) }} </b></td>
<td><b>{{ number_format($totalonepercentteller, 2) }} </b></td> <td><b>{{ number_format($totalonepercentteller, 2) }} </b></td>
<td><b>{{ number_format($totaldiskaunrebateteller, 2) }} </b></td>
<td><b>{{ number_format($totalupahteller, 2) }} </b></td> <td><b>{{ number_format($totalupahteller, 2) }} </b></td>
<td><b>{{ number_format($totalbayaranteller, 2) }} </b></td> <td><b>{{ number_format($totalbayaranteller, 2) }} </b></td>
<td><b>{{ number_format($totaljumlahteller, 2) }} </b></td> <td><b>{{ number_format($totaljumlahteller, 2) }} </b></td>
@@ -440,12 +450,9 @@
<td>{{ number_format($totalnm, 2) }}</td> <td>{{ number_format($totalnm, 2) }}</td>
<td>{{ number_format($totalpinjamanasal, 2) }}</td> <td>{{ number_format($totalpinjamanasal, 2) }}</td>
<td>{{ number_format($totalpinjaman, 2) }}</td> <td>{{ number_format($totalpinjaman, 2) }}</td>
<td> <td>@php$totalkeuntunganrebet = $totalpinjaman + $totalupah - $totalbayaran;
@php
$totalkeuntunganrebet = $totalpinjaman + $totalupah - $totalbayaran;
echo number_format($totalkeuntunganrebet, 2); echo number_format($totalkeuntunganrebet, 2);
@endphp @endphp ?></td>
</td>
<td>{{ number_format($totalujrah, 2) }}</td> <td>{{ number_format($totalujrah, 2) }}</td>
<td>{{ number_format($totalonepercent, 2) }}</td> <td>{{ number_format($totalonepercent, 2) }}</td>
<td>{{ number_format($totalupah, 2) }}</td> <td>{{ number_format($totalupah, 2) }}</td>
@@ -231,7 +231,7 @@
<td> <td>
@php @php
// $gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukan/' . $item['norujukan'])->json(); // $gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukan/' . $item['norujukan'])->json();
$gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukan/' . $item['kodcaw'] . '/' . $item['norujukan'])->json(); $gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukankodcaw/' . $item['kodcaw'] . '/' . $item['norujukan'])->json();
$customer_detail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/customers/' . $gadaidetail[0][0]['nokp'])->json(); $customer_detail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/customers/' . $gadaidetail[0][0]['nokp'])->json();
echo $customer_detail['nama']; echo $customer_detail['nama'];
@endphp @endphp
@@ -137,10 +137,6 @@
<td style="vertical-align:top;">{{ $cawangan_detail['alamat2'] }}</td> <td style="vertical-align:top;">{{ $cawangan_detail['alamat2'] }}</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td style="vertical-align:top;">{{ $cawangan_detail['alamat3'] }}</td>
<td></td>
</tr>
<tr> <tr>
<td style="vertical-align:top;">{{ ' No Tel : '. $cawangan_detail['notel'] . ' No Faks : '. $cawangan_detail['nofaks'] }}</td> <td style="vertical-align:top;">{{ ' No Tel : '. $cawangan_detail['notel'] . ' No Faks : '. $cawangan_detail['nofaks'] }}</td>
<td></td> <td></td>
@@ -1,258 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Resit Pampasan</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 14px;
}
.resit {
width: 700px;
margin: 0 auto;
border: 1px solid #000;
padding: 20px;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.header-left {
display: flex;
align-items: center;
gap: 10px;
}
.header img {
height: 20px;
}
.header .tag {
border: 1px solid #000;
padding: 5px 12px;
font-size: 14px;
font-weight: bold;
background: #f9f9f9;
}
h2 {
text-align: right;
margin-bottom: 10px;
}
.panel {
border-top: 1px dashed #000;
margin-top: 30px;
padding-top: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
td {
padding: 6px;
}
.label {
width: 200px;
font-weight: bold;
}
.signature {
margin-top: 40px;
display: flex;
justify-content: space-between;
}
.signature div {
text-align: center;
width: 45%;
}
.footer {
margin-top: 20px;
text-align: center;
font-size: 12px;
}
.pelanggan-info {
text-align: center;
margin-bottom: 20px;
}
.center-table {
margin: 0 auto;
text-align: left;
width: fit-content;
}
.bayaran-info {
margin-top: 20px;
}
.jumlah-row {
margin-top: 20px;
}
.jumlah-row td {
padding-top: 15px;
font-weight: bold;
text-decoration: underline;
}
</style>
</head>
<body onload="window.print()">
<div class="resit">
<div class="header">
<div class="header-left">
<img src="{{ asset('img/kopkb.png') }}" alt="Logo KOPPKB">
<img src="{{ asset('img/ARRAHN1.png') }}" alt="Logo Ar-Rahn">
</div>
<span class="tag">Resit Pampasan</span>
<span class="tag">Untuk Kegunaan Pelanggan</span>
</div>
<div class="pelanggan-info">
<table class="center-table">
<tr>
<td class="label">Nama:</td>
<td>{{ $customer_info['nama'] }}</td>
</tr>
<tr>
<td class="label">No. KP:</td>
<td>{{ $gadai_info['nokp'] }}</td>
</tr>
<tr>
<td class="label">No. SAG:</td>
<td>{{ $pampasan['norujukan'] }}</td>
</tr>
<tr>
<td class="label">Tarikh Tuntutan:</td>
<td>{{ \Carbon\Carbon::parse($pampasan['created_at'])->format('d/m/Y') }}</td>
</tr>
</table>
</div>
<div class="bayaran-info">
<table class="center-table">
<tr>
<td class="label">Nilai Marhun:</td>
<td>RM {{ number_format($pampasan_info['nilaimarhun'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Baki Pembiayaan:</td>
<td>RM {{ number_format($pampasan_info['pembiayaan'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Keuntungan:</td>
<td>RM {{ number_format($pampasan_info['untung'], 2) }}</td>
</tr>
<tr class="jumlah-row">
<td class="label"><strong>JUMLAH PAMPASAN</strong></td>
<td><strong>RM {{ number_format($pampasan['jumlah_pampasan'], 2) }}</strong></td>
</tr>
</table>
</div>
<div class="signature">
<div>
<p>__________________________</p>
<p>PELANGGAN</p>
<p>{{ $customer_info['nama'] }}</p>
</div>
<div>
<p>__________________________</p>
<p>AR-RAHN</p>
<p>{{ auth()->user()->name }}</p>
</div>
</div>
<div class="panel">
<div class="header">
<div class="header-left">
<img src="{{ asset('img/kopkb.png') }}" alt="Logo KOPPKB">
<img src="{{ asset('img/ARRAHN1.png') }}" alt="Logo Ar-Rahn">
</div>
<span class="tag">Resit Pampasan</span>
<span class="tag">Untuk Kegunaan Pejabat</span>
</div>
<div class="pelanggan-info">
<table class="center-table">
<tr>
<td class="label">Nama:</td>
<td>{{ $customer_info['nama'] }}</td>
</tr>
<tr>
<td class="label">No. KP:</td>
<td>{{ $gadai_info['nokp'] }}</td>
</tr>
<tr>
<td class="label">No. SAG:</td>
<td>{{ $pampasan['norujukan'] }}</td>
</tr>
<tr>
<td class="label">Tarikh Tuntutan:</td>
<td>{{ \Carbon\Carbon::parse($pampasan['created_at'])->format('d/m/Y') }}</td>
</tr>
</table>
</div>
<div class="bayaran-info">
<table class="center-table">
<tr>
<td class="label">Nilai Marhun:</td>
<td>RM {{ number_format($pampasan_info['nilaimarhun'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Baki Pembiayaan:</td>
<td>RM {{ number_format($pampasan_info['pembiayaan'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Keuntungan:</td>
<td>RM {{ number_format($pampasan_info['untung'], 2) }}</td>
</tr>
<tr class="jumlah-row">
<td class="label"><strong>JUMLAH PAMPASAN</strong></td>
<td><strong>RM {{ number_format($pampasan['jumlah_pampasan'], 2) }}</strong></td>
</tr>
</table>
</div>
<div class="signature">
<div>
<p>__________________________</p>
<p>PELANGGAN</p>
<p>{{ $customer_info['nama'] }}</p>
</div>
<div>
<p>__________________________</p>
<p>AR-RAHN</p>
<p>{{ auth()->user()->name }}</p>
</div>
</div>
</div>
</div>
</body>
</html>
<script>
window.onload = function() {
window.print();
};
window.onafterprint = function() {
window.location.href = "{{ url('/panjar') }}";
};
</script>
@@ -629,29 +629,35 @@
</tr> </tr>
<tr> <tr>
<td style="width:10px">Keuntungan</td> <td style="width:10px">Keuntungan</td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['onepercent'],2) }}</td> <td style="width:10px">: RM {{ number_format($penebusan['onepercent'], 2) }}</td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">(-) Rebat Untung</td> <td style="width:10px">(-) Rebat Untung</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($keuntungan_rebate,2) }} {{ number_format($totalrebate['onepercent'], 2) }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Lain-Lain Caj</td> <td style="width:10px">Lain-Lain Caj</td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['ujrah'],2) }} </td> <td style="width:10px">: RM {{ number_format($penebusan['ujrah'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">(-) Rebat Lain-Lain Caj</td> <td style="width:10px">(-) Rebat Lain-Lain Caj</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($ujrah_rebate, 2) }} </td> {{ number_format($totalrebate['ujrah'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td> <td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td>
<td style="width:10px">: <strong>RM <td style="width:10px">: <strong>RM
{{ number_format($penebusan['onepercent'] + $penebusan['ujrah'], 2) }}</strong> {{ number_format($penebusan['onepercent'] + $penebusan['ujrah'], 2) }}</strong>
</td> </td>
</tr> </tr>
<tr>
<td style="width:10px">(-) Diskaun Promosi</td>
<td style="width:10px">: RM
{{ number_format($gadai['diskaun'], 2) }} </td>
</tr>
<tr> <tr>
<td></td> <td></td>
</tr> </tr>
@@ -862,29 +868,35 @@
</tr> </tr>
<tr> <tr>
<td style="width:10px">Keuntungan</td> <td style="width:10px">Keuntungan</td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['onepercent'], 2) }}</td> <td style="width:10px">: RM {{ number_format($penebusan['onepercent'], 2) }}</td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">(-) Rebat Untung</td> <td style="width:10px">(-) Rebat Untung</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($keuntungan_rebate, 2) }} {{ number_format($totalrebate['onepercent'], 2) }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Lain-Lain Caj</td> <td style="width:10px">Lain-Lain Caj</td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['ujrah'], 2) }} </td> <td style="width:10px">: RM {{ number_format($penebusan['ujrah'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">(-) Rebat Lain-Lain Caj</td> <td style="width:10px">(-) Rebat Lain-Lain Caj</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($ujrah_rebate, 2) }} </td> {{ number_format($totalrebate['ujrah'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td> <td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td>
<td style="width:10px">: <strong>RM <td style="width:10px">: <strong>RM
{{ number_format($penebusan['onepercent'] + $penebusan['ujrah'], 2) }}</strong> {{ number_format($penebusan['onepercent'] + $penebusan['ujrah'], 2) }}</strong>
</td> </td>
</tr> </tr>
<tr>
<td style="width:10px">(-) Diskaun Promosi</td>
<td style="width:10px">: RM
{{ number_format($gadai['diskaun'], 2) }} </td>
</tr>
<tr> <tr>
<td></td> <td></td>
</tr> </tr>
+3 -3
View File
@@ -1145,7 +1145,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="1"></td> <td colspan="1"></td>
<td colspan="1">v.</td> <td colspan="1">u.</td>
<td colspan="2">Jika berlaku kehilangan SAG ini, KoPKB hanya boleh mengeluarkan <td colspan="2">Jika berlaku kehilangan SAG ini, KoPKB hanya boleh mengeluarkan
salinan salinan
yang disahkan, yang disahkan,
@@ -1156,7 +1156,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="1"></td> <td colspan="1"></td>
<td colspan="1">w.</td> <td colspan="1">v.</td>
<td colspan="2">SAG ini sah diperlakukan sepanjang tempoh matang (daripada tarikh <td colspan="2">SAG ini sah diperlakukan sepanjang tempoh matang (daripada tarikh
pembiayaan pembiayaan
sehingga tempoh matang) atau sehingga tempoh lanjutan (sekiranya layak) dan; sehingga tempoh matang) atau sehingga tempoh lanjutan (sekiranya layak) dan;
@@ -1164,7 +1164,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="1"></td> <td colspan="1"></td>
<td colspan="1">x.</td> <td colspan="1">w.</td>
<td colspan="2">KoPKB berhak mengubah, mengubahsuai, menambah atau mengeluarkan <td colspan="2">KoPKB berhak mengubah, mengubahsuai, menambah atau mengeluarkan
terma terma
dan syarat ini atau dan syarat ini atau
@@ -1,278 +0,0 @@
<!DOCTYPE html>
<html lang="ms">
<head>
<meta charset="utf-8">
<title>Surat Pampasan</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
@page {
size: A4;
margin: 20mm;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: "Times New Roman", Times, serif;
color: #000;
}
.page {
width: 210mm;
min-height: 257mm;
margin: 0 auto;
position: relative;
}
.header {
text-align: center;
line-height: 1.4;
margin-bottom: 8mm;
}
.header .org-name {
font-weight: bold;
text-transform: uppercase;
}
.title {
text-align: center;
font-weight: bold;
text-transform: uppercase;
margin: 2mm 0 4mm;
font-size: 16px;
text-decoration: underline;
}
.claim-no {
text-align: center;
margin: 2mm 0 6mm;
}
.claim-no .label {
text-transform: uppercase;
font-weight: bold;
}
.content {
font-size: 12pt;
line-height: 1.65;
text-align: justify;
}
.content b {
font-weight: bold;
}
.content .emph {
font-weight: bold;
text-transform: uppercase;
}
.mt-2 {
margin-top: 2mm;
}
.mt-4 {
margin-top: 4mm;
}
.mt-8 {
margin-top: 8mm;
}
.mt-12 {
margin-top: 12mm;
}
.date-row {
margin-top: 8mm;
}
.line {
display: inline-block;
border-bottom: 1px solid #000;
width: 65mm;
height: 8mm;
vertical-align: bottom;
margin-left: 2mm;
margin-right: 6mm;
}
.signatures {
display: flex;
gap: 10mm;
margin-top: 12mm;
}
.sig-col {
width: 50%;
text-align: center;
}
.sig-line {
border-bottom: 1px solid #000;
height: 18mm;
margin: 0 10mm 2mm;
}
.sig-labels {
display: flex;
justify-content: space-between;
margin: 0 10mm;
font-weight: bold;
}
.sig-meta {
text-align: left;
margin: 2mm 10mm 0;
font-weight: bold;
}
.page-break {
page-break-after: always;
}
@media print {
html,
body {
width: 210mm;
}
.page {
min-height: 277mm;
}
.no-print {
display: none !important;
}
* {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
}
</style>
</head>
<body>
<div class="page">
<div class="header">
<div class="org-name">KOPERASI PERMODALAN KELANTAN BERHAD (D-5-0228)</div>
<div>Lot PT 448, Tingkat 1, Jalan Kuala Krai, Batu 3 Wakaf Che Yeh, 15150 Kota Bharu, Kelantan</div>
<div>Tel : 09-7414331 / 4334 &nbsp;&nbsp; Website : www.koppkb.com &nbsp;&nbsp; Email : admin@koppkb.com
</div>
</div>
<div class="title">AKUAN TERIMAAN PAMPASAN DAN PELEPASAN</div>
<div class="claim-no"><span class="label">NO. TUNTUTAN :</span> <b>{{ $gadai_info['norujukan'] }}</b></div>
<div class="content">
<p>
1. Bahawasanya saya, Penama : <b>{{ $customer_info['nama'] }}</b><br>
No. Kad Pengenalan : <b>{{ $customer_info['kpbaru'] }}</b><br>
Adalah dengan ini atas <span class="emph">BALASAN</span> sebanyak <b>RM {{ number_format($jumlah_pampasan, 2) }}</b>
<b> (Ringgit Malaysia : {{ $jumlah_pampasan_terbilang }} sahaja)</b>
yang dibayar kepada saya oleh <b>AR-RAHN CAWANGAN SEMPORNA</b> atau
<b>KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)</b> yang mana penerimaan wang bayaran tersebut
adalah saya perakui sebagai bayaran muktamad melepaskan <b>AR-RAHN CAWANGAN SEMPORNA</b>
atau <b>KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)</b> daripada segala liabiliti, tindakan, klausa
tindakan, tuntutan dan tanggungjawab yang saya boleh kuatkuasakan, punyai atau mungkin mempunyai
pada masa ini atau pada bila-bila masa terhadap <b>AR-RAHN CAWANGAN SEMPORNA</b>,<b> KOPERASI PERMODALAN
KELANTAN BERHAD (KoPKB)</b>
berkait dengan kehilangan/kecurian barangan kemas pada bulan <b>November 2024</b> yang
telah digadaikan di <b>AR-RAHN CAWANGAN SEMPORNA, LOT F9-0 GROUND FLOOR, BANDAR MUTIARA, JALAN HOSPITAL,
91300 SEMPORNA, SABAH</b> atau apa-apa perkara
yang timbul berkait/akibat
daripada kehilangan/kecurian tersebut.
</p>
<p class="mt-4">
2. <span class="emph">DAN</span> saya memberikan sebenar-benar akujanji bahawa saya tidak akan
mengambil/memulakan
sebarang tindakan perundangan terhadap <b>AR-RAHN CAWANGAN SEMPORNA</b> atau
<b>KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)</b> berkait dengan kehilangan/kecurian tersebut
dengan penerimaan wang balasan di atas.
</p>
<p class="mt-4">
Adalah saya dengan ini memperakui bahawa dokumen ini telah dibacakan/saya baca dan saya fahami
kesan dan implikasi dokumen ini sepenuh-penuhnya.
</p>
<div class="date-row">
Bertarikh:
</div>
<div class="signatures">
<div class="sig-col">
<div class="sig-line"></div>
<div class="sig-labels"><span>(PELANGGAN)</span></div>
<div class="sig-labels"><span>{{ $customer_info['nama'] }}</span></div>
<div class="sig-meta">No K/P: </div>
</div>
<div class="sig-col">
<div class="sig-line"></div>
<div class="sig-labels"><span>(SAKSI)</span></div>
<div class="sig-meta">Nama : </div>
<div class="sig-meta">No K/P: </div>
</div>
</div>
</div>
</div>
<div class="no-print" style="text-align:center; margin: 10mm 0;">
<button onclick="cetakSuratPampasan()" style="padding:8px 16px;font-size:14px;">Cetak</button>
</div>
<script>
window.addEventListener('DOMContentLoaded', function(){
cetakSuratPampasan();
})
async function cetakSuratPampasan() {
window.print();
await initiatePampasan();
}
async function initiatePampasan() {
return fetch('/pampasan/initiate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
'norujukan': @json($gadai_info['norujukan']),
"_token": "{{ csrf_token() }}",
})
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(result => {
return result;
})
.catch(error => {
console.error('Error initiating pampasan:', error);
Swal.fire({
title: 'Ralat',
text: 'Gagal daftar pampasan',
icon: 'error'
});
throw error;
});
}
</script>
</body>
</html>
+1 -31
View File
@@ -1,6 +1,5 @@
<?php <?php
use App\Http\Controllers\KhazanahController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Services\ImbangdugaServices; use App\Services\ImbangdugaServices;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
@@ -15,10 +14,6 @@ use Illuminate\Support\Facades\Storage;
| |
*/ */
Route::get('/health', function () {
return response()->json(['status' => 'ok']);
});
Route::get('/',['as'=>'login','uses'=>'HomeController@index']); Route::get('/',['as'=>'login','uses'=>'HomeController@index']);
Route::get('/testtry',function(ImbangdugaServices $imbangduga){ Route::get('/testtry',function(ImbangdugaServices $imbangduga){
@@ -117,10 +112,6 @@ Route::get('/history',['as'=>'gadai.history','uses'=>'GadaianController@history'
Route::get('/history/khazanah',['as'=>'gadai.history.khazanah','uses'=>'GadaianController@history'])->middleware('auth','khazanah'); Route::get('/history/khazanah',['as'=>'gadai.history.khazanah','uses'=>'GadaianController@history'])->middleware('auth','khazanah');
Route::post('/customer/assign-anggota', ['as' => 'customer.assignAnggota','uses' => 'CustomersController@assignAnggota'])->middleware('auth', 'teller'); Route::post('/customer/assign-anggota', ['as' => 'customer.assignAnggota','uses' => 'CustomersController@assignAnggota'])->middleware('auth', 'teller');
//Laporan Aliran Tunai Teller
Route::get('/laporan/alirantunai', ['as' => 'laporan.alirantunai', 'uses'=> 'AliranTunaiController@laporanAliranTunaiTeller'])->middleware('auth','teller');
Route::post('laporan/alirantunai/cetak', ['as' => 'alirantunai.laporancetak', 'uses' => 'AliranTunaiController@cetakLaporanAliranTunaiTeller'])->middleware('auth', 'teller');
//Kemaskini Upah //Kemaskini Upah
Route::get('/kemaskiniupah',['as'=>'kemaskini.upah','uses'=>'AliranTunaiController@kemaskiniupah'])->middleware('auth','teller'); Route::get('/kemaskiniupah',['as'=>'kemaskini.upah','uses'=>'AliranTunaiController@kemaskiniupah'])->middleware('auth','teller');
@@ -276,8 +267,6 @@ Route::post('laporan/saghilang/cetak',['as'=>'saghilang.laporancetak','uses'=>'K
// Route::get('/laporan/agingbulanan', [ 'as'=>'laporan.agingbulanan', 'uses'=>'KhazanahController@laporanAging_Bulanan'])->middleware('auth','khazanah'); // Route::get('/laporan/agingbulanan', [ 'as'=>'laporan.agingbulanan', 'uses'=>'KhazanahController@laporanAging_Bulanan'])->middleware('auth','khazanah');
// Route::post('/laporan/agingbulanan/cetak', ['as'=>'agingbulan.cetaklaporan', 'uses'=>'KhazanahController@cetaklaporang_Aging'])->middleware('auth','khazanah'); // Route::post('/laporan/agingbulanan/cetak', ['as'=>'agingbulan.cetaklaporan', 'uses'=>'KhazanahController@cetaklaporang_Aging'])->middleware('auth','khazanah');
Route::get('laporan/operasi/audittrail/cetak',['as'=>'operasi.audittrail.laporancetak','uses'=>'OperasiController@cetakLaporanAuditTrail'])->middleware('auth','operasi');
Route::get('/laporan/stokauditbackdate',['as'=>'laporan.stokauditbackdate','uses'=>'KhazanahController@laporanStokAuditBackdate'])->middleware('auth','khazanah'); Route::get('/laporan/stokauditbackdate',['as'=>'laporan.stokauditbackdate','uses'=>'KhazanahController@laporanStokAuditBackdate'])->middleware('auth','khazanah');
Route::get('laporan/stokauditbackdate/cetak',['as'=>'stokauditbackdate.laporancetak','uses'=>'KhazanahController@cetakLaporanStokAuditBackdate'])->middleware('auth','khazanah'); Route::get('laporan/stokauditbackdate/cetak',['as'=>'stokauditbackdate.laporancetak','uses'=>'KhazanahController@cetakLaporanStokAuditBackdate'])->middleware('auth','khazanah');
@@ -350,11 +339,11 @@ Route::post('/barcodescanned',['as'=>'barcode.scanned','uses'=>'KhazanahControll
Route::get('/operasi/kelulusan','OperasiController@kelulusan')->name('operasi.kelulusan')->middleware('auth','operasi'); Route::get('/operasi/kelulusan','OperasiController@kelulusan')->name('operasi.kelulusan')->middleware('auth','operasi');
Route::get('/operasi/kelulusan/anggota','OperasiController@kelulusanAnggota')->name('operasi.kelulusananggota')->middleware('auth','operasi'); Route::get('/operasi/kelulusan/anggota','OperasiController@kelulusanAnggota')->name('operasi.kelulusananggota')->middleware('auth','operasi');
Route::post('/operasi/createkelulusan',['as'=>'operasi.createkelulusan','uses'=>'OperasiController@createkelulusan'])->middleware('auth','teller'); Route::post('/operasi/createkelulusan',['as'=>'operasi.createkelulusan','uses'=>'OperasiController@createkelulusan'])->middleware('auth','teller');
Route::post('/operasi/createkelulusan-anggota',['as'=>'operasi.createkelulusan-anggota','uses'=>'OperasiController@createkelulusanAnggota'])->middleware('auth','teller');
Route::get('/operasi/getkelulusan',['as'=>'operasi.getkelulusan','uses'=>'OperasiController@getkelulusan'])->middleware('auth','teller'); Route::get('/operasi/getkelulusan',['as'=>'operasi.getkelulusan','uses'=>'OperasiController@getkelulusan'])->middleware('auth','teller');
Route::put('/operasi/updatekelulusan',['as'=>'operasi.updatekelulusan','uses'=>'OperasiController@updatekelulusan'])->middleware('auth','operasi'); Route::put('/operasi/updatekelulusan',['as'=>'operasi.updatekelulusan','uses'=>'OperasiController@updatekelulusan'])->middleware('auth','operasi');
Route::put('/operasi/updatekelulusananggota',['as'=>'operasi.updatekelulusananggota','uses'=>'OperasiController@updatekelulusananggota'])->middleware('auth','operasi'); Route::put('/operasi/updatekelulusananggota',['as'=>'operasi.updatekelulusananggota','uses'=>'OperasiController@updatekelulusananggota'])->middleware('auth','operasi');
Route::get('/operasi/parameter','OperasiController@parameter')->name('parameter')->middleware('auth','operasi'); Route::get('/operasi/parameter','OperasiController@parameter')->name('parameter')->middleware('auth','operasi');
Route::get('/operasi/laporan-audit','OperasiController@laporanAudit')->name('operasi.laporan.audit')->middleware('auth','operasi');
Route::get('/operasi/hargaemas',['as'=>'operasi.hargaemas','uses'=>'OperasiController@hargaemas'])->middleware('auth','operasi'); Route::get('/operasi/hargaemas',['as'=>'operasi.hargaemas','uses'=>'OperasiController@hargaemas'])->middleware('auth','operasi');
Route::post('/operasi/hargaemas/update',['as'=>'hargaemas.update','uses'=>'OperasiController@updatehargaemas'])->middleware('auth','operasi'); Route::post('/operasi/hargaemas/update',['as'=>'hargaemas.update','uses'=>'OperasiController@updatehargaemas'])->middleware('auth','operasi');
Route::post('/operasi/hargaemas',['as'=>'hargaemas.create','uses'=>'OperasiController@createhargaemas'])->middleware('auth','operasi'); Route::post('/operasi/hargaemas',['as'=>'hargaemas.create','uses'=>'OperasiController@createhargaemas'])->middleware('auth','operasi');
@@ -371,8 +360,6 @@ Route::post('operasi/kakitangan/edit/store',['as'=>'operasi.kakitangan.edit.stor
Route::get('/operasi/margin',['as'=>'operasi.margin','uses'=>'OperasiController@margin'])->middleware('auth','operasi'); Route::get('/operasi/margin',['as'=>'operasi.margin','uses'=>'OperasiController@margin'])->middleware('auth','operasi');
Route::get('/operasi/marginmutu',['as'=>'operasi.marginmutu','uses'=>'OperasiController@marginmutu'])->middleware('auth','operasi');
Route::get('/operasi/marginmutu/edit',['as'=>'operasi.marginmutu.edit','uses'=>'OperasiController@editMarginMutu'])->middleware('auth','operasi');
Route::get('/komoditi',['as'=>'komuditi','uses'=>'KomuditiController@index']); Route::get('/komoditi',['as'=>'komuditi','uses'=>'KomuditiController@index']);
Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']); Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']);
@@ -511,20 +498,3 @@ Route::get('/event/tellercash',['as'=>'event.tellercash','uses'=>'EventTriggerCo
Route::get('/perubatan',['as'=>'perubatan','uses'=>'PerubatanController@index'])->middleware('auth','operasi'); Route::get('/perubatan',['as'=>'perubatan','uses'=>'PerubatanController@index'])->middleware('auth','operasi');
Route::get('/perubatan/search',['as'=>'perubatan.search','uses'=>'PerubatanController@search'])->middleware('auth','operasi'); Route::get('/perubatan/search',['as'=>'perubatan.search','uses'=>'PerubatanController@search'])->middleware('auth','operasi');
Route::put('/perubatan/update',['as'=>'perubatan.update','uses'=>'PerubatanController@update'])->middleware('auth','operasi'); Route::put('/perubatan/update',['as'=>'perubatan.update','uses'=>'PerubatanController@update'])->middleware('auth','operasi');
/* Pampasan */
//Page Pampasan Detail Payment Customer
Route::get('/pampasan/detail/{norujukan}', ['as' => 'pampasan.detail','uses' => 'KhazanahController@pampasanDetail'])->middleware('auth', 'khazanah');
//Selepas teller print surat perjanjian pampasan pelanggan
Route::post('/pampasan/initiate',['as' => 'pampasan.initiate', 'uses' => 'KhazanahController@initiatePampasan'])->middleware('auth', 'teller');
//Selepas PC masukkan Deno dan Submit Jumlah Pampasan
Route::post('/pampasan/terima',['as' => 'pampasan.terima', 'uses' => 'KhazanahController@terimaPampasan'])->middleware('auth', 'khazanah');
//Cetak Resit Pampasan
Route::get(('/pampasan/resit'), ['as' => 'pampasan.resit', 'uses' => 'KhazanahController@resitPampasan'])->middleware('auth', 'khazanah');
//Surat Pampasan
Route::get('/pampasan/surat/{norujukan}', ['as' => 'pampasan.surat', 'uses' => 'KhazanahController@suratPampasan'])->middleware('auth', 'role:teller,khazanah');