8 Commits

Author SHA1 Message Date
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
56 changed files with 1528 additions and 5558 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
+8 -15
View File
@@ -1,26 +1,19 @@
APP_NAME=Laravel APP_NAME=Laravel
APP_ENV=staging APP_ENV=local
APP_KEY=base64:O1XZDqK4H6+3GdrODgCaLr2l+OoWvgVhYr0GJ1KizW8= APP_KEY=base64:WRTHcFTq5YARKVdA8YDUzsh9Ue8vD63ivgZgXNNBiGo=
APP_DEBUG=true APP_DEBUG=true
APP_URL=http://172.16.6.200:8091 APP_URL=http://ujrahkopkb.erahn.com.my
API_URL=http://apiujrah-kopkb.erahn.com.my
HTTP_PORT=8091 #API_ARRAHNBID=http://lelong.test/api/
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_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql DB_CONNECTION=mysql
DB_HOST=mysql DB_HOST=127.0.0.1
DB_PORT=3306 DB_PORT=3306
DB_DATABASE=kaunter_erahn DB_DATABASE=kaunter_erahn
DB_USERNAME=kaunteruser DB_USERNAME=spider
DB_PASSWORD=password DB_PASSWORD=G0dz!ll4
BROADCAST_DRIVER=pusher BROADCAST_DRIVER=pusher
CACHE_DRIVER=file CACHE_DRIVER=file
-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){
-270
View File
@@ -4417,274 +4417,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;
+1 -26
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)
@@ -789,26 +786,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));
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
<?php <?php
return [ return [
'url' => env('API_URL'), 'url' => env('API_URL'),
'url_koop' => env('API_URL_KOOP','http://localhost:8000'), 'url_koop' => env('API_URL_KOOP','https://apiujrah.erahn.com.my'),
'url_pkb' => env('API_URL_PKB','http://localhost:8000'), 'url_pkb' => env('API_URL_PKB','http://localhost:8000'),
]; ];
-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 -19
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">
@@ -525,7 +525,6 @@ var api_url = @json($api_url ?? '');
}); });
// Logik amaran SweetAlert // Logik amaran SweetAlert
if("{{ auth()->user()->cawangan }}" == 'X0301'){
if (search === true) { if (search === true) {
if (blacklist_search === true) { if (blacklist_search === true) {
Swal.fire({ Swal.fire({
@@ -556,7 +555,6 @@ var api_url = @json($api_url ?? '');
}); });
} }
} }
}
}); });
@@ -1395,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>
+5 -3
View File
@@ -75,7 +75,8 @@
->json(); ->json();
@endphp @endphp
<input type="text" class="form-control" name="outstanding_semasa" <input type="text" class="form-control" name="outstanding_semasa"
id="outstanding_semasa" readonly value="{{ number_format($outstanding_semasa, 2) }}"> id="outstanding_semasa" readonly
value="{{ number_format($outstanding_semasa, 2) }}">
</div> </div>
</div> </div>
@@ -157,7 +158,7 @@
<!-- Butang Assign Sebagai Anggota --> <!-- Butang Assign Sebagai Anggota -->
@if (isset($showAssignAnggotaBtn) && $showAssignAnggotaBtn && auth()->user()->cawangan == 'X0301') @if (isset($showAssignAnggotaBtn) && $showAssignAnggotaBtn)
<div class="m-0 p-2"> <div class="m-0 p-2">
<button type="button" class="btn btn-success d-flex align-items-center" <button type="button" class="btn btn-success d-flex align-items-center"
data-noic="{{ $noic }}" onclick="assignAnggota(this)"> data-noic="{{ $noic }}" onclick="assignAnggota(this)">
@@ -1014,7 +1015,8 @@
); );
alert alert
(xhr (xhr
.responseText); .responseText
);
} }
}); });
}); });
+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
+26 -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">
@@ -29,6 +29,7 @@
<div class="form-group row col-12"> <div class="form-group row col-12">
<input type="hidden" name="kodcaw" id="kodcaw" value="{{$cawangan_info['kodcaw']}}"> <input type="hidden" name="kodcaw" id="kodcaw" value="{{$cawangan_info['kodcaw']}}">
<input type="hidden" name="nokp" id="nokp" value="{{ $customer_info['kpbaru'] }}"> <input type="hidden" name="nokp" id="nokp" value="{{ $customer_info['kpbaru'] }}">
<input type="hidden" name="tag_anggota" id="tag_anggota" value="{{ $customer_info['tag_anggota'] ?? 0 }}">
</div> </div>
<div class="col-12 mb-2"> <div class="col-12 mb-2">
@@ -63,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>
@@ -97,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">
@@ -512,31 +476,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({
@@ -585,14 +536,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){
@@ -603,7 +552,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'],
@@ -627,7 +575,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',
@@ -640,6 +594,11 @@
}, },
success:function(data){ success:function(data){
kadarupah = data; kadarupah = data;
// Jika anggota (tag_anggota = 1), kadar ujrah dipaksa 0.00
if(Number($('#tag_anggota').val()) === 1){
kadarupah = 0;
}
} }
}); });
@@ -649,31 +608,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)));
} }
}); });
} }
@@ -922,7 +874,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);
@@ -1488,7 +1439,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',
@@ -1498,10 +1449,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 }}";
@@ -1672,8 +1621,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);
} }
@@ -1916,169 +1864,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>
+3 -175
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">
@@ -1096,28 +1082,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 +1152,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 +1365,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 +1395,8 @@
dataType: 'json', dataType: 'json',
async:false, async:false,
success:function(harga_tebus){ success:function(harga_tebus){
if(pampasan != null){
let pembiayaan = safeMoneyParse(pampasan.pembiayaan);
let untung = safeMoneyParse(pampasan.untung);
$('#perludibayar').val(formatter.format(pembiayaan + untung));
$('#duitPelanggan').val(formatter.format(pembiayaan + untung));
$('#duitPelanggan').prop('readonly', true);
}else {
$('#perludibayar').val(formatter.format(harga_tebus)); $('#perludibayar').val(formatter.format(harga_tebus));
} }
}
}); });
// Telah dibayar // Telah dibayar
@@ -1805,129 +1753,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...',
@@ -3377,7 +3204,7 @@
/////////// ///////////
} }
//Bayaran Semua function end file
} }
function gadaiautotawarruq() function gadaiautotawarruq()
@@ -4639,6 +4466,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>
@@ -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
@@ -440,12 +440,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,22 +629,22 @@
</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>
@@ -862,22 +862,22 @@
</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>
+73 -29
View File
@@ -655,7 +655,7 @@
</table> </table>
<table class="main-table text-center" style="border-top: none !important"> <table class="main-table text-center" style="border-top: none !important">
<tr> <tr>
<th colspan="5">JUMLAH KEUNTUNGAN DAN LAIN-LAIN CAJ BERDASARKAN TEMPOH PEMBIAYAAN</th> <th colspan="5">JUMLAH KEUNTUNGAN BERDASARKAN TEMPOH PEMBIAYAAN</th>
</tr> </tr>
<tr> <tr>
<th>TEMPOH PEMBIAYAAN</th> <th>TEMPOH PEMBIAYAAN</th>
@@ -670,13 +670,13 @@
<td>{{ $formatted_t_matang_1 }}</td> <td>{{ $formatted_t_matang_1 }}</td>
</tr> </tr>
<tr> <tr>
<th class="text-left">JUMLAH KEUNTUNGAN (1%) DAN LAIN-LAIN CAJ YANG PERLU DIBAYAR</th> <th class="text-left">JUMLAH KEUNTUNGAN YANG PERLU DIBAYAR</th>
<td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'] / 6, 2) }}</b></td> <td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'] / 6, 2) }}</b></td>
<td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</b></td> <td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</b></td>
<td>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</td> <td>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</td>
</tr> </tr>
<tr> <tr>
<th class="text-left">JUMLAH KEUNTUNGAN (1%) DAN LAIN-LAIN CAJ TERKUMPUL<br> SEPANJANG TEMPOH <th class="text-left">JUMLAH KEUNTUNGAN TERKUMPUL<br> SEPANJANG TEMPOH
PEMBIAYAAN PEMBIAYAAN
</th> </th>
<td>-</td> <td>-</td>
@@ -717,7 +717,7 @@
<tr> <tr>
<td colspan="4"> <td colspan="4">
Pelanggan bersetuju dan dengan ini menggadaikan Marhun sebagai cagaran kepada Pelanggan bersetuju dan dengan ini menggadaikan Marhun sebagai cagaran kepada
Jumlah Pembiayaan termasuk Jumlah Keuntungan dan Lain-Lain Caj Terkumpul Jumlah Pembiayaan termasuk Jumlah Keuntungan Terkumpul
mengikut mengikut
syarat-syarat pembiayaan dalam SAG ini. KoPKB dengan ini menerima gadaian Marhun syarat-syarat pembiayaan dalam SAG ini. KoPKB dengan ini menerima gadaian Marhun
tersebut. tersebut.
@@ -731,14 +731,12 @@
<td style="vertical-align: top"> <td style="vertical-align: top">
<table class="akad-table"> <table class="akad-table">
<tr> <tr>
<td colspan="4"><b><u>AKAD (SIMPAN MARHUN)</u></b></td> <td colspan="4"><b><u>KADAR KEUNTUNGAN BULANAN</u></b></td>
</tr> </tr>
<tr> <tr>
<td colspan="4"> <td colspan="4">
Pelanggan dengan ini bersetuju marhun disimpan oleh KoPKB dan bersetuju membayar Kadar keuntungan Pembiayaan Ar-Rahn Tawarruq adalah berdasarkan jumlah
lain-lain caj pembiayaan seperti berikut :
sebagaimana jadual dibawah bagi setiap
RM100.00 Jumlah Marhun Keseluruhan:
</td> </td>
</tr> </tr>
</table> </table>
@@ -746,35 +744,35 @@
<table class="main-table text-center" <table class="main-table text-center"
style="font-size: 9px; width: 100%; margin-top: 5px;"> style="font-size: 9px; width: 100%; margin-top: 5px;">
<tr> <tr>
<th>KADAR LAIN-LAIN CAJ / RM100</th> <th>KADAR KEUNTUNGAN SEBULAN (%)</th>
</tr> </tr>
<tr> <tr>
<td>RM{{ $kadar_ujrah[0]['kadarujrah'] }}/sebulan</td> <td>1.00</td>
</tr> </tr>
</table> </table>
@else @else
<table class="main-table text-center" <table class="main-table text-center"
style="font-size: 9px; width: 100%; margin-top: 5px;"> style="font-size: 9px; width: 100%; margin-top: 5px;">
<tr> <tr>
<th>NILAI MARHUN KESELURUHAN</th> <th>JUMLAH PEMBIAYAAN</th>
<th></th> <th></th>
<th>KADAR LAIN-LAIN CAJ / RM100</th> <th>KADAR KEUNTUNGAN SEBULAN (%)</th>
</tr> </tr>
<tr> <tr>
<td> <td>
< RM400.99</td> < RM400.99</td>
<td>-</td> <td>-</td>
<td>RM{{ $kadar_ujrah[0]['kadarujrah'] }}/sebulan</td> <td>{{ $kadar_ujrah[0]['kadarupdah'] }}</td>
</tr> </tr>
<tr> <tr>
<td>RM401.00 - RM2000.99</td> <td>RM401.00 - RM2000.99</td>
<td>-</td> <td>-</td>
<td>RM{{ $kadar_ujrah[1]['kadarujrah'] }}/sebulan</td> <td>{{ $kadar_ujrah[1]['kadarupdah'] }}</td>
</tr> </tr>
<tr> <tr>
<td>> RM2001.00</td> <td>> RM2001.00</td>
<td>-</td> <td>-</td>
<td>RM{{ $kadar_ujrah[2]['kadarujrah'] }}/sebulan</td> <td>{{ $kadar_ujrah[2]['kadarupdah'] }}</td>
</tr> </tr>
</table> </table>
@endif @endif
@@ -829,15 +827,15 @@
<tr> <tr>
<td></td> <td></td>
<td>e.</td> <td>e.</td>
<td colspan="2">Membayar Jumlah Pembiayaan termasuk Jumlah Keuntungan dan <td colspan="2">Membayar Jumlah Pembiayaan termasuk Jumlah Keuntungan yang diberi
Lain-Lain Caj Terkumpul yang diberi mengikut dalam tempoh seperti di SAG ini; mengikut dalam tempoh seperti di SAG ini;
</td> </td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
<td>f.</td> <td>f.</td>
<td colspan="2">Tertakluk kepada pembayaran penuh Jumlah Pembiayaan termasuk <td colspan="2">Tertakluk kepada pembayaran penuh Jumlah Pembiayaan termasuk
Jumlah Keuntungan dan Lain-Lain Caj Terkumpul, Pelanggan perlu hadir sendiri Jumlah Keuntungan Terkumpul, Pelanggan perlu hadir sendiri
menyelesaikan Pembiayaan;</td> menyelesaikan Pembiayaan;</td>
</tr> </tr>
<tr> <tr>
@@ -1066,8 +1064,7 @@
<td colspan="1"></td> <td colspan="1"></td>
<td colspan="1">o.</td> <td colspan="1">o.</td>
<td colspan="2">KoPKB berhak menuntut Jumlah Pembiayaan termasuk Jumlah Keuntungan <td colspan="2">KoPKB berhak menuntut Jumlah Pembiayaan termasuk Jumlah Keuntungan
dan setelah tamat tempoh yang dinyatakan pada notis berkaitan;
Lain-Lain Caj Terkumpul setelah tamat tempoh yang dinyatakan pada notis berkaitan;
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -1212,8 +1209,7 @@
<td colspan="1">a.</td> <td colspan="1">a.</td>
<td colspan="2">Marhun akan dilelong atau dijual. KoPKB akan membatalkan <td colspan="2">Marhun akan dilelong atau dijual. KoPKB akan membatalkan
lelongan Marhun sekiranya Pelanggan membayar tunggakan Jumlah Pembiayaan lelongan Marhun sekiranya Pelanggan membayar tunggakan Jumlah Pembiayaan
termasuk Jumlah Keuntungan dan termasuk Jumlah Keuntungan
Lain-Lain Caj
sepenuhnya tiga (3) hari sebelum tarikh lelongan;</td> sepenuhnya tiga (3) hari sebelum tarikh lelongan;</td>
</tr> </tr>
<tr> <tr>
@@ -1233,7 +1229,7 @@
<td colspan="1">c.</td> <td colspan="1">c.</td>
<td colspan="2">Sebarang lebihan hasil lelongan atau jualan (jika ada) setelah <td colspan="2">Sebarang lebihan hasil lelongan atau jualan (jika ada) setelah
ditolak ditolak
Jumlah Pembiayaan termasuk Jumlah Keuntungan dan Lain-Lain Caj Terkumpul Jumlah Pembiayaan termasuk Jumlah Keuntungan Terkumpul
yang tertunggak dan kos-kos berkaitan akan yang tertunggak dan kos-kos berkaitan akan
dikembalikan dikembalikan
kepada Pelanggan dan;</td> kepada Pelanggan dan;</td>
@@ -1264,7 +1260,7 @@
<td>=</td> <td>=</td>
<td><b>BAKI TEMPOH PEMBIAYAAN <br></td> <td><b>BAKI TEMPOH PEMBIAYAAN <br></td>
<td>X</td> <td>X</td>
<td><b>JUMLAH KEUNTUNGAN 1% DAN LAIN-LAIN CAJ YANG PERLU DIBAYAR</b></td> <td><b>JUMLAH KEUNTUNGAN YANG PERLU DIBAYAR</b></td>
</tr> </tr>
</table> </table>
<br> <br>
@@ -1280,7 +1276,7 @@
<td colspan="1"></td> <td colspan="1"></td>
<td colspan="1">a.</td> <td colspan="1">a.</td>
<td colspan="2">Pelanggan gagal dan/ingkar menjelaskan Jumlah Pembiayaan, <td colspan="2">Pelanggan gagal dan/ingkar menjelaskan Jumlah Pembiayaan,
Jumlah Keuntungan dan Lain-Lain Caj Terkumpul pada tarikh yang ditetapkan; Jumlah Keuntungan Terkumpul pada tarikh yang ditetapkan;
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -1306,6 +1302,45 @@
<tr> <tr>
<td colspan="1"></td> <td colspan="1"></td>
<td colspan="1"><b>6.</b></td> <td colspan="1"><b>6.</b></td>
<td colspan="2"><b>Pelanggan dengan ini bersetuju, memberi kuasa dan melantik
Ar-Rahn sebagai wakil (wakil di bawah prinsip Wakalah) untuk menguruskan baki
hasil lelongan yang menjadi hak Pelanggan,
sekiranya ada, yang bernilai RM10.00 (Ringgit Malaysia: Sepuluh) atau kurang,
dan tidak dituntut oleh Pelanggan dalam tempoh tuntutan yang ditetapkan oleh
Ar-Rahn setelah usaha munasabah telah diambil untuk memaklumkan kepada
Pelanggan.</b></td>
</tr>
<tr>
<td colspan="1"></td>
<td colspan="1"><b>7.</b></td>
<td colspan="2">
<b>
Pelanggan selanjutnya bersetuju bahawa baki hasil lelongan tersebut boleh
disalurkan oleh Ar-Rahn, bagi pihak Pelanggan, sebagai infaq kepada mana-mana
institusi agama Islam, badan kebajikan atau institusi lain yang diluluskan
oleh Jawatankuasa Syariah dan/atau pihak berkuasa yang berkaitan, tanpa
sebarang liabiliti ke atas Ar-Rahn selepas penyaluran tersebut dibuat dengan
jumlah tidak melebihi RM10.00.
</b>
<div style="margin-top: 8px;">
<span
style="
display: inline-block;
width: 13px;
height: 13px;
border: 1px solid #000;
margin-right: 6px;
vertical-align: middle;
"></span>
<b>Tandakan (✓) jika tidak bersetuju.</b>
</div>
</td>
</tr>
<tr>
<td colspan="1"></td>
<td colspan="1"><b>8.</b></td>
<td colspan="2"><b>Sekiranya Pelanggan mempunyai sebarang pertanyaan atau <td colspan="2"><b>Sekiranya Pelanggan mempunyai sebarang pertanyaan atau
aduan, Pelanggan boleh menghubungi KoPKB sebagaimana berikut:</b></td> aduan, Pelanggan boleh menghubungi KoPKB sebagaimana berikut:</b></td>
</tr> </tr>
@@ -1713,6 +1748,7 @@
{{-- MARHUN DETAIL SECTION --}} {{-- MARHUN DETAIL SECTION --}}
<div class="main-marhun"> <div class="main-marhun">
<table class="main-table text-center" style="width: 75%"> <table class="main-table text-center" style="width: 75%">
<tr> <tr>
<th>BIL</th> <th>BIL</th>
<th>JENIS MARHUN</th> <th>JENIS MARHUN</th>
@@ -1846,7 +1882,7 @@
</table> </table>
<table class="main-table text-center" style="border-top: none !important"> <table class="main-table text-center" style="border-top: none !important">
<tr> <tr>
<th colspan="5">JUMLAH KEUNTUNGAN DAN LAIN-LAIN CAJ BERDASARKAN TEMPOH PEMBIAYAAN</th> <th colspan="5">JUMLAH KEUNTUNGAN BERDASARKAN TEMPOH PEMBIAYAAN</th>
</tr> </tr>
<tr> <tr>
<th>TEMPOH PEMBIAYAAN</th> <th>TEMPOH PEMBIAYAAN</th>
@@ -1861,19 +1897,27 @@
<td>{{ $formatted_t_matang_1 }}</td> <td>{{ $formatted_t_matang_1 }}</td>
</tr> </tr>
<tr> <tr>
<th class="text-left">JUMLAH KEUNTUNGAN DAN LAIN-LAIN CAJ YANG PERLU DIBAYAR BULANAN</th> <th class="text-left">JUMLAH KEUNTUNGAN YANG PERLU DIBAYAR BULANAN</th>
<td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'] / 6, 2) }}</b></td> <td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'] / 6, 2) }}</b></td>
<td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</b></td> <td style="font-size:12px"><b>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</b></td>
<td>RM {{ number_format($gadai_detail['bakiupah'], 2) }}</td> <td>RM {{ number_format($gadai_detail['bakiupah'], 2) }}</td>
</tr> </tr>
<tr> <tr>
<th class="text-left">JUMLAH KEUNTUNGAN DAN LAIN-LAIN CAJ TERKUMPUL <br> SEPANJANG TEMPOH <th class="text-left">JUMLAH KEUNTUNGAN TERKUMPUL <br> SEPANJANG TEMPOH
PEMBIAYAAN</th> PEMBIAYAAN</th>
<td>-</td> <td>-</td>
<td>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</td> <td>RM{{ number_format($gadai_detail['bakiupah'], 2) }}</td>
<td>RM{{ number_format($gadai_detail['upah12'], 2) }}</td> <td>RM{{ number_format($gadai_detail['upah12'], 2) }}</td>
</tr> </tr>
</table> </table>
<div style="color: black; font-weight: bold; margin-top: 0px; width: 100%;">
<span>PENGURUSAN HASIL LELONGAN YANG TIDAK DITUNTUT</span>
<span>
<input type="checkbox" name="hasil_lelongan_tidak_dituntut">
</span>
</div>
{{-- SIGNATURE SECTION --}} {{-- SIGNATURE SECTION --}}
<table class="main-table mt-10"> <table class="main-table mt-10">
<tr> <tr>
@@ -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');