Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 71537d4deb | |||
| a555406b2b | |||
| 3c9b224ad2 | |||
| aa8647aad4 | |||
| e4d50e9e1c | |||
| 23408d327c | |||
| 59efddb005 | |||
| e1f17472eb |
@@ -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
@@ -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
|
||||
@@ -1,57 +0,0 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=staging
|
||||
APP_KEY=base64:O1XZDqK4H6+3GdrODgCaLr2l+OoWvgVhYr0GJ1KizW8=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://172.16.6.200:8091
|
||||
|
||||
HTTP_PORT=8091
|
||||
MYSQL_PUBLISH_PORT=3309
|
||||
|
||||
API_URL=http://172.16.6.200:8090
|
||||
API_URL_KOOP=http://172.16.6.200:8090
|
||||
API_URL_PKB=http://172.16.6.200:8090
|
||||
API_ARRAHNBID=http://lelong.test/api/
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=mysql
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=kaunter_erahn
|
||||
DB_USERNAME=kaunteruser
|
||||
DB_PASSWORD=password
|
||||
|
||||
BROADCAST_DRIVER=pusher
|
||||
CACHE_DRIVER=file
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
PUSHER_APP_ID=1132718
|
||||
PUSHER_APP_KEY=26b0ec2f297f94b7aa9b
|
||||
PUSHER_APP_SECRET=421b61fb5a8ecce477a6
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=smtp.mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS=null
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
|
||||
MYKAD_READER_PORT=8085
|
||||
MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED
|
||||
+8
-12
@@ -1,23 +1,19 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:O1XZDqK4H6+3GdrODgCaLr2l+OoWvgVhYr0GJ1KizW8=
|
||||
APP_KEY=base64:WRTHcFTq5YARKVdA8YDUzsh9Ue8vD63ivgZgXNNBiGo=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
# API_URL=http://api-annurv2.test
|
||||
API_URL=http://host.docker.internal:8080
|
||||
API_URL_KOOP=http://host.docker.internal:8080
|
||||
API_URL_PKB=http://host.docker.internal:8080
|
||||
API_ARRAHNBID=http://lelong.test/api/
|
||||
APP_URL=http://ujrahkopkb.erahn.com.my
|
||||
API_URL=http://apiujrah-kopkb.erahn.com.my
|
||||
#API_ARRAHNBID=http://lelong.test/api/
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=kaunter_erahn
|
||||
DB_USERNAME=kaunteruser
|
||||
DB_PASSWORD=password
|
||||
DB_USERNAME=spider
|
||||
DB_PASSWORD=G0dz!ll4
|
||||
|
||||
BROADCAST_DRIVER=pusher
|
||||
CACHE_DRIVER=file
|
||||
@@ -51,4 +47,4 @@ 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
|
||||
MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED
|
||||
@@ -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 .
|
||||
@@ -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"
|
||||
+1
-1
@@ -11,5 +11,5 @@ Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
/.vscode
|
||||
docker-compose.yml
|
||||
docker_src/
|
||||
**/.DS_Store
|
||||
@@ -1,51 +1 @@
|
||||
If you does't know what is this you probably in wrong project
|
||||
|
||||
```sql
|
||||
--- for all ip
|
||||
CREATE USER 'kaunteruser'@'%' IDENTIFIED BY 'your_password';
|
||||
|
||||
--- for specific ip
|
||||
CREATE USER 'kaunteruser'@'localhost' IDENTIFIED BY 'your_password';
|
||||
|
||||
GRANT ALL PRIVILEGES ON kaunter_erahn.* TO 'kaunteruser'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
# ADDITIONAL NOTE
|
||||
|
||||
## customers/v2/index.blade.php is modal to register customer
|
||||
|
||||
## Min Komoditi = RM5000
|
||||
|
||||
# System Flowchart
|
||||
|
||||
## Proses Gadaian
|
||||
1) Pelanggan datang bawa marhun
|
||||
2) Teller daftar maklumat pelanggan jika pelanggan baharu
|
||||
3) Serah marhun ke penilai untuk timbang
|
||||
4) Teller daftar marhun di sistem berdasarkan maklumat dari penilai
|
||||
5) Penilai print SAG dan serah marhun ke Khazanah (PC/PPC) - __khazanah can still scan still scan though__
|
||||
6) Khazanah scan barcode dekat SAG untuk masuk ke dalam peti besi
|
||||
* table involved - gadai.semakbarcode (default is blank, after is Lulus)
|
||||
7) DONE
|
||||
|
||||
## Setup new branch command:
|
||||
1. Duplicate previous branch table - use erahn_{{name}}
|
||||
```sql
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
SET SESSION group_concat_max_len = 1000000;
|
||||
|
||||
SELECT GROUP_CONCAT(
|
||||
CONCAT('TRUNCATE TABLE `', table_name, '`')
|
||||
SEPARATOR '; '
|
||||
) INTO @sql
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = DATABASE();
|
||||
|
||||
SELECT @sql; --- copy the output and paste it
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
```
|
||||
2. Add new cawangan kod on master_erahn.arrahn_master_db and and kaunter_erahn.cawangan
|
||||
3. Register new cawangan detail in erahn_{{name}}.cawangan
|
||||
@@ -1,27 +0,0 @@
|
||||
## CAWANGAN XTRA - X0301
|
||||
- WAN NUR FATIN NATASYA BINTI W M AZHARI - PENILAI
|
||||
- MOHAMAD KHAIRULNIZAN BIN JUSOF - TELLER
|
||||
- MOHAMAD AZUHAIDIE BIN AHMAD - PPC
|
||||
- WAN NURUL AMIRA BINTI WAN HARON - PC
|
||||
|
||||
## Akaun
|
||||
- admin@test.com
|
||||
- admin2@test.com
|
||||
|
||||
Module Gadai Online:
|
||||
- Langkah 1
|
||||
- Langkah 2
|
||||
[x] PC akan tekan submit, then customer akan masuk ke senarai online mengikut batch
|
||||
[x] PC boleh semak list customer yang pilih gadai online
|
||||
- Langkah 3 (Operasi)
|
||||
[x] dapat dalam bentuk list
|
||||
[x] Apa jadi kalau operasi reject? - patah balik ke pc, untuk pc buat semakan balik
|
||||
- Langkah 4
|
||||
- Langkah 5
|
||||
- Langkah 6
|
||||
- Langkah 7
|
||||
[x] Macam mana PC nak tahu pembayaran berjaya (Tally PAID page)
|
||||
[x] Kalau online, dia kena upload kat mana (Operasi: PAID + bukti)
|
||||
- Langkah 8
|
||||
[x] PC semak senarai pelanggan gadai tu tally atau tak
|
||||
[ ] PC tekan butang blast ke (tanda selesai ada; WhatsApp/SMS belum wire)
|
||||
+4
-67
@@ -1,83 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class Helper
|
||||
{
|
||||
|
||||
public static function formatNumber($amount)
|
||||
{
|
||||
return number_format($amount, 2, '.', ',');
|
||||
$formattedAmount = number_format($amount, 2, '.', ',');
|
||||
|
||||
return $formattedAmount;
|
||||
}
|
||||
|
||||
public static function formatDate($date_string)
|
||||
{
|
||||
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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,12 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\User;
|
||||
use App\Cawangan;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\CustomerService;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Carbon\Carbon;
|
||||
|
||||
|
||||
class AliranTunaiController extends Controller
|
||||
@@ -601,7 +599,7 @@ class AliranTunaiController extends Controller
|
||||
return response($updateTunai);
|
||||
}
|
||||
|
||||
public function LaporanAliranTunai($teller, Request $request)
|
||||
public function LaporanAliranTunai($teller)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$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_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();
|
||||
|
||||
$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'];
|
||||
|
||||
$bakiLelong = Http::withOptions(['verify' =>config('app.api_verify')])->get(config('api.url') . '/api/lelong/bakilelongbyteller/'.$auth_user['cawangan'],[
|
||||
'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'));
|
||||
return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','alirantunai','teller'));
|
||||
}
|
||||
|
||||
public function LaporanTunaiTeller(Request $request){
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\User;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ImpersonateController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
public function impersonate(Request $request, $id): RedirectResponse
|
||||
{
|
||||
Gate::authorize('impersonate');
|
||||
|
||||
$impersonator = $request->user();
|
||||
$id = (int) $id;
|
||||
$target = User::findOrFail($id);
|
||||
|
||||
if ($target->id === $request->user()->id) {
|
||||
return back()->with('error', 'Tidak boleh impersonate diri sendiri.');
|
||||
}
|
||||
|
||||
if (method_exists($target, 'canBeImpersonated') && !$target->canBeImpersonated()) {
|
||||
return back()->with('error', 'Akaun ini tidak boleh di-impersonate.');
|
||||
}
|
||||
|
||||
$request->user()->impersonate($target);
|
||||
|
||||
return redirect()->route('home');
|
||||
}
|
||||
|
||||
public function leave(Request $request): RedirectResponse
|
||||
{
|
||||
if ($request->user() && method_exists($request->user(), 'isImpersonated') && $request->user()->isImpersonated()) {
|
||||
$impersonated = $request->user();
|
||||
$impersonator = method_exists($impersonated, 'impersonator') ? $impersonated->impersonator() : null;
|
||||
|
||||
$request->user()->leaveImpersonation();
|
||||
}
|
||||
|
||||
return redirect()->route('home');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,9 @@ class LoginController extends Controller
|
||||
'password' => 'required|string',
|
||||
]);
|
||||
|
||||
if ($this->attemptWebLogin($request)) {
|
||||
$credentials = $request->only('email', 'password');
|
||||
|
||||
if (Auth::guard('web')->attempt($credentials)) {
|
||||
|
||||
$auth_user = Auth::guard('web')->user();
|
||||
$api_url = config('api.url');
|
||||
@@ -101,7 +103,9 @@ class LoginController extends Controller
|
||||
'password' => 'required|string',
|
||||
]);
|
||||
|
||||
if ($this->attemptDashboardLogin($request)) {
|
||||
$credentials = $request->only('email', 'password');
|
||||
|
||||
if (Auth::guard('dashboard')->attempt($credentials,true)) {
|
||||
$auth_user = Auth::guard('dashboard')->user();
|
||||
|
||||
$user_login['nama'] = $auth_user['name'];
|
||||
@@ -183,42 +187,4 @@ class LoginController extends Controller
|
||||
|
||||
return response()->json($kakitangan,200);
|
||||
}
|
||||
|
||||
/**
|
||||
* In local environment, log in by email only (password ignored).
|
||||
*/
|
||||
private function attemptWebLogin(Request $request): bool
|
||||
{
|
||||
if (app()->environment('local')) {
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if ($user) {
|
||||
Auth::guard('web')->login($user);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return Auth::guard('web')->attempt($request->only('email', 'password'));
|
||||
}
|
||||
|
||||
/**
|
||||
* In local environment, log in by email only (password ignored).
|
||||
*/
|
||||
private function attemptDashboardLogin(Request $request): bool
|
||||
{
|
||||
if (app()->environment('local')) {
|
||||
$user = Dashboard::where('email', $request->email)->first();
|
||||
if ($user) {
|
||||
Auth::guard('dashboard')->login($user, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return Auth::guard('dashboard')->attempt($request->only('email', 'password'), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,50 +211,13 @@ class GadaianController extends Controller
|
||||
'teller' => $auth_user['name']
|
||||
]);
|
||||
|
||||
$caraTerima = strtoupper((string) $request->input('cara_terima', 'TUNAI'));
|
||||
$pinjamanAmt = round((float) $request->pinjaman, 2);
|
||||
|
||||
// Online only for RM5k–50k; otherwise force cash path.
|
||||
if ($caraTerima === 'ONLINE' && ($pinjamanAmt < 5000 || $pinjamanAmt > 50000)) {
|
||||
$caraTerima = 'TUNAI';
|
||||
}
|
||||
|
||||
if ($caraTerima === 'ONLINE') {
|
||||
$online = Http::withOptions(['verify' => config('app.api_verify')])
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/' . $auth_user['cawangan'], [
|
||||
'norujukan' => $request->norujukan_gadai,
|
||||
'nokp' => $request->nokp,
|
||||
'pinjaman' => $pinjamanAmt,
|
||||
'kodbank' => $request->kodbank,
|
||||
'noakaun' => $request->noakaun,
|
||||
'nama_bank' => $request->nama_bank,
|
||||
'nama_akaun' => $request->nama_akaun ?: $request->nama_pelanggan,
|
||||
'nama_pelanggan' => $request->nama_pelanggan,
|
||||
'nopelanggan' => $request->nopelanggan,
|
||||
'created_by' => $auth_user['name'],
|
||||
'update_customer_bank' => true,
|
||||
]);
|
||||
|
||||
if (!$online->successful()) {
|
||||
$body = $online->json();
|
||||
$msg = is_array($body) && isset($body['message'])
|
||||
? $body['message']
|
||||
: 'Gagal daftar pembiayaan online. Sila cuba lagi.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
} else {
|
||||
$this->AliranTunaiController->alirantunaiGadai($request, $auth_user['name']);
|
||||
}
|
||||
$this->AliranTunaiController->alirantunaiGadai($request, $auth_user['name']);
|
||||
|
||||
event(new GadaiNotify('lulus', $auth_user['cawangan']));
|
||||
|
||||
$request->session()->forget('page_reload');
|
||||
$request->session()->forget('norujukan');
|
||||
$request->session()->flash('activate_tab', 'SAG_baru');
|
||||
if ($caraTerima === 'ONLINE') {
|
||||
$request->session()->flash('message', 'Gadai berjaya. Pembiayaan online menunggu semakan PC.');
|
||||
}
|
||||
|
||||
return redirect()->route('customer_info');
|
||||
}
|
||||
|
||||
@@ -505,9 +505,6 @@ class KhazanahController extends Controller
|
||||
|
||||
public function mintakatalaluansemula(Request $request)
|
||||
{
|
||||
if (app()->environment('local')) {
|
||||
return "True";
|
||||
}
|
||||
|
||||
if(Hash::check($request->passsemula, Auth::user()->password))
|
||||
{
|
||||
@@ -4420,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'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,15 +99,6 @@ class LelongController extends Controller
|
||||
public function transaksituntutbaki(Request $request){
|
||||
|
||||
$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();
|
||||
|
||||
if($lelong)
|
||||
@@ -115,18 +106,6 @@ class LelongController extends Controller
|
||||
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'], [
|
||||
'batchno' => $request->batchno,
|
||||
'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);
|
||||
|
||||
$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')
|
||||
{
|
||||
$bakiakhir -= $request->jumlah;
|
||||
|
||||
@@ -321,9 +321,6 @@ class OperasiController extends Controller
|
||||
|
||||
public function mintakatalaluansemula(Request $request)
|
||||
{
|
||||
if (app()->environment('local')) {
|
||||
return "True";
|
||||
}
|
||||
|
||||
if (Hash::check($request->passsemula, Auth::user()->password)) {
|
||||
return "True";
|
||||
|
||||
@@ -1,744 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class PembiayaanOnlineController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
protected function api()
|
||||
{
|
||||
return Http::withOptions(['verify' => config('app.api_verify')]);
|
||||
}
|
||||
|
||||
protected function kodcaw()
|
||||
{
|
||||
return Auth::user()->cawangan;
|
||||
}
|
||||
|
||||
/**
|
||||
* PC senarai queue + batch history.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$kodcaw = $this->kodcaw();
|
||||
$api_url = config('api.url');
|
||||
|
||||
$cawangan_info = $this->api()
|
||||
->get($api_url . '/api/cawangan/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$queue = $this->api()
|
||||
->get($api_url . '/api/pembiayaan-online/' . $kodcaw . '/queue')
|
||||
->json();
|
||||
|
||||
$batches = $this->api()
|
||||
->get($api_url . '/api/pembiayaan-online/' . $kodcaw . '/batches')
|
||||
->json();
|
||||
|
||||
$banks = $this->api()->get($api_url . '/api/bank')->json();
|
||||
if (!is_array($banks)) {
|
||||
$banks = [];
|
||||
}
|
||||
|
||||
$modal = $this->api()
|
||||
->get($api_url . '/api/modal-online/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$lines = $queue['data'] ?? [];
|
||||
$slot = $queue['slot_cadangan'] ?? null;
|
||||
if (!is_array($batches)) {
|
||||
$batches = [];
|
||||
}
|
||||
|
||||
return view('pembiayaan_online.pc.senarai', compact(
|
||||
'auth_user',
|
||||
'kodcaw',
|
||||
'api_url',
|
||||
'cawangan_info',
|
||||
'lines',
|
||||
'batches',
|
||||
'banks',
|
||||
'modal',
|
||||
'slot',
|
||||
'queue'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update bank/docs for a queue line.
|
||||
*/
|
||||
public function updateLine(Request $request, $id)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
$api_url = config('api.url');
|
||||
|
||||
$payload = [
|
||||
'kodbank' => $request->input('kodbank'),
|
||||
'noakaun' => $request->input('noakaun'),
|
||||
'nama_bank' => $request->input('nama_bank'),
|
||||
'nama_akaun' => $request->input('nama_akaun'),
|
||||
'nota' => $request->input('nota'),
|
||||
'update_customer_bank' => true,
|
||||
];
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->put($api_url . '/api/pembiayaan-online/' . $kodcaw . '/lines/' . $id, $payload);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal kemaskini rekod.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
return redirect()->route('pembiayaan.online.pc')->with('message', 'Rekod dikemaskini.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit selected lines as a batch to Operasi.
|
||||
*/
|
||||
public function submitBatch(Request $request)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
$api_url = config('api.url');
|
||||
$auth_user = Auth::user();
|
||||
|
||||
$ids = $request->input('ids', []);
|
||||
if (!is_array($ids)) {
|
||||
$ids = array_filter(explode(',', (string) $ids));
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post($api_url . '/api/pembiayaan-online/' . $kodcaw . '/batches/submit', [
|
||||
'ids' => $ids,
|
||||
'pc_submitted_by' => $auth_user['name'],
|
||||
'slot' => $request->input('slot'),
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal hantar batch.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
$batchNo = $res->json()['batch']['batch_no'] ?? '';
|
||||
return redirect()->route('pembiayaan.online.pc')
|
||||
->with('message', 'Batch dihantar ke Operasi' . ($batchNo ? ': ' . $batchNo : '.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch detail.
|
||||
*/
|
||||
public function showBatch($batchId)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
$api_url = config('api.url');
|
||||
|
||||
$cawangan_info = $this->api()
|
||||
->get($api_url . '/api/cawangan/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$detail = $this->api()
|
||||
->get($api_url . '/api/pembiayaan-online/' . $kodcaw . '/batches/' . $batchId)
|
||||
->json();
|
||||
|
||||
if (!is_array($detail) || empty($detail['batch'])) {
|
||||
return redirect()->route('pembiayaan.online.pc')->with('error', 'Batch tidak dijumpai.');
|
||||
}
|
||||
|
||||
return view('pembiayaan_online.pc.batch', [
|
||||
'batch' => $detail['batch'],
|
||||
'lines' => $detail['lines'] ?? [],
|
||||
'kodcaw' => $kodcaw,
|
||||
'api_url' => $api_url,
|
||||
'cawangan_info' => $cawangan_info,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* PC: senarai PAID untuk tally + blast.
|
||||
*/
|
||||
public function paidIndex(Request $request)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$kodcaw = $this->kodcaw();
|
||||
$api_url = config('api.url');
|
||||
$blastFilter = $request->input('blast_sent', '0');
|
||||
|
||||
$cawangan_info = $this->api()
|
||||
->get($api_url . '/api/cawangan/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$query = [];
|
||||
if ($blastFilter !== 'all' && $blastFilter !== '') {
|
||||
$query['blast_sent'] = $blastFilter;
|
||||
}
|
||||
|
||||
$paid = $this->api()
|
||||
->get($api_url . '/api/pembiayaan-online/' . $kodcaw . '/paid', $query)
|
||||
->json();
|
||||
|
||||
$lines = $paid['data'] ?? [];
|
||||
if (!is_array($lines)) {
|
||||
$lines = [];
|
||||
}
|
||||
|
||||
$bilangan = $paid['bilangan'] ?? count($lines);
|
||||
$jumlah = $paid['jumlah'] ?? 0;
|
||||
|
||||
return view('pembiayaan_online.pc.paid', compact(
|
||||
'auth_user',
|
||||
'kodcaw',
|
||||
'api_url',
|
||||
'cawangan_info',
|
||||
'lines',
|
||||
'bilangan',
|
||||
'jumlah',
|
||||
'blastFilter'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* PC: view/download bukti bayaran inline.
|
||||
*/
|
||||
public function viewBukti($id)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
$res = $this->api()
|
||||
->get(config('api.url') . '/api/pembiayaan-online/' . $kodcaw . '/lines/' . $id . '/bukti');
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Bukti tidak dijumpai.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
$payload = $res->json();
|
||||
$bukti = $payload['bukti'] ?? null;
|
||||
if (!$bukti || empty($bukti['data'])) {
|
||||
return redirect()->back()->with('error', 'Fail bukti kosong.');
|
||||
}
|
||||
|
||||
$raw = $bukti['data'];
|
||||
if (strpos($raw, 'base64,') !== false) {
|
||||
$raw = substr($raw, strpos($raw, 'base64,') + 7);
|
||||
}
|
||||
$binary = base64_decode($raw, true);
|
||||
if ($binary === false) {
|
||||
$binary = base64_decode($bukti['data']);
|
||||
}
|
||||
|
||||
$type = $bukti['type'] ?? 'application/octet-stream';
|
||||
$filename = $bukti['filename'] ?? ('bukti-' . $id);
|
||||
|
||||
return response($binary, 200, [
|
||||
'Content-Type' => $type,
|
||||
'Content-Disposition' => 'inline; filename="' . $filename . '"',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* PC: tanda rekod PAID sebagai selesai semak / blast.
|
||||
*/
|
||||
public function markBlast(Request $request)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
$ids = $request->input('ids', []);
|
||||
if (!is_array($ids)) {
|
||||
$ids = array_filter(explode(',', (string) $ids));
|
||||
}
|
||||
|
||||
if (count($ids) === 0) {
|
||||
return redirect()->back()->with('error', 'Sila pilih sekurang-kurangnya satu rekod.');
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/' . $kodcaw . '/paid/blast', [
|
||||
'ids' => $ids,
|
||||
'blast_by' => Auth::user()['name'],
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal tanda selesai.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
$n = $res->json()['dikemaskini'] ?? count($ids);
|
||||
return redirect()
|
||||
->route('pembiayaan.online.pc.paid')
|
||||
->with('message', $n . ' rekod ditanda selesai semak/blast.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Operasi: senarai batch semua cawangan.
|
||||
*/
|
||||
public function operasiIndex(Request $request)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$api_url = config('api.url');
|
||||
$status = $request->input('status', 'SUBMITTED');
|
||||
$tarikh = $request->input('tarikh');
|
||||
|
||||
$query = ['status' => $status];
|
||||
if ($tarikh) {
|
||||
$query['tarikh'] = $tarikh;
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->get($api_url . '/api/pembiayaan-online/operasi/batches', $query)
|
||||
->json();
|
||||
|
||||
$batches = $res['data'] ?? [];
|
||||
if (!is_array($batches)) {
|
||||
$batches = [];
|
||||
}
|
||||
|
||||
return view('pembiayaan_online.operasi.senarai', compact(
|
||||
'auth_user',
|
||||
'api_url',
|
||||
'batches',
|
||||
'status',
|
||||
'tarikh'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Operasi: detail batch + lines.
|
||||
*/
|
||||
public function operasiShowBatch($kodcaw, $batchId)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$api_url = config('api.url');
|
||||
|
||||
$cawangan_info = $this->api()
|
||||
->get($api_url . '/api/cawangan/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$detail = $this->api()
|
||||
->get($api_url . '/api/pembiayaan-online/operasi/' . $kodcaw . '/batches/' . $batchId)
|
||||
->json();
|
||||
|
||||
if (!is_array($detail) || empty($detail['batch'])) {
|
||||
return redirect()
|
||||
->route('pembiayaan.online.operasi')
|
||||
->with('error', 'Batch tidak dijumpai.');
|
||||
}
|
||||
|
||||
return view('pembiayaan_online.operasi.batch', [
|
||||
'auth_user' => $auth_user,
|
||||
'batch' => $detail['batch'],
|
||||
'lines' => $detail['lines'] ?? [],
|
||||
'kodcaw' => $kodcaw,
|
||||
'api_url' => $api_url,
|
||||
'cawangan_info' => $cawangan_info,
|
||||
]);
|
||||
}
|
||||
|
||||
public function operasiApproveLine(Request $request, $kodcaw, $id)
|
||||
{
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/operasi/' . $kodcaw . '/lines/' . $id . '/approve', [
|
||||
'ops_by' => Auth::user()['name'],
|
||||
]);
|
||||
|
||||
return $this->opsRedirect($res, $kodcaw, $request->input('batch_id'), 'Rekod diluluskan.');
|
||||
}
|
||||
|
||||
public function operasiRejectLine(Request $request, $kodcaw, $id)
|
||||
{
|
||||
$reason = trim((string) $request->input('reject_reason', ''));
|
||||
if ($reason === '') {
|
||||
return redirect()->back()->with('error', 'Sebab tolak diperlukan.');
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/operasi/' . $kodcaw . '/lines/' . $id . '/reject', [
|
||||
'ops_by' => Auth::user()['name'],
|
||||
'reject_reason' => $reason,
|
||||
]);
|
||||
|
||||
return $this->opsRedirect($res, $kodcaw, $request->input('batch_id'), 'Rekod ditolak. Dikembalikan ke PC.');
|
||||
}
|
||||
|
||||
public function operasiApproveBatch(Request $request, $kodcaw, $batchId)
|
||||
{
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/operasi/' . $kodcaw . '/batches/' . $batchId . '/approve', [
|
||||
'ops_by' => Auth::user()['name'],
|
||||
]);
|
||||
|
||||
return $this->opsRedirect($res, $kodcaw, $batchId, 'Semua rekod menunggu dalam batch diluluskan.');
|
||||
}
|
||||
|
||||
public function operasiMarkPaid(Request $request, $kodcaw, $id)
|
||||
{
|
||||
$payload = $this->buildPaidPayload($request);
|
||||
if (isset($payload['error'])) {
|
||||
return redirect()->back()->with('error', $payload['error']);
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/operasi/' . $kodcaw . '/lines/' . $id . '/paid', $payload);
|
||||
|
||||
return $this->opsRedirect($res, $kodcaw, $request->input('batch_id'), 'Rekod ditanda PAID.');
|
||||
}
|
||||
|
||||
public function operasiMarkPaidBatch(Request $request, $kodcaw, $batchId)
|
||||
{
|
||||
$payload = $this->buildPaidPayload($request);
|
||||
if (isset($payload['error'])) {
|
||||
return redirect()->back()->with('error', $payload['error']);
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/pembiayaan-online/operasi/' . $kodcaw . '/batches/' . $batchId . '/paid', $payload);
|
||||
|
||||
return $this->opsRedirect($res, $kodcaw, $batchId, 'Rekod APPROVED dalam batch ditanda PAID.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function buildPaidPayload(Request $request)
|
||||
{
|
||||
$noRujukan = trim((string) $request->input('no_rujukan_bayaran', ''));
|
||||
if ($noRujukan === '') {
|
||||
return ['error' => 'No. rujukan bayaran diperlukan.'];
|
||||
}
|
||||
|
||||
if (!$request->hasFile('bukti')) {
|
||||
return ['error' => 'Fail bukti bayaran diperlukan.'];
|
||||
}
|
||||
|
||||
$file = $request->file('bukti');
|
||||
if (!$file->isValid()) {
|
||||
return ['error' => 'Fail bukti tidak sah.'];
|
||||
}
|
||||
|
||||
$raw = base64_encode(file_get_contents($file->getRealPath()));
|
||||
$mime = $file->getMimeType() ?: 'application/octet-stream';
|
||||
|
||||
return [
|
||||
'ops_by' => Auth::user()['name'],
|
||||
'no_rujukan_bayaran' => $noRujukan,
|
||||
'tarikh_bayaran' => $request->input('tarikh_bayaran') ?: date('Y-m-d'),
|
||||
'bukti_data' => $raw,
|
||||
'bukti_filename' => $file->getClientOriginalName(),
|
||||
'bukti_type' => $mime,
|
||||
];
|
||||
}
|
||||
|
||||
protected function opsRedirect($res, $kodcaw, $batchId, $successMsg)
|
||||
{
|
||||
$batchId = $batchId ?: null;
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Tindakan gagal.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
if ($batchId) {
|
||||
return redirect()
|
||||
->route('pembiayaan.online.operasi.batch', ['kodcaw' => $kodcaw, 'batchId' => $batchId])
|
||||
->with('message', $successMsg);
|
||||
}
|
||||
|
||||
return redirect()->route('pembiayaan.online.operasi')->with('message', $successMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* PC: modal online float + top-up request form/history.
|
||||
*/
|
||||
public function topupIndex(Request $request)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$kodcaw = $this->kodcaw();
|
||||
$api_url = config('api.url');
|
||||
$status = $request->input('status', '');
|
||||
|
||||
$cawangan_info = $this->api()
|
||||
->get($api_url . '/api/cawangan/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$modal = $this->api()
|
||||
->get($api_url . '/api/modal-online/' . $kodcaw)
|
||||
->json();
|
||||
|
||||
$query = [];
|
||||
if ($status !== '' && $status !== 'all') {
|
||||
$query['status'] = $status;
|
||||
}
|
||||
|
||||
$reqRes = $this->api()
|
||||
->get($api_url . '/api/modal-online/' . $kodcaw . '/topup/requests', $query)
|
||||
->json();
|
||||
|
||||
$requests = $reqRes['data'] ?? [];
|
||||
if (!is_array($requests)) {
|
||||
$requests = [];
|
||||
}
|
||||
|
||||
$pendingRes = $this->api()
|
||||
->get($api_url . '/api/modal-online/' . $kodcaw . '/topup/requests', ['status' => 'PENDING'])
|
||||
->json();
|
||||
$pendingList = $pendingRes['data'] ?? [];
|
||||
$hasPending = is_array($pendingList) && count($pendingList) > 0;
|
||||
$isMissing = !empty($modal['missing']);
|
||||
$pendingRequest = $modal['pending_request'] ?? null;
|
||||
if (!$pendingRequest && $hasPending) {
|
||||
$pendingRequest = $pendingList[0];
|
||||
}
|
||||
|
||||
return view('pembiayaan_online.pc.topup', compact(
|
||||
'auth_user',
|
||||
'kodcaw',
|
||||
'api_url',
|
||||
'cawangan_info',
|
||||
'modal',
|
||||
'requests',
|
||||
'status',
|
||||
'hasPending',
|
||||
'isMissing',
|
||||
'pendingRequest'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* PC: submit top-up request.
|
||||
*/
|
||||
public function topupRequest(Request $request)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
$amaun = (float) $request->input('amaun', 0);
|
||||
|
||||
if ($amaun <= 0) {
|
||||
return redirect()->back()->with('error', 'Amaun mesti lebih daripada 0.');
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/modal-online/' . $kodcaw . '/topup/request', [
|
||||
'amaun' => $amaun,
|
||||
'dimohon_oleh' => Auth::user()['name'],
|
||||
'nota' => $request->input('nota'),
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal hantar permohonan.';
|
||||
return redirect()->back()->with('error', $msg)->withInput();
|
||||
}
|
||||
|
||||
return redirect()
|
||||
->route('pembiayaan.online.pc.topup')
|
||||
->with('message', 'Permohonan modal online dihantar. Menunggu kelulusan Operasi.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Operasi: senarai permohonan tambah modal online.
|
||||
*/
|
||||
public function operasiTopupIndex(Request $request)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$api_url = config('api.url');
|
||||
$status = $request->input('status', 'PENDING');
|
||||
$tarikh = $request->input('tarikh');
|
||||
|
||||
$query = [];
|
||||
if ($status === 'all') {
|
||||
$query['status'] = 'all';
|
||||
} elseif ($status !== '' && $status !== null) {
|
||||
$query['status'] = $status;
|
||||
} else {
|
||||
$query['status'] = 'PENDING';
|
||||
}
|
||||
if ($tarikh) {
|
||||
$query['tarikh'] = $tarikh;
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->get($api_url . '/api/modal-online/operasi/topup/requests', $query)
|
||||
->json();
|
||||
|
||||
$requests = $res['data'] ?? [];
|
||||
if (!is_array($requests)) {
|
||||
$requests = [];
|
||||
}
|
||||
|
||||
return view('pembiayaan_online.operasi.topup', compact(
|
||||
'auth_user',
|
||||
'api_url',
|
||||
'requests',
|
||||
'status',
|
||||
'tarikh'
|
||||
));
|
||||
}
|
||||
|
||||
public function operasiTopupApprove(Request $request, $id)
|
||||
{
|
||||
$amaun = $request->input('amaun');
|
||||
if ($amaun !== null && $amaun !== '' && (float) $amaun <= 0) {
|
||||
return redirect()->back()->with('error', 'Amaun diluluskan mesti lebih daripada 0.');
|
||||
}
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/modal-online/operasi/topup/' . $id . '/approve', [
|
||||
'diluluskan_oleh' => Auth::user()['name'],
|
||||
'nota' => $request->input('nota'),
|
||||
'amaun' => $amaun,
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal lulus permohonan.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
$amaunLulus = $res->json()['request']['amaun'] ?? $amaun;
|
||||
return redirect()
|
||||
->route('pembiayaan.online.operasi.topup')
|
||||
->with('message', 'Permohonan diluluskan RM ' . number_format((float) $amaunLulus, 2) . '. Modal online cawangan dikemas kini.');
|
||||
}
|
||||
|
||||
public function operasiTopupReject(Request $request, $id)
|
||||
{
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/modal-online/operasi/topup/' . $id . '/reject', [
|
||||
'diluluskan_oleh' => Auth::user()['name'],
|
||||
'nota' => $request->input('nota'),
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal tolak permohonan.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
return redirect()
|
||||
->route('pembiayaan.online.operasi.topup')
|
||||
->with('message', 'Permohonan ditolak.');
|
||||
}
|
||||
|
||||
/**
|
||||
* PC: EOD close branch modal online.
|
||||
*/
|
||||
public function closeModal(Request $request)
|
||||
{
|
||||
$kodcaw = $this->kodcaw();
|
||||
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/modal-online/' . $kodcaw . '/close', [
|
||||
'ditutup_oleh' => Auth::user()['name'],
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal tutup modal online.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
$dikembalikan = $res->json()['dikembalikan'] ?? 0;
|
||||
return redirect()
|
||||
->route('pembiayaan.online.pc.topup')
|
||||
->with('message', 'Modal online ditutup. Baki dikembalikan RM ' . number_format((float) $dikembalikan, 2) . '.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Operasi: EOD dashboard semua cawangan.
|
||||
*/
|
||||
public function operasiEodIndex(Request $request)
|
||||
{
|
||||
$auth_user = Auth::user();
|
||||
$api_url = config('api.url');
|
||||
$tarikh = $request->input('tarikh') ?: date('Y-m-d');
|
||||
|
||||
$res = $this->api()
|
||||
->get($api_url . '/api/modal-online/operasi/eod', [
|
||||
'zone' => 'all',
|
||||
'tarikh' => $tarikh,
|
||||
])
|
||||
->json();
|
||||
|
||||
$rows = $res['data'] ?? [];
|
||||
if (!is_array($rows)) {
|
||||
$rows = [];
|
||||
}
|
||||
|
||||
$summary = [
|
||||
'open' => $res['open'] ?? 0,
|
||||
'closed' => $res['closed'] ?? 0,
|
||||
'missing' => $res['missing'] ?? 0,
|
||||
'bilangan' => $res['bilangan'] ?? count($rows),
|
||||
];
|
||||
|
||||
return view('pembiayaan_online.operasi.eod', compact(
|
||||
'auth_user',
|
||||
'api_url',
|
||||
'rows',
|
||||
'tarikh',
|
||||
'summary'
|
||||
));
|
||||
}
|
||||
|
||||
public function operasiCloseModal(Request $request, $kodcaw)
|
||||
{
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/modal-online/' . $kodcaw . '/close', [
|
||||
'ditutup_oleh' => Auth::user()['name'],
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal tutup modal online.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
return redirect()
|
||||
->route('pembiayaan.online.operasi.eod')
|
||||
->with('message', 'Modal online ' . $kodcaw . ' ditutup.');
|
||||
}
|
||||
|
||||
public function operasiCloseAllModal(Request $request)
|
||||
{
|
||||
$res = $this->api()
|
||||
->asForm()
|
||||
->post(config('api.url') . '/api/modal-online/operasi/eod/close-all', [
|
||||
'ditutup_oleh' => Auth::user()['name'],
|
||||
'zone' => 'all',
|
||||
]);
|
||||
|
||||
if (!$res->successful()) {
|
||||
$body = $res->json();
|
||||
$msg = is_array($body) && isset($body['message']) ? $body['message'] : 'Gagal tutup semua modal online.';
|
||||
return redirect()->back()->with('error', $msg);
|
||||
}
|
||||
|
||||
$closed = $res->json()['closed'] ?? 0;
|
||||
$skipped = $res->json()['skipped'] ?? 0;
|
||||
return redirect()
|
||||
->route('pembiayaan.online.operasi.eod')
|
||||
->with('message', 'EOD selesai: ' . $closed . ' ditutup, ' . $skipped . ' sudah ditutup.');
|
||||
}
|
||||
}
|
||||
@@ -46,10 +46,7 @@ class PenebusanController extends Controller
|
||||
$nilaihargasemasa = $this->tukaranhargaemas($norujukan);
|
||||
|
||||
$pertambahpinjaman = 0.80;
|
||||
|
||||
$pampasan = $this->getPampasanByNorujukan($norujukan);
|
||||
|
||||
return view('penebusan.' . $cawangan_info['version'] . '.index',compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa','pertambahpinjaman', 'pampasan'));
|
||||
return view('penebusan.' . $cawangan_info['version'] . '.index',compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa','pertambahpinjaman'));
|
||||
}
|
||||
|
||||
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'));
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -72,6 +72,5 @@ class Kernel extends HttpKernel
|
||||
'admin' => 'App\Http\Middleware\Admin',
|
||||
'audit' => 'App\Http\Middleware\Audit',
|
||||
'masteradmin' => 'App\Http\Middleware\Masteradmin',
|
||||
'role' => 'App\Http\Middleware\RoleAccess',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -25,8 +25,6 @@ class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
$this->registerPolicies();
|
||||
|
||||
Gate::define('impersonate', function ($user) {
|
||||
return $user->canImpersonate();
|
||||
});
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,9 @@ use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Lab404\Impersonate\Models\Impersonate;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use Impersonate;
|
||||
use Notifiable;
|
||||
|
||||
protected $guard = 'web';
|
||||
@@ -45,14 +43,4 @@ class User extends Authenticatable
|
||||
{
|
||||
return $this->hasOne(Cawangan::class, 'kodcaw', 'cawangan');
|
||||
}
|
||||
|
||||
public function canImpersonate(): bool
|
||||
{
|
||||
return in_array($this->roles ?? '', ['admin'], true);
|
||||
}
|
||||
|
||||
public function canBeImpersonated(): bool
|
||||
{
|
||||
return ($this->roles ?? '') !== 'admin';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!function_exists('api_url_for_browser')) {
|
||||
/**
|
||||
* Base URL for JavaScript in the browser, derived from API_URL (config api.url).
|
||||
* Docker dev often uses host.docker.internal for PHP→host; browsers may not resolve it.
|
||||
* Same host-mapped port is reachable at 127.0.0.1. Production URLs are unchanged.
|
||||
*/
|
||||
function api_url_for_browser(): string
|
||||
{
|
||||
$url = rtrim((string) config('api.url'), '/');
|
||||
|
||||
return str_ireplace('host.docker.internal', '127.0.0.1', $url);
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@
|
||||
"fruitcake/laravel-cors": "^2.0",
|
||||
"guzzlehttp/guzzle": "^6.3",
|
||||
"jeroennoten/laravel-adminlte": "^3.5",
|
||||
"lab404/laravel-impersonate": "^1.7",
|
||||
"laravel/framework": "^7.24",
|
||||
"laravel/tinker": "^2.0",
|
||||
"laravel/ui": "^2.4",
|
||||
@@ -52,9 +51,6 @@
|
||||
"classmap": [
|
||||
"database/seeds",
|
||||
"database/factories"
|
||||
],
|
||||
"files": [
|
||||
"app/helpers.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
|
||||
Generated
+4
-71
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "fa66321247398a94dc8b7f8099bb184e",
|
||||
"content-hash": "bfd66ab0246126c4f2cc7bbeeacca4ec",
|
||||
"packages": [
|
||||
{
|
||||
"name": "almasaeed2010/adminlte",
|
||||
@@ -1293,73 +1293,6 @@
|
||||
},
|
||||
"time": "2022-05-18T14:12:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "lab404/laravel-impersonate",
|
||||
"version": "1.7.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/404labfr/laravel-impersonate.git",
|
||||
"reference": "0008a39da8914cc946b6a5ed211230708ee736b3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/404labfr/laravel-impersonate/zipball/0008a39da8914cc946b6a5ed211230708ee736b3",
|
||||
"reference": "0008a39da8914cc946b6a5ed211230708ee736b3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0",
|
||||
"php": "^7.2 | ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.3.3",
|
||||
"orchestra/testbench": "^4.0 | ^5.0 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0",
|
||||
"phpunit/phpunit": "^7.5 | ^8.0 | ^9.0 | ^10.0 | ^11.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Lab404\\Impersonate\\ImpersonateServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Lab404\\Impersonate\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Marceau Casals",
|
||||
"email": "marceau@casals.fr"
|
||||
}
|
||||
],
|
||||
"description": "Laravel Impersonate is a plugin that allows to you to authenticate as your users.",
|
||||
"keywords": [
|
||||
"auth",
|
||||
"impersonate",
|
||||
"impersonation",
|
||||
"laravel",
|
||||
"laravel-package",
|
||||
"laravel-plugin",
|
||||
"package",
|
||||
"plugin",
|
||||
"user"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/404labfr/laravel-impersonate/issues",
|
||||
"source": "https://github.com/404labfr/laravel-impersonate/tree/1.7.8"
|
||||
},
|
||||
"time": "2026-03-17T15:24:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v7.30.6",
|
||||
@@ -9080,12 +9013,12 @@
|
||||
],
|
||||
"aliases": [],
|
||||
"minimum-stability": "dev",
|
||||
"stability-flags": {},
|
||||
"stability-flags": [],
|
||||
"prefer-stable": true,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": "^7.2.5"
|
||||
},
|
||||
"platform-dev": {},
|
||||
"plugin-api-version": "2.9.0"
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
return [
|
||||
'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'),
|
||||
];
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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 "$@"
|
||||
@@ -1,4 +0,0 @@
|
||||
memory_limit=512M
|
||||
upload_max_filesize=50M
|
||||
post_max_size=50M
|
||||
max_execution_time=120
|
||||
@@ -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 |
Vendored
-30
@@ -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',
|
||||
});
|
||||
Vendored
+3
-3
@@ -35,7 +35,7 @@ window.Pusher = require('pusher-js');
|
||||
|
||||
window.Echo = new Echo({
|
||||
broadcaster: 'pusher',
|
||||
key: process.env.MIX_PUSHER_APP_KEY,
|
||||
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||
forceTLS: false
|
||||
key: '26b0ec2f297f94b7aa9b',
|
||||
cluster: 'ap1',
|
||||
forceTLS: true
|
||||
});
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var search = "<?php echo $search ?>";
|
||||
var type_id = "<?php echo $idtype ?>";
|
||||
$(document).ready(function(){
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var ppc = "{{ Auth::user()->name }}";
|
||||
var ic_asal = "{{ $customer_info['kpbaru'] != null ? $customer_info['kpbaru'] : $customer_info['kplama'] }}"
|
||||
|
||||
|
||||
@@ -48,6 +48,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
</script>
|
||||
@endsection
|
||||
@@ -26,7 +26,7 @@
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
@php $auth_user = Auth::user();@endphp
|
||||
<input type="hidden" id="api" value="{{ api_url_for_browser() }}"/>
|
||||
<input type="hidden" id="api" value="{{ $api_url }}"/>
|
||||
<div class="col-md-12">
|
||||
|
||||
|
||||
@@ -348,7 +348,7 @@
|
||||
</div>
|
||||
<script>
|
||||
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tableaddtunai = $('#tableaddtunai').DataTable({
|
||||
@@ -558,10 +558,14 @@
|
||||
|
||||
function cetaklaporanalirantunai()
|
||||
{
|
||||
let urlroute = '{{ route("laporan.alirantunai") }}';
|
||||
window.location.href = api_url + urlroute;
|
||||
}
|
||||
let teller = "{{ Auth::user()->name }}";
|
||||
|
||||
let urlroute = '{{ route("laporan.alirantunai", ":id") }}';
|
||||
urlroute = urlroute.replace(':id', teller);
|
||||
|
||||
window.open(urlroute, '_blank');
|
||||
|
||||
}
|
||||
|
||||
function cetakserahankeseluruhan()
|
||||
{
|
||||
|
||||
@@ -1,298 +1,211 @@
|
||||
<style>
|
||||
#header {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
<html>
|
||||
<head>
|
||||
<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 {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin-left:40px;
|
||||
}
|
||||
|
||||
#header td, #customer 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;
|
||||
}
|
||||
|
||||
.statements{
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 95%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.statements th{
|
||||
font-size:14px;
|
||||
background-color: #f9ca24;
|
||||
border:1px solid gray;
|
||||
color:black;
|
||||
padding:4px 10px 4px 10px;
|
||||
}
|
||||
|
||||
.statements td{
|
||||
border:1px solid gray;
|
||||
padding:4px 4px 4px 4px;
|
||||
|
||||
}
|
||||
|
||||
.center{
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
color: white;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body onload="window.print()">
|
||||
<page size="A4">
|
||||
<h6 class="header">SULIT DAN PERSENDIRIAN</h6>
|
||||
<table id="header">
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ $cawangan_detail['namacaw'] }}</td>
|
||||
<td></td>
|
||||
</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>
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
<table class="statements">
|
||||
<tr>
|
||||
<th>TARIKH</th>
|
||||
<th>DEBIT (RM)</th>
|
||||
<th>KREDIT (RM)</th>
|
||||
<th>NOTA</th>
|
||||
</tr>
|
||||
@php $totaltambah = 0; $totalkurang = 0; @endphp
|
||||
@foreach($addtunai as $index=>$ad)
|
||||
@php $totaltambah += $ad['tambah']; $totalkurang += $ad['kurang']; @endphp
|
||||
<tr style="text-align:center;">
|
||||
<td>{{ $ad['tarikh'] }}</td>
|
||||
<td>{{ number_format($ad['tambah'],2) }}</td>
|
||||
<td>{{ number_format($ad['kurang'],2) }}</td>
|
||||
<td>{{ $ad['nota'] }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<tr style="text-align:center;">
|
||||
<td style="font-weight:bold;">JUMLAH</td>
|
||||
<td>{{ number_format($totaltambah,2) }}</td>
|
||||
<td>{{ number_format($totalkurang,2) }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</page>
|
||||
|
||||
<script>
|
||||
|
||||
#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: 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;
|
||||
}
|
||||
|
||||
#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>
|
||||
|
||||
|
||||
<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>{{ $cawangan_detail['namacaw'] }}</td>
|
||||
<td></td>
|
||||
</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="3" style="
|
||||
text-align: left;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
letter-spacing: 0.5px;
|
||||
">
|
||||
LAPORAN ALIRAN TUNAI TELLER
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td style="width:100px"><b>TARIKH:</b></td>
|
||||
<td><b>
|
||||
@php
|
||||
$tarikhTeller = DateTime::createFromFormat('Y-m-d', $tunai['tarikh']);
|
||||
echo $tarikhTeller->format('d-m-Y');
|
||||
@endphp
|
||||
</b></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><b>TARIKH CETAK:</b></td>
|
||||
<td><b>
|
||||
@php
|
||||
$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>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -228,7 +228,7 @@
|
||||
|
||||
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "{{ $api_url }}";
|
||||
// var kodcaw = "{{ $kodcaw }}";
|
||||
// var notisid = "{{ $notisid }}";
|
||||
//var nokp = "{{ $noic }}";
|
||||
|
||||
@@ -389,7 +389,7 @@
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var search = "<?php echo $search ?>";
|
||||
var type_id = "<?php echo $idtype ?>";
|
||||
$(document).ready(function(){
|
||||
|
||||
@@ -387,7 +387,7 @@
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var search = "<?php echo $search ?>";
|
||||
var type_id = "<?php echo $idtype ?>";
|
||||
$(document).ready(function(){
|
||||
|
||||
@@ -413,7 +413,7 @@
|
||||
|
||||
<script>
|
||||
var api_arrahnbid = "<?php echo config('app.api_arrahnbid') ?>";
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "{{ $cawangan_info['kodcaw'] }}";
|
||||
var tagarrahnbid = "{{ $cawangan_info['tagarrahnbid'] }}";
|
||||
|
||||
|
||||
@@ -1099,7 +1099,7 @@
|
||||
|
||||
|
||||
let pertambahpinjaman = "{{ $pertambahpinjaman }}";
|
||||
var api = "{{ api_url_for_browser() }}";
|
||||
var api = '<?php echo $api_url ?>';
|
||||
let nw = 0;
|
||||
let jenisAT = 'none';
|
||||
|
||||
|
||||
@@ -542,7 +542,7 @@
|
||||
|
||||
<script>
|
||||
var api_arrahnbid = "<?php echo config('app.api_arrahnbid') ?>";
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "{{ $cawangan_info['kodcaw'] }}";
|
||||
var tagarrahnbid = "{{ $cawangan_info['tagarrahnbid'] }}";
|
||||
|
||||
|
||||
@@ -473,7 +473,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var search = "<?php echo $search ?>";
|
||||
var type_id = "<?php echo $idtype ?>";
|
||||
var blacklist_search = "<?php echo $blacklist_search ?>";
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
|
||||
<script>
|
||||
var api_arrahnbid = "<?php echo config('app.api_arrahnbid') ?>";
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "{{ $cawangan_info['kodcaw'] }}";
|
||||
var tagarrahnbid = "{{ $cawangan_info['tagarrahnbid'] }}";
|
||||
var min_komoditi = "{{ $min_komoditi }}";
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
|
||||
</div>
|
||||
<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
|
||||
<div class="row form-group">
|
||||
<div class="col-md-6">
|
||||
@@ -373,7 +373,7 @@
|
||||
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
|
||||
</div>
|
||||
<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
|
||||
<div class="row form-group">
|
||||
<div class="col-md-6">
|
||||
@@ -495,14 +495,15 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var api_url = @json($api_url ?? '');
|
||||
var search = @json($search ?? false);
|
||||
var type_id = @json($idtype ?? '');
|
||||
var isAnggota = @json($isAnggota ?? false);
|
||||
var isPelanggan = @json($isPelanggan ?? false);
|
||||
var blacklist_search = @json($blacklist_search ?? false);
|
||||
var showAssignAnggotaBtn = @json($showAssignAnggotaBtn ?? false);
|
||||
var showDaftarPelangganBtn = @json($showDaftarPelangganBtn ?? false);
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var search = "<?php echo $search ?>";
|
||||
var type_id = "<?php echo $idtype ?>";
|
||||
var blacklist_search = "<?php echo $blacklist_search ?>";
|
||||
|
||||
$(document).ready(function(){
|
||||
// Datepicker
|
||||
$('#passport_tarikh_lahir').datepicker({
|
||||
@@ -524,38 +525,36 @@
|
||||
});
|
||||
|
||||
// Logik amaran SweetAlert
|
||||
if("{{ auth()->user()->cawangan }}" == 'X0301'){
|
||||
if (search === true) {
|
||||
if (blacklist_search === true) {
|
||||
Swal.fire({
|
||||
icon: 'warning',
|
||||
title: 'Amaran!',
|
||||
text: 'Pelanggan telah disenarai hitamkan dari Pembiayaan.'
|
||||
});
|
||||
}
|
||||
else if (isAnggota && !isPelanggan) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Anggota Belum Didaftarkan!',
|
||||
text: 'Pelanggan ini adalah anggota koperasi tetapi belum berdaftar sebagai pelanggan.'
|
||||
});
|
||||
}
|
||||
else if (isPelanggan && !isAnggota) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Pelanggan Bukan Anggota!',
|
||||
text: 'Pelanggan ini berdaftar tetapi belum menjadi anggota koperasi.'
|
||||
});
|
||||
}
|
||||
else if (!isAnggota && !isPelanggan) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Pelanggan Tiada Dalam Rekod!',
|
||||
text: 'Sila Daftar Pelanggan.'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
if (search === true) {
|
||||
if (blacklist_search === true) {
|
||||
Swal.fire({
|
||||
icon: 'warning',
|
||||
title: 'Amaran!',
|
||||
text: 'Pelanggan telah disenarai hitamkan dari Pembiayaan.'
|
||||
});
|
||||
}
|
||||
else if (isAnggota && !isPelanggan) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Anggota Belum Didaftarkan!',
|
||||
text: 'Pelanggan ini adalah anggota koperasi tetapi belum berdaftar sebagai pelanggan.'
|
||||
});
|
||||
}
|
||||
else if (isPelanggan && !isAnggota) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Pelanggan Bukan Anggota!',
|
||||
text: 'Pelanggan ini berdaftar tetapi belum menjadi anggota koperasi.'
|
||||
});
|
||||
}
|
||||
else if (!isAnggota && !isPelanggan) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Pelanggan Tiada Dalam Rekod!',
|
||||
text: 'Sila Daftar Pelanggan.'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -1393,21 +1392,6 @@
|
||||
$('#pekerjaan-lain').val('');
|
||||
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>
|
||||
@push('additional_scripts')
|
||||
|
||||
@@ -75,7 +75,8 @@
|
||||
->json();
|
||||
@endphp
|
||||
<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>
|
||||
|
||||
@@ -157,7 +158,7 @@
|
||||
|
||||
|
||||
<!-- Butang Assign Sebagai Anggota -->
|
||||
@if (isset($showAssignAnggotaBtn) && $showAssignAnggotaBtn && auth()->user()->cawangan == 'X0301')
|
||||
@if (isset($showAssignAnggotaBtn) && $showAssignAnggotaBtn)
|
||||
<div class="m-0 p-2">
|
||||
<button type="button" class="btn btn-success d-flex align-items-center"
|
||||
data-noic="{{ $noic }}" onclick="assignAnggota(this)">
|
||||
@@ -230,6 +231,7 @@
|
||||
|
||||
// 4️⃣ Hantar permohonan ke backend (Laravel)
|
||||
const response = await fetch("{{ route('operasi.createkelulusan-anggota') }}", {
|
||||
|
||||
method: 'POST',
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
@@ -237,14 +239,15 @@
|
||||
},
|
||||
body: JSON.stringify({
|
||||
mohon: "Assign Anggota",
|
||||
nokp: noic,
|
||||
noic: noic,
|
||||
norujukan: norujukan,
|
||||
komen: komen,
|
||||
teller: "{{ Auth::user()->name }}",
|
||||
tagoperasi: 1 // 1 = tunggu kelulusan operasi
|
||||
})
|
||||
|
||||
console.log(`Response: ${response}`);
|
||||
});
|
||||
console.log(`Response: ${response}`);
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
@@ -361,31 +364,31 @@
|
||||
data-toggle="tab" href="#nav-tawarruq" role="tab" aria-controls="nav-tawarruq"
|
||||
aria-selected="{{ $aria_selected_SAG_baru }}">SAG Baru</a>
|
||||
<a class="nav-item nav-link {{ $activate_tab_SAG_lama }}" " id="nav-xtawarruq-tab" data-toggle="tab" href="#nav-xtawarruq" role="tab" aria-controls="nav-xtawarruq" aria-selected="{{ $aria_selected_SAG_lama }}"><span id="textnavsag">SAG Lama</span></a>
|
||||
</div>
|
||||
</nav>
|
||||
<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">
|
||||
<table class="table table-striped table-hover" id="myTable">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Pembiayaan</th>
|
||||
<th>Tarikh Matang</th>
|
||||
<th>Baki Harga Jualan</th>
|
||||
<th>Baki Pembiayaan</th>
|
||||
<th>Margin</th>
|
||||
<th>Tempoh</th>
|
||||
<th>Keuntungan</th>
|
||||
<th>Lelong</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<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">
|
||||
<thead class="thead-dark">
|
||||
{{-- <tr>
|
||||
</div>
|
||||
</nav>
|
||||
<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">
|
||||
<table class="table table-striped table-hover" id="myTable">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Pembiayaan</th>
|
||||
<th>Tarikh Matang</th>
|
||||
<th>Baki Harga Jualan</th>
|
||||
<th>Baki Pembiayaan</th>
|
||||
<th>Margin</th>
|
||||
<th>Tempoh</th>
|
||||
<th>Keuntungan</th>
|
||||
<th>Lelong</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<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">
|
||||
<thead class="thead-dark">
|
||||
{{-- <tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Gadai</th>
|
||||
@@ -395,139 +398,139 @@
|
||||
<th>Tempoh</th>
|
||||
<th>Lelong</th>
|
||||
</tr> --}}
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Pembiayaan</th>
|
||||
<th>Tarikh Matang</th>
|
||||
<th>Baki Harga Jualan</th>
|
||||
<th>Baki Pembiayaan</th>
|
||||
<th>Margin</th>
|
||||
<th>Tempoh</th>
|
||||
<th>Keuntungan</th>
|
||||
<th>Lelong</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Pembiayaan</th>
|
||||
<th>Tarikh Matang</th>
|
||||
<th>Baki Harga Jualan</th>
|
||||
<th>Baki Pembiayaan</th>
|
||||
<th>Margin</th>
|
||||
<th>Tempoh</th>
|
||||
<th>Keuntungan</th>
|
||||
<th>Lelong</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Sudah Tebus --}}
|
||||
|
||||
<table id="dahtebusTable" class="table table-striped table-hover">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Penyelesaian Pembiayaan</th>
|
||||
<th>Baki Pembiayaan</th>
|
||||
<th>Margin</th>
|
||||
<th>Tempoh</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<table id="lelongTable" class="table table-striped table-hover">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Lelong</th>
|
||||
<th>Tarikh Tuntut</th>
|
||||
<th>Pembiayaan</th>
|
||||
<th>Harga Jual</th>
|
||||
<th>Jum Tuntut/Bayar</th>
|
||||
<th>Keuntungan</th>
|
||||
<th>Caj Lelong</th>
|
||||
<th>Status Tuntutan</th>
|
||||
<th>Cetak</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<div class="text-center">
|
||||
<button class="btn btn-primary" onclick="ubahfunc(this)" id="button-edit-gadaian">Ubah</button>
|
||||
<button class="btn btn-primary" onclick="hapusfunc()">Hapus</button>
|
||||
<button class="btn btn-primary" onclick="histfunc()">Rekod Pembiayaan</button>
|
||||
<button class="btn btn-primary" onclick="removeansuran(this)" id="button-remove-ansuran">Hapus Ansuran</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{-- Sudah Tebus --}}
|
||||
|
||||
<table id="dahtebusTable" class="table table-striped table-hover">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Penyelesaian Pembiayaan</th>
|
||||
<th>Baki Pembiayaan</th>
|
||||
<th>Margin</th>
|
||||
<th>Tempoh</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<table id="lelongTable" class="table table-striped table-hover">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Bil</th>
|
||||
<th>No Rujukan</th>
|
||||
<th>Tarikh Lelong</th>
|
||||
<th>Tarikh Tuntut</th>
|
||||
<th>Pembiayaan</th>
|
||||
<th>Harga Jual</th>
|
||||
<th>Jum Tuntut/Bayar</th>
|
||||
<th>Keuntungan</th>
|
||||
<th>Caj Lelong</th>
|
||||
<th>Status Tuntutan</th>
|
||||
<th>Cetak</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<div class="text-center">
|
||||
<button class="btn btn-primary" onclick="ubahfunc(this)" id="button-edit-gadaian">Ubah</button>
|
||||
<button class="btn btn-primary" onclick="hapusfunc()">Hapus</button>
|
||||
<button class="btn btn-primary" onclick="histfunc()">Rekod Pembiayaan</button>
|
||||
<button class="btn btn-primary" onclick="removeansuran(this)" id="button-remove-ansuran">Hapus Ansuran</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="customer_detail" tabindex="-1" aria-labelledby="customer_detailLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-xl">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="customer_detailLabel">Maklumat Pelanggan</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="kemaskiniform">
|
||||
<div class='row form-group'>
|
||||
<div class='col-md-6'>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
Nama
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="customer_detail" tabindex="-1" aria-labelledby="customer_detailLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-xl">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="customer_detailLabel">Maklumat Pelanggan</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="kemaskiniform">
|
||||
<div class='row form-group'>
|
||||
<div class='col-md-6'>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
Nama
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='nama' id='nama' value="{{ $customer_info['nama'] }}" class='form-control'>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='nama' id='nama' value="{{ $customer_info['nama'] }}" class='form-control'>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No KP
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='icno' id='icno' value="{{ $customer_info['kpbaru'] ? $customer_info['kpbaru'] : $customer_info['kplama'] }}" class='form-control'>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No KP
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No Pelanggan
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='nopelanggan' id='nopelanggan' value="{{ $customer_info['nopelanggan'] }}" class='form-control'>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='icno' id='icno' value="{{ $customer_info['kpbaru'] ? $customer_info['kpbaru'] : $customer_info['kplama'] }}" class='form-control'>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No Telefon 1
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='' id='telefon' value="{{ $customer_info['telefon'] ? $customer_info['telefon'] : '' }}" class='form-control'>
|
||||
<span id="errortelefon" style="color:red;"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No Pelanggan
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No Telefon 2
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='telefon2' id='telefon2' value="{{ $customer_info['telefon2'] ? $customer_info['telefon2'] : '' }}" class='form-control'>
|
||||
<span id="errortelefon2" style="color:red;"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='nopelanggan' id='nopelanggan' value="{{ $customer_info['nopelanggan'] }}" class='form-control'>
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No Telefon 1
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='' id='telefon' value="{{ $customer_info['telefon'] ? $customer_info['telefon'] : '' }}" class='form-control'>
|
||||
<span id="errortelefon" style="color:red;"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
No Telefon 2
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
<input type="text" readonly name='telefon2' id='telefon2' value="{{ $customer_info['telefon2'] ? $customer_info['telefon2'] : '' }}" class='form-control'>
|
||||
<span id="errortelefon2" style="color:red;"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
Bank
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
@php
|
||||
$bank = Http::withOptions(['verify' => config('app.api_verify')])
|
||||
->get($api_url . '/api/bank')
|
||||
->json();
|
||||
@endphp
|
||||
<select class="form-control" name="kodbank" data-placeholder="Pilih Bank" id="kodbank" disabled="true">
|
||||
<option value="-" selected disabled>-</option>
|
||||
@foreach ($bank as $banks)
|
||||
<div class='form-group row col-md-12'>
|
||||
<div class='col-md-5'>
|
||||
Bank
|
||||
</div>
|
||||
<div class='col-md-7'>
|
||||
@php
|
||||
$bank = Http::withOptions(['verify' => config('app.api_verify')])
|
||||
->get($api_url . '/api/bank')
|
||||
->json();
|
||||
@endphp
|
||||
<select class="form-control" name="kodbank" data-placeholder="Pilih Bank" id="kodbank" disabled="true">
|
||||
<option value="-" selected disabled>-</option>
|
||||
@foreach ($bank as $banks)
|
||||
<option value="{{ $banks['abbreviation'] }}"
|
||||
{{ $banks['abbreviation'] == $customer_info['kodbank'] ? 'selected' : '' }}>
|
||||
{{ $banks['name'] }}</option>
|
||||
@@ -712,26 +715,18 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var api_arrahnbid = "<?php echo config('app.api_arrahnbid') ?>";
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var kodcaw = "{{ $cawangan_info['kodcaw'] }}";
|
||||
var tagarrahnbid = "{{ $cawangan_info['tagarrahnbid'] }}";
|
||||
var min_komoditi = "{{ $min_komoditi }}";
|
||||
$('#daftar_gadai').on('click',function(){
|
||||
$("#daftar_gadai").prop('disabled', true);
|
||||
var noic = $('#noic').val();
|
||||
var iclama = "{{ $customer_info['kplama'] }}";
|
||||
var icbaru = "{{ $customer_info['kpbaru'] }}";
|
||||
var outstanding_semasa = "{{ $outstanding_semasa }}";
|
||||
event.preventDefault();
|
||||
if(outstanding_semasa >= 300000){
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Had Pembiayaan',
|
||||
text: 'Outstanding Pembiayaan Pelanggan Telah Melebihi Had'
|
||||
});
|
||||
$("#daftar_gadai").prop('disabled', false);
|
||||
<script>
|
||||
var api_arrahnbid = "<?php echo config('app.api_arrahnbid'); ?>";
|
||||
var api_url = "<?php echo $api_url; ?>";
|
||||
var kodcaw = "{{ $cawangan_info['kodcaw'] }}";
|
||||
var tagarrahnbid = "{{ $cawangan_info['tagarrahnbid'] }}";
|
||||
var min_komoditi = "{{ $min_komoditi }}";
|
||||
$('#daftar_gadai').on('click', function() {
|
||||
$("#daftar_gadai").prop('disabled', true);
|
||||
var noic = $('#noic').val();
|
||||
var iclama = "{{ $customer_info['kplama'] }}";
|
||||
var icbaru = "{{ $customer_info['kpbaru'] }}";
|
||||
var outstanding_semasa = "{{ $outstanding_semasa }}";
|
||||
event.preventDefault();
|
||||
if (outstanding_semasa >= 300000) {
|
||||
Swal.fire({
|
||||
@@ -977,7 +972,7 @@
|
||||
var channel = pusher.subscribe(
|
||||
'notice-kelulusan');
|
||||
channel.bind('my-kelulusan', function(
|
||||
data) {
|
||||
data) {
|
||||
|
||||
|
||||
if (data.norujukan ==
|
||||
@@ -1001,7 +996,7 @@
|
||||
},
|
||||
success: function(
|
||||
data
|
||||
) {
|
||||
) {
|
||||
location
|
||||
.reload();
|
||||
|
||||
@@ -1010,17 +1005,18 @@
|
||||
xhr,
|
||||
status,
|
||||
error
|
||||
) {
|
||||
) {
|
||||
var err =
|
||||
eval(
|
||||
"(" +
|
||||
xhr
|
||||
.responseText +
|
||||
")"
|
||||
);
|
||||
);
|
||||
alert
|
||||
(xhr
|
||||
.responseText);
|
||||
.responseText
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1248,7 +1244,7 @@
|
||||
'RM ' + formatter.format(gadai_detail['bakipjm']),
|
||||
(((Number(gadai_detail['pinjaman']) / Number(gadai_detail[
|
||||
'nilaimarhun'])) * 100).toFixed(2)).toLocaleString(
|
||||
"en-GB") + '%',
|
||||
"en-GB") + '%',
|
||||
gadai_detail['tempoh']
|
||||
]).draw();
|
||||
} else if (jenistebus == "lelong") {
|
||||
@@ -1279,7 +1275,7 @@
|
||||
'<a href="#" onclick="checktuntutbaki(this)" data-norujukan=' +
|
||||
gadai_detail['norujukan'] + ' data-tarikhtuntut=' +
|
||||
gadai_detail['trkhtuntut'] + '>' + gadai_detail[
|
||||
'norujukan'] + '</a>',
|
||||
'norujukan'] + '</a>',
|
||||
gadai_detail['t_lelong'],
|
||||
gadai_detail['trkhtuntut'],
|
||||
'RM ' + formatter.format(gadai_detail['pinjaman']),
|
||||
@@ -1296,7 +1292,7 @@
|
||||
'<a href="#" onclick="checktuntutbaki(this)" data-norujukan=' +
|
||||
gadai_detail['norujukan'] + ' data-tarikhtuntut=' +
|
||||
gadai_detail['trkhtuntut'] + '>' + gadai_detail[
|
||||
'norujukan'] + '</a>',
|
||||
'norujukan'] + '</a>',
|
||||
gadai_detail['t_lelong'],
|
||||
gadai_detail['trkhtuntut'],
|
||||
'RM ' + formatter.format(gadai_detail['pinjaman']),
|
||||
@@ -2170,10 +2166,10 @@
|
||||
cancelButtonText: 'Salah',
|
||||
reverseButtons: true
|
||||
}).then((
|
||||
result) => {
|
||||
result) => {
|
||||
if (result
|
||||
.isConfirmed
|
||||
) {
|
||||
) {
|
||||
|
||||
$.ajax({
|
||||
method: 'put',
|
||||
@@ -2187,11 +2183,11 @@
|
||||
},
|
||||
success: function(
|
||||
data
|
||||
) {
|
||||
) {
|
||||
|
||||
if (data ===
|
||||
1
|
||||
) {
|
||||
) {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Berjaya!',
|
||||
@@ -2226,7 +2222,7 @@
|
||||
Swal
|
||||
.DismissReason
|
||||
.cancel
|
||||
) {
|
||||
) {
|
||||
PengesahanAkhirWakil
|
||||
.fire(
|
||||
'Batal',
|
||||
@@ -2248,12 +2244,12 @@
|
||||
daftarwakilfunction
|
||||
(amaun,
|
||||
norujukan
|
||||
);
|
||||
);
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status,
|
||||
error) {
|
||||
error) {
|
||||
var err = eval("(" + xhr
|
||||
.responseText + ")");
|
||||
alert(xhr.responseText);
|
||||
@@ -2485,7 +2481,7 @@
|
||||
success: function(data) {},
|
||||
error: function(xhr, status, error) {
|
||||
var err = eval("(" + xhr.responseText +
|
||||
")");
|
||||
")");
|
||||
alert(xhr.responseText);
|
||||
}
|
||||
});
|
||||
@@ -2533,7 +2529,7 @@
|
||||
location
|
||||
.reload();
|
||||
}
|
||||
);
|
||||
);
|
||||
} else {
|
||||
swalWithBootstrapButtons
|
||||
.fire(
|
||||
@@ -2546,7 +2542,7 @@
|
||||
location
|
||||
.reload();
|
||||
}
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -2560,10 +2556,10 @@
|
||||
xhr
|
||||
.responseText +
|
||||
")"
|
||||
);
|
||||
);
|
||||
alert(xhr
|
||||
.responseText
|
||||
);
|
||||
);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
@@ -2722,10 +2718,10 @@
|
||||
'Maklumat Pembiayaan telah dihapuskan.',
|
||||
'success'
|
||||
).then(
|
||||
function() {
|
||||
location
|
||||
.reload();
|
||||
});
|
||||
function() {
|
||||
location
|
||||
.reload();
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
getPusherResponse();
|
||||
|
||||
async function getPusherResponse(){
|
||||
let api_url = "{{ api_url_for_browser() }}";
|
||||
let api_url = "<?php echo $api_url ?>";
|
||||
const jsonData = {
|
||||
norujukan: "{{ $errorapproval['norujukan'] }}",
|
||||
kodcaw: "{{ Auth::user()->cawangan }}",
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
$('form input').keydown(function (e) {
|
||||
if (e.keyCode == 13) {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
@endphp
|
||||
@endif
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
$('form input').keydown(function (e) {
|
||||
if (e.keyCode == 13) {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
</div>
|
||||
<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" id="toggleTableBtn" class="btn btn-info ml-2">
|
||||
<i class="fas fa-exchange-alt"></i> Papar Margin
|
||||
</button>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
@@ -56,33 +53,6 @@
|
||||
<th colspan="5"></th>
|
||||
</tfoot>
|
||||
</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 class="card">
|
||||
@@ -326,7 +296,7 @@
|
||||
</div>
|
||||
<script src="{{ asset('js/rounded-methods.js') }}"></script>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw_ujrah = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
$('form input').keydown(function (e) {
|
||||
@@ -541,21 +511,7 @@
|
||||
"visible": 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({
|
||||
@@ -611,7 +567,6 @@
|
||||
total_berat = 0;
|
||||
total_kuantiti = 0;
|
||||
var marhun_details = '';
|
||||
var array_mutu = [];
|
||||
tablemarhun.clear().draw();
|
||||
$.each(data,function(index,marhun){
|
||||
$.each(marhun,function(index,marhun_detail){
|
||||
@@ -621,7 +576,6 @@
|
||||
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
||||
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
||||
total_kuantiti += Number(marhun_detail['bil']);
|
||||
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
|
||||
tablemarhun.row.add([
|
||||
counter,
|
||||
marhun_detail['recno'],
|
||||
@@ -634,7 +588,7 @@
|
||||
marhun_detail['harga'],
|
||||
status_tag_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();
|
||||
count++;
|
||||
counter = counter + 1;
|
||||
@@ -647,7 +601,7 @@
|
||||
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
||||
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
|
||||
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){
|
||||
@@ -702,32 +656,25 @@
|
||||
$('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2)));
|
||||
$('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2)));
|
||||
|
||||
var max_teller = 0;
|
||||
var max_pelulus = 0;
|
||||
|
||||
$.ajax({
|
||||
method:'GET',
|
||||
url: api_url + '/api/maxpinjaman',
|
||||
data: {
|
||||
'mutu': array_mutu,
|
||||
'total_nilai_marhun': total_nilai_marhun,
|
||||
},
|
||||
success:function(data){
|
||||
|
||||
$.each(data,function(index,pinjaman){
|
||||
if (pinjaman['user_type'] == 'teller') {
|
||||
if(pinjaman['user_type'] == 'teller'){
|
||||
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']);
|
||||
max_pelulus = pinjaman['pc_pinjaman'];
|
||||
}
|
||||
});
|
||||
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
|
||||
$('.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));
|
||||
$('#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: '{{ api_url_for_browser() }}/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){
|
||||
let norujuk = $('#norujukan').val();
|
||||
let selectedrow = $(e).closest('tr');
|
||||
@@ -1652,7 +1502,7 @@
|
||||
|
||||
swalWithBootstrapButtons.fire({
|
||||
title: 'Dapatkan Pengesahan Daripada Khazanah?',
|
||||
text: "Tetapan Margin Melebihi Limit Maksima Teller!",
|
||||
text: "Tetapan margin melebihi" + pinjaman_teller + "% untuk Khazanah!",
|
||||
icon: 'info',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Hantar',
|
||||
@@ -1664,7 +1514,7 @@
|
||||
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 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 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: '{{ api_url_for_browser() }}/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>
|
||||
@endsection
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
@endphp
|
||||
|
||||
@if($gadai_session != null)
|
||||
<div class="p-4">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-12">
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<div class="form-group row col-12">
|
||||
<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="tag_anggota" id="tag_anggota" value="{{ $customer_info['tag_anggota'] ?? 0 }}">
|
||||
|
||||
</div>
|
||||
<div class="col-12 mb-2">
|
||||
@@ -63,14 +64,6 @@
|
||||
</div>
|
||||
<div class="card">
|
||||
<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">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
@@ -97,35 +90,6 @@
|
||||
<th colspan="5"></th>
|
||||
</tfoot>
|
||||
</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 class="card">
|
||||
@@ -217,68 +181,6 @@
|
||||
</div>
|
||||
</diV>
|
||||
</div>
|
||||
<div class="col-12" id="cara_terima_section" style="display:none;">
|
||||
<hr>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
Cara Terima Pembiayaan
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="cara_terima" id="cara_terima_tunai" value="TUNAI" checked>
|
||||
<label class="form-check-label" for="cara_terima_tunai">Tunai</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="cara_terima" id="cara_terima_online" value="ONLINE">
|
||||
<label class="form-check-label" for="cara_terima_online">Online (Akaun Bank)</label>
|
||||
</div>
|
||||
<small class="form-text text-muted">Pilihan Online untuk pembiayaan RM5,000 – RM50,000 sahaja.</small>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bank_online_section" style="display:none;">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">Modal Online</div>
|
||||
<div class="col-md-9">
|
||||
<div id="modal_online_status" class="mb-1">Memeriksa baki...</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">Bank</div>
|
||||
<div class="col-md-4">
|
||||
@php
|
||||
$banks_list = Http::withOptions(['verify' => config('app.api_verify')])
|
||||
->get($api_url . '/api/bank')
|
||||
->json();
|
||||
@endphp
|
||||
<select class="form-control" name="kodbank" id="gadai_kodbank">
|
||||
<option value="">-- Pilih Bank --</option>
|
||||
@foreach ($banks_list as $banks)
|
||||
<option value="{{ $banks['abbreviation'] }}"
|
||||
{{ ($customer_info['kodbank'] ?? '') == $banks['abbreviation'] ? 'selected' : '' }}
|
||||
data-nama="{{ $banks['name'] }}">
|
||||
{{ $banks['name'] }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-2">No. Akaun</div>
|
||||
<div class="col-md-3">
|
||||
<input type="text" class="form-control" name="noakaun" id="gadai_noakaun"
|
||||
value="{{ $customer_info['noakaun'] ?? '' }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">Nama Akaun</div>
|
||||
<div class="col-md-9">
|
||||
<input type="text" class="form-control" name="nama_akaun" id="gadai_nama_akaun"
|
||||
value="{{ $customer_info['nama'] ?? '' }}">
|
||||
<input type="hidden" name="nama_bank" id="gadai_nama_bank" value="">
|
||||
<input type="hidden" name="nama_pelanggan" value="{{ $customer_info['nama'] ?? '' }}">
|
||||
<input type="hidden" name="nopelanggan" id="nopelanggan" value="{{ $customer_info['nopelanggan'] ?? '' }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<input type="text" name="norujukan_gadai" id="norujukan_gadai" value="{{ $norujukan }}" hidden>
|
||||
<input type="text" name="marhun_detail" id="marhun_detail" value="" hidden>
|
||||
@@ -393,7 +295,7 @@
|
||||
@endif
|
||||
<script src="{{ asset('js/rounded-methods.js') }}"></script>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw_ujrah = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
$('form input').keydown(function (e) {
|
||||
if (e.keyCode == 13) {
|
||||
@@ -572,34 +474,21 @@
|
||||
})
|
||||
}
|
||||
|
||||
var tablemarhun = $('#myTable').DataTable({
|
||||
"ordering": false,
|
||||
"columnDefs": [{
|
||||
"targets": [1],
|
||||
"visible": false,
|
||||
"searchable": false
|
||||
},
|
||||
{
|
||||
"targets": [7],
|
||||
"visible": true,
|
||||
"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"
|
||||
}
|
||||
var tablemarhun = $('#myTable').DataTable({
|
||||
"ordering": false,
|
||||
"columnDefs": [
|
||||
{
|
||||
"targets": [ 1 ],
|
||||
"visible": false,
|
||||
"searchable": false
|
||||
},
|
||||
});
|
||||
{
|
||||
"targets": [ 7 ],
|
||||
"visible": false,
|
||||
"searchable": false
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
$(".select2").select2({
|
||||
dropdownParent: $('#daftar_marhun'),
|
||||
@@ -639,106 +528,107 @@
|
||||
closeOnSelect: false
|
||||
});
|
||||
|
||||
var total_nilai_marhun = 0;
|
||||
var total_berat = 0;
|
||||
var total_kuantiti = 0;
|
||||
var kadarupah = 0;
|
||||
var jumlah_marhun = 0;
|
||||
var jumlah_nilai_marhun = 0;
|
||||
var pinjaman_pelulus = 0;
|
||||
var pinjaman_teller = 0;
|
||||
|
||||
function marhuntable(data) {
|
||||
var counter = 1;
|
||||
total_nilai_marhun = 0;
|
||||
total_berat = 0;
|
||||
total_kuantiti = 0;
|
||||
var marhun_details = '';
|
||||
var array_mutu = [];
|
||||
jumlah_nilai_marhun = 0;
|
||||
tablemarhun.clear().draw();
|
||||
$.each(data, function(index, marhun) {
|
||||
$.each(marhun, function(index, marhun_detail) {
|
||||
total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']);
|
||||
total_berat = total_berat + Number(marhun_detail['berat']);
|
||||
marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] + ",";
|
||||
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
||||
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
||||
total_kuantiti += Number(marhun_detail['bil']);
|
||||
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
|
||||
tablemarhun.row.add([
|
||||
counter,
|
||||
marhun_detail['recno'],
|
||||
marhun_detail['marhun'],
|
||||
formatter.format(marhun_detail['n_marhun']),
|
||||
marhun_detail['karat'],
|
||||
formatter.format(marhun_detail['berat']),
|
||||
marhun_detail['bil'],
|
||||
marhun_detail['nota'],
|
||||
marhun_detail['harga'],
|
||||
status_tag_permata,
|
||||
marhun_detail['berat_batu_permata'],
|
||||
"<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();
|
||||
counter = counter + 1;
|
||||
});
|
||||
var total_nilai_marhun = 0;
|
||||
var total_berat = 0;
|
||||
var total_kuantiti = 0;
|
||||
var kadarupah = 0;
|
||||
var jumlah_marhun = 0;
|
||||
var jumlah_nilai_marhun = 0;
|
||||
var pinjaman_pelulus = 0;
|
||||
var pinjaman_teller = 0;
|
||||
function marhuntable(data){
|
||||
var counter = 1;
|
||||
total_nilai_marhun = 0;
|
||||
total_berat = 0;
|
||||
total_kuantiti = 0;
|
||||
var marhun_details = '';
|
||||
jumlah_nilai_marhun = 0;
|
||||
tablemarhun.clear().draw();
|
||||
$.each(data,function(index,marhun){
|
||||
$.each(marhun,function(index,marhun_detail){
|
||||
total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']);
|
||||
total_berat = total_berat + Number(marhun_detail['berat']);
|
||||
marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] +",";
|
||||
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
||||
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
||||
total_kuantiti += Number(marhun_detail['bil']);
|
||||
tablemarhun.row.add([
|
||||
counter,
|
||||
marhun_detail['recno'],
|
||||
marhun_detail['marhun'],
|
||||
formatter.format(marhun_detail['n_marhun']),
|
||||
marhun_detail['karat'],
|
||||
formatter.format(marhun_detail['berat']),
|
||||
marhun_detail['bil'],
|
||||
marhun_detail['nota'],
|
||||
marhun_detail['harga'],
|
||||
status_tag_permata,
|
||||
marhun_detail['berat_batu_permata'],
|
||||
"<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();
|
||||
counter = counter + 1;
|
||||
});
|
||||
$('#totalberattable').text(formatter.format(total_berat));
|
||||
$('#totalkuantititable').text(total_kuantiti);
|
||||
$('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun));
|
||||
$('#bilangan_marhun').val(formatter.format(counter - 1));
|
||||
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
||||
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
|
||||
});
|
||||
$('#totalberattable').text(formatter.format(total_berat));
|
||||
$('#totalkuantititable').text(total_kuantiti);
|
||||
$('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun));
|
||||
$('#bilangan_marhun').val(formatter.format(counter-1));
|
||||
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
||||
$('#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({
|
||||
method:'GET',
|
||||
url: api_url + '/api/kadarujrah',
|
||||
async:false,
|
||||
data:{
|
||||
'nokp': $('#nokp').val(),
|
||||
'nilaimarhun' : total_nilai_marhun,
|
||||
'kodcaw' : kodcaw_ujrah
|
||||
},
|
||||
success:function(data){
|
||||
kadarupah = data;
|
||||
|
||||
// Jika anggota (tag_anggota = 1), kadar ujrah dipaksa 0.00
|
||||
if(Number($('#tag_anggota').val()) === 1){
|
||||
kadarupah = 0;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#total_nilai_marhun').val(formatter.format(total_nilai_marhun));
|
||||
$('#marhun_detail').val(marhun_details);
|
||||
$('#total_berat').val(formatter.format(total_berat));
|
||||
$('#kadarkeuntungan').val(formatter.format(kadarupah));
|
||||
$('#kuantiti_marhun').val(formatter.format(jumlah_marhun));
|
||||
|
||||
$.ajax({
|
||||
method:'GET',
|
||||
url: api_url + '/api/kadarujrah',
|
||||
async:false,
|
||||
data:{
|
||||
'nokp': $('#nokp').val(),
|
||||
'nilaimarhun' : total_nilai_marhun,
|
||||
'kodcaw' : kodcaw_ujrah
|
||||
},
|
||||
url: api_url + '/api/maxpinjaman',
|
||||
success:function(data){
|
||||
kadarupah = data;
|
||||
$.each(data,function(index,pinjaman){
|
||||
if(pinjaman['user_type'] == 'teller'){
|
||||
pinjaman_teller = Number(pinjaman['max']);
|
||||
}
|
||||
if(pinjaman['user_type'] == 'khazanah'){
|
||||
pinjaman_pelulus = Number(pinjaman['max']);
|
||||
}
|
||||
});
|
||||
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
|
||||
$('.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.toFixed(2)));
|
||||
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2)));
|
||||
}
|
||||
});
|
||||
|
||||
$('#total_nilai_marhun').val(formatter.format(total_nilai_marhun));
|
||||
$('#marhun_detail').val(marhun_details);
|
||||
$('#total_berat').val(formatter.format(total_berat));
|
||||
$('#kadarkeuntungan').val(formatter.format(kadarupah));
|
||||
$('#kuantiti_marhun').val(formatter.format(jumlah_marhun));
|
||||
|
||||
var max_teller = 0;
|
||||
var max_pelulus = 0;
|
||||
|
||||
$.ajax({
|
||||
method: 'GET',
|
||||
url: api_url + '/api/maxpinjaman',
|
||||
data: {
|
||||
'mutu': array_mutu,
|
||||
'total_nilai_marhun': total_nilai_marhun,
|
||||
},
|
||||
success: function(data) {
|
||||
$.each(data, function(index, pinjaman) {
|
||||
if (pinjaman['user_type'] == 'teller') {
|
||||
pinjaman_teller = Number(pinjaman['max']);
|
||||
max_teller = pinjaman['teller_pinjaman'];
|
||||
}
|
||||
if (pinjaman['user_type'] == 'khazanah') {
|
||||
pinjaman_pelulus = Number(pinjaman['max']);
|
||||
max_pelulus = pinjaman['pc_pinjaman'];
|
||||
}
|
||||
});
|
||||
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
|
||||
$('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %');
|
||||
$('#pembiayaan_max_teller').val(formatter.format(max_teller));
|
||||
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$('#pinjaman').on('input',function(){
|
||||
var pinjaman = Number(this.value);
|
||||
@@ -746,7 +636,6 @@
|
||||
var nokp = $('#nokp').val();
|
||||
//console.log('DEBUG NOKP:', nokp, kadarupah);
|
||||
|
||||
toggleCaraTerima(pinjaman);
|
||||
|
||||
// var keuntungan_sebulan = pinjaman * kadarupah;
|
||||
// var keuntungan_6bln = keuntungan_sebulan * 6;
|
||||
@@ -982,9 +871,8 @@
|
||||
var batu_permata_array = $('#batupermata').val();
|
||||
var tag_permata = $('input[id=tagpermata]').is(':checked') ? 1 : 0;
|
||||
|
||||
var beratpermata = $('#beratpermata').val();
|
||||
var kuantiti = $('#kuantiti').val();
|
||||
|
||||
var beratpermata = $('#beratpermata').val();
|
||||
var kuantiti = $('#kuantiti').val();
|
||||
|
||||
if(kuantiti > 10)
|
||||
{
|
||||
@@ -1258,170 +1146,9 @@
|
||||
.then(response => response.json());
|
||||
}
|
||||
|
||||
function toggleCaraTerima(pinjaman) {
|
||||
if (pinjaman >= 5000 && pinjaman <= 50000) {
|
||||
$('#cara_terima_section').show();
|
||||
toggleBankOnlineSection();
|
||||
} else {
|
||||
$('#cara_terima_section').hide();
|
||||
$('#bank_online_section').hide();
|
||||
$('#cara_terima_tunai').prop('checked', true);
|
||||
}
|
||||
}
|
||||
|
||||
function toggleBankOnlineSection() {
|
||||
if ($('input[name="cara_terima"]:checked').val() === 'ONLINE') {
|
||||
$('#bank_online_section').show();
|
||||
var nama = $('#gadai_kodbank option:selected').data('nama') || '';
|
||||
$('#gadai_nama_bank').val(nama);
|
||||
refreshModalOnlineStatus();
|
||||
} else {
|
||||
$('#bank_online_section').hide();
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on('change', 'input[name="cara_terima"]', function () {
|
||||
toggleBankOnlineSection();
|
||||
});
|
||||
|
||||
$(document).on('change', '#gadai_kodbank', function () {
|
||||
$('#gadai_nama_bank').val($('#gadai_kodbank option:selected').data('nama') || '');
|
||||
});
|
||||
|
||||
async function getModalOnline() {
|
||||
let kodcaw = $('#kodcaw').val();
|
||||
let apiUrl = api_url + '/api/modal-online/' + kodcaw;
|
||||
return $.ajax({
|
||||
method: 'GET',
|
||||
url: apiUrl,
|
||||
dataType: 'json',
|
||||
});
|
||||
}
|
||||
|
||||
async function refreshModalOnlineStatus() {
|
||||
var $el = $('#modal_online_status');
|
||||
$el.removeClass('text-success text-danger text-warning text-muted').addClass('text-muted').text('Memeriksa baki...');
|
||||
try {
|
||||
var modal = await getModalOnline();
|
||||
var pending = modal.pending_request || null;
|
||||
var closed = Number(modal.ditutup || 0) === 1;
|
||||
var missing = !!modal.missing;
|
||||
var baki = Number(modal.baki || 0);
|
||||
var had = Number(modal.had || 0) + Number(modal.tambah || 0);
|
||||
|
||||
if (closed) {
|
||||
$el.removeClass('text-muted').addClass('text-danger')
|
||||
.text('Modal online hari ini sudah ditutup (EOD). Gadai online tidak dibenarkan.');
|
||||
return modal;
|
||||
}
|
||||
|
||||
if (pending) {
|
||||
$el.removeClass('text-muted').addClass('text-warning')
|
||||
.text('Menunggu kelulusan Operasi: RM ' + formatter.format(Number(pending.amaun || 0)) +
|
||||
' (' + (pending.dimohon_oleh || '-') + ').');
|
||||
} else if (missing) {
|
||||
$el.removeClass('text-muted').addClass('text-danger')
|
||||
.text('Belum ada had hari ini. Sila hubungi PC.');
|
||||
} else {
|
||||
$el.removeClass('text-muted').addClass('text-success')
|
||||
.text('Baki RM ' + formatter.format(baki) + ' / Had RM ' + formatter.format(had));
|
||||
}
|
||||
return modal;
|
||||
} catch (e) {
|
||||
$el.removeClass('text-muted').addClass('text-danger').text('Gagal semak modal online.');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function checkDisbursementFloat(pinjaman) {
|
||||
var cara = $('input[name="cara_terima"]:checked').val() || 'TUNAI';
|
||||
if (!(pinjaman >= 5000 && pinjaman <= 50000)) {
|
||||
cara = 'TUNAI';
|
||||
}
|
||||
|
||||
if (cara === 'ONLINE') {
|
||||
var kodbank = $('#gadai_kodbank').val();
|
||||
var noakaun = ($('#gadai_noakaun').val() || '').trim();
|
||||
$('#gadai_nama_bank').val($('#gadai_kodbank option:selected').data('nama') || '');
|
||||
if (!kodbank || !noakaun) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Sila lengkapkan maklumat bank untuk pembayaran online.'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
var modal;
|
||||
try {
|
||||
modal = await getModalOnline();
|
||||
} catch (e) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Gagal semak modal online. Sila cuba lagi.'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Number(modal.ditutup || 0) === 1) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Modal online hari ini sudah ditutup (EOD). Sila pilih Tunai.'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
if (modal.pending_request) {
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: 'Menunggu Operasi',
|
||||
text: 'Permohonan RM ' + formatter.format(Number(modal.pending_request.amaun || 0)) +
|
||||
' masih PENDING. Sila tunggu kelulusan Operasi atau pilih Tunai.'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
if (modal.missing) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Belum ada had modal online hari ini. Sila hubungi PC.'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Number(modal.baki || 0) < pinjaman) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Baki modal online tidak mencukupi. Sila hubungi PC untuk mohon tambah modal, atau pilih Tunai.'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
let dataCawangan = await getDataCawangan();
|
||||
let bakiAkhir = dataCawangan.baki;
|
||||
if (bakiAkhir < pinjaman) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Baki Akhir Tunai Lebih Rendah Daripada Nilai Marhun Yang Ingin Digadaikan. Sila Tambah Pendahuluan di Laman Aliran Tunai Segera. '
|
||||
});
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async function verifyGadai(func){
|
||||
$("#terima_gadai").prop('disabled', true);
|
||||
if (typeof event !== 'undefined' && event && event.preventDefault) {
|
||||
event.preventDefault();
|
||||
}
|
||||
event.preventDefault();
|
||||
var kodcaw = $('#kodcaw').val();
|
||||
var nokp = $('#nokp').val();
|
||||
var nopelanggan = $('#nopelanggan').val();
|
||||
@@ -1448,16 +1175,23 @@
|
||||
title: 'Amaran!',
|
||||
text: 'Pembiayaan Tidak Lengkap'
|
||||
});
|
||||
event.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
let floatOk = await checkDisbursementFloat(pinjaman);
|
||||
if (!floatOk) {
|
||||
$("#terima_gadai").prop('disabled', false);
|
||||
return false;
|
||||
}
|
||||
let dataCawangan = await getDataCawangan();
|
||||
let bakiAkhir = dataCawangan.baki;
|
||||
|
||||
if(true){
|
||||
if(bakiAkhir < pinjaman){
|
||||
$("#terima_gadai").prop('disabled', false);
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Amaran!',
|
||||
text: 'Baki Akhir Tunai Lebih Rendah Daripada Nilai Marhun Yang Ingin Digadaikan. Sila Tambah Pendahuluan di Laman Aliran Tunai Segera. '
|
||||
});
|
||||
event.preventDefault();
|
||||
return false;
|
||||
}else{
|
||||
|
||||
if($.isNumeric(pinjaman) == false){
|
||||
$("#terima_gadai").prop('disabled', false);
|
||||
@@ -1703,24 +1437,22 @@
|
||||
buttonsStyling: false
|
||||
});
|
||||
|
||||
swalWithBootstrapButtons.fire({
|
||||
title: 'Dapatkan Pengesahan Khazanah',
|
||||
text: "Tetapan Margin Melebihi Limit Maksima Teller!",
|
||||
icon: 'info',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Hantar',
|
||||
cancelButtonText: 'Batal',
|
||||
reverseButtons: true
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
swalWithBootstrapButtons.fire({
|
||||
title: 'Dapatkan Pengesahan Khazanah',
|
||||
text: "Tetapan margin melebihi " + pinjaman_teller + "% untuk Khazanah!",
|
||||
icon: 'info',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Hantar',
|
||||
cancelButtonText: 'Batal',
|
||||
reverseButtons: true
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
|
||||
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 status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%";
|
||||
let jumpinjam = $('#pinjaman').val();
|
||||
let teller = "{{ Auth::user()->name }}";
|
||||
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 status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%";
|
||||
let jumpinjam = $('#pinjaman').val();
|
||||
let teller = "{{ Auth::user()->name }}";
|
||||
|
||||
Swal.fire({
|
||||
title: 'Tunggu Pengesahan Daripada Khazanah.',
|
||||
@@ -1878,24 +1610,23 @@
|
||||
let marhun = $(e).closest('tr').children('td:eq(1)').text();let selectedrow = $(e).closest('tr');let recnozz = tablemarhun.row(selectedrow).data();
|
||||
let norujuk = $('#norujukan').val();
|
||||
|
||||
$.ajax({
|
||||
method: 'put',
|
||||
url: '{{ route("gadai.editmarhun") }}',
|
||||
data: {
|
||||
"_token": "{{ csrf_token() }}",
|
||||
"norujukan": norujuk,
|
||||
"recno": recnozz[1],
|
||||
"teller": "{{ Auth::user()->name }}"
|
||||
},
|
||||
success: function(data) {
|
||||
location.reload();
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
var err = eval("(" + xhr.responseText + ")");
|
||||
alert(xhr.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
$.ajax({
|
||||
method: 'put',
|
||||
url: '{{ route("gadai.editmarhun") }}',
|
||||
data: {
|
||||
"_token": "{{ csrf_token() }}",
|
||||
"norujukan" : norujuk,
|
||||
"recno" : recnozz[1],
|
||||
"teller": "{{ Auth::user()->name }}"
|
||||
},
|
||||
success:function(data){
|
||||
location.reload();
|
||||
},error: function(xhr, status, error) {
|
||||
var err = eval("(" + xhr.responseText + ")");
|
||||
alert(xhr.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function editmarhun(e){
|
||||
let norujuk = $('#norujukan').val();
|
||||
@@ -2133,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: '{{ api_url_for_browser() }}/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>
|
||||
@endsection
|
||||
|
||||
@@ -262,10 +262,6 @@
|
||||
<a href="{{ url('pendahuluanserahan') }}"
|
||||
class="btn btn-info btn-lg btn-block mb-3">Pendahuluan - Serahan</a>
|
||||
</div>
|
||||
<div class="row">
|
||||
<a href="{{ route('pembiayaan.online.pc') }}"
|
||||
class="btn btn-info btn-lg btn-block mb-3">Pembiayaan Online</a>
|
||||
</div>
|
||||
<div class="row">
|
||||
<a href="{{ route('khazanah.indexwakil') }}"
|
||||
class="btn btn-info btn-lg btn-block mb-3">Surat Wakil</a>
|
||||
@@ -324,7 +320,7 @@
|
||||
});
|
||||
|
||||
|
||||
let api = "{{ api_url_for_browser() }}";
|
||||
let api = "{{ config('api.url') }}";
|
||||
let kodcaw = "{{ Auth::user()->cawangan }}";
|
||||
|
||||
const initialambilan = [
|
||||
|
||||
@@ -14,18 +14,13 @@
|
||||
</nav>
|
||||
|
||||
<div class="card-body text-center">
|
||||
<a href="{{ route('operasi.kelulusananggota') }}" class="btn btn-info btn-lg d-inline-block m-1">Kelulusan Anggota</a>
|
||||
<a href="{{ route('operasi.kelulusan') }}" class="btn btn-info btn-lg d-inline-block m-1">Kelulusan</a>
|
||||
<a href="{{ route('pembiayaan.online.operasi') }}" class="btn btn-info btn-lg d-inline-block m-1">Pembiayaan Online</a>
|
||||
<a href="{{ route('pembiayaan.online.operasi.topup') }}" class="btn btn-info btn-lg d-inline-block m-1">Modal Online</a>
|
||||
<a href="{{ route('pembiayaan.online.operasi.eod') }}" class="btn btn-info btn-lg d-inline-block m-1">EOD Modal Online</a>
|
||||
<a href="{{ route('daftar.kakitangan') }}" class="btn btn-info btn-lg d-inline-block m-1">Kakitangan</a>
|
||||
<a href="{{ route('parameter') }}" class="btn btn-info btn-lg d-inline-block m-1">Parameter</a>
|
||||
<a href="{{ route('komuditi') }}" class="btn btn-info btn-lg d-inline-block m-1">Komoditi</a>
|
||||
<a href="{{ route('perubatan') }}" class="btn btn-info btn-lg d-inline-block m-1">Perubatan</a>
|
||||
<a href="{{ route('operasi.laporan.audit') }}" class="btn btn-info btn-lg d-inline-block m-1">Laporan Audit</a>
|
||||
<a href="{{ route('operasi.kelulusananggota') }}" class="btn btn-info btn-lg">Kelulusan Anggota</a>
|
||||
<a href="{{ route('operasi.kelulusan') }}" class="btn btn-info btn-lg">Kelulusan</a>
|
||||
<a href="{{ route('daftar.kakitangan') }}" class="btn btn-info btn-lg">Kakitangan</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('perubatan') }}" class="btn btn-info btn-lg">Perubatan</a>
|
||||
</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
|
||||
@@ -267,7 +267,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var cawangan = "{{ Auth::user()->cawangan }}";
|
||||
var teller = "{{ Auth::user()->name }}";
|
||||
|
||||
|
||||
@@ -18,9 +18,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
let teller = "{{ Auth::user()->name }}";
|
||||
let kodcaw = "{{ Auth::user()->cawangan }}";
|
||||
|
||||
function pelangganclick()
|
||||
{
|
||||
// $getTunai2=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/GetCurrentTunai/'.$auth_user['cawangan'],['kodlaluan' => $kodlaluan])->json();
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
const d = new Date();
|
||||
let tahunsemasa = d.getFullYear();
|
||||
let pusherenv = "{{ env('PUSHER_APP_KEY') }}";
|
||||
let api_url = "{{ api_url_for_browser() }}";
|
||||
let api_url = "{{ $api_url }}";
|
||||
|
||||
const formatter = new Intl.NumberFormat('en-US', {
|
||||
minimumFractionDigits: 2
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var cawangan = "{{ Auth::user()->cawangan }}";
|
||||
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var search = "<?php echo $search ?>";
|
||||
var type_id = "<?php echo $idtype ?>";
|
||||
$(document).ready(function(){
|
||||
|
||||
@@ -410,7 +410,7 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "{{ $cawangan_info['kodcaw'] }}";
|
||||
var ppc = "{{ Auth::user()->name }}";
|
||||
var tagarrahnbid = "{{ $cawangan_info['tagarrahnbid'] }}";
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
"scrollX": true
|
||||
});
|
||||
|
||||
let api = "{{ api_url_for_browser() }}";
|
||||
let api = "{{ config('api.url') }}";
|
||||
var kodcaw = "{{ Auth::user()->cawangan }}";
|
||||
|
||||
const formatter = new Intl.NumberFormat('en-US', {
|
||||
@@ -271,7 +271,7 @@
|
||||
|
||||
async function updatelulus(e)
|
||||
{
|
||||
let api = "{{ api_url_for_browser() }}";
|
||||
let api = "{{ config('api.url') }}";
|
||||
let kodcaw = "{{ Auth::user()->cawangan }}";
|
||||
|
||||
const { value: katalaluan } = await Swal.fire({
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
|
||||
<script>
|
||||
|
||||
let api = "{{ api_url_for_browser() }}";
|
||||
let api = "{{ config('api.url') }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -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 = "{{ api_url_for_browser() }}";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
$(document).ready( function () {
|
||||
$('#datetimepicker1').datepicker({
|
||||
format: 'dd-mm-yyyy'
|
||||
});
|
||||
});
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
"ordering": false
|
||||
});
|
||||
|
||||
</script>
|
||||
@endsection
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tabletebus = $('#myTable').DataTable({
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablebatalgadai = $('#myTable').DataTable({
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablegadai = $('#myTable').DataTable({
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
$(document).ready( function () {
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
$(document).ready( function () {
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablebatalgadai = $('#myTable').DataTable({
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
// alert(btoa(api_url));
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tabletebus = $('#myTable').DataTable({
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var panjartebus = $('#myTable').DataTable({
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
$(document).ready( function () {
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
$(document).ready( function () {
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tabletuntutbaki = $('#myTable').DataTable({
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var advansurtable = $('#myTable').DataTable({
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tabletebus = $('#myTable').DataTable({
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablegadai = $('#myTable').DataTable({
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var api_url = "{{ api_url_for_browser() }}";
|
||||
var api_url = "<?php echo $api_url ?>";
|
||||
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
|
||||
|
||||
var tablecustomers = $('#myTable').DataTable({
|
||||
|
||||
@@ -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
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user