merged main to feature split
This commit is contained in:
@@ -51,3 +51,16 @@ PUSHER_APP_CLUSTER=mt1
|
|||||||
|
|
||||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
|
|
||||||
|
BILLPLZ_PRODUCTION_API_KEY="f3e82fe1-a422-4660-97f0-65cc59ff6c47"
|
||||||
|
BILLPLZ_PRODUCTION_X_SIGNATURE="S-alZUbzmD2_TF3vmrRqgehQ"
|
||||||
|
BILLPLZ_PRODUCTION_COLLECTION_ID="5aosv2dg"
|
||||||
|
|
||||||
|
BILLPLZ_SANDBOX_API_KEY="abecfd0c-98d8-4635-abc2-2fcba8c60c11"
|
||||||
|
BILLPLZ_SANDBOX_X_SIGNATURE="S-GWr7z03XjAhqPsFfu_H5nQ"
|
||||||
|
BILLPLZ_SANDBOX_COLLECTION_ID="z0r4kjhi"
|
||||||
|
|
||||||
|
BILLPLZ_SANDBOX_KOPKB_API_KEY="abecfd0c-98d8-4635-abc2-2fcba8c60c11"
|
||||||
|
BILLPLZ_SANDBOX_KOPKB_X_SIGNATURE="S-GWr7z03XjAhqPsFfu_H5nQ"
|
||||||
|
BILLPLZ_SANDBOX_KOPKB_COLLECTION_ID="uae40muk"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\PersonalCarts;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class DeleteCarts extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'carts:delete';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Delete all carts';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
PersonalCarts::query()->onlyTrashed()->forceDelete();
|
||||||
|
Log::info('All carts have been deleted.');
|
||||||
|
$this->info('All carts have been deleted.');
|
||||||
|
}catch(\Exception $e){
|
||||||
|
Log::error('Error deleting carts: ' . $e->getMessage());
|
||||||
|
$this->error('Error deleting carts: ' . $e->getMessage());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,11 +40,18 @@ class UpdateTransactionMaster extends Command
|
|||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
$updateOnline = Http::arrahn()->get('/api/transaction/online/update')->json();
|
$updateOnline = Http::arrahn()->get('/api/transaction/online/update')->json();
|
||||||
|
$updateOnline_Koop = Http::arrahn_koop()->get('/api/transaction/online/update')->json();
|
||||||
|
|
||||||
if($updateOnline == 'success'){
|
if($updateOnline == 'success'){
|
||||||
return 0;
|
return 0;
|
||||||
}else{
|
}else{
|
||||||
Log::error('Update transaction master failed');
|
Log::error('PKB::Update transaction master failed');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($updateOnline_Koop == 'success'){
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
Log::error('KOOP::Update transaction master failed');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
|
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\CompanyStatus;
|
||||||
use App\Models\TransactionOnlineStatus;
|
use App\Models\TransactionOnlineStatus;
|
||||||
use App\Services\BillplzService;
|
use App\Services\BillplzService;
|
||||||
use App\Services\OnlineTransactionLoggerService;
|
use App\Services\OnlineTransactionLoggerService;
|
||||||
|
use Billplz\Base\Bill;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
@@ -29,12 +31,21 @@ class UpdateUnsuccess extends Command
|
|||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(BillplzService $billplzService)
|
public function handle()
|
||||||
{
|
{
|
||||||
|
|
||||||
$getFailedOnlineTransaction = fn() => Http::arrahn()->get('/api/transaction/online/unsuccessful')->json();
|
$getFailedOnlineTransaction = fn() => Http::arrahn()->get('/api/transaction/online/unsuccessful')->json();
|
||||||
|
$getFailedOnlineTransaction_Koop = fn() => Http::arrahn_koop()->get('/api/transaction/online/unsuccessful')->json();
|
||||||
|
|
||||||
$FailedBillplzID = array_map(fn($x) => $x['billplz_id'], $getFailedOnlineTransaction());
|
$FailedBillplzID = array_map(fn($x) => $x['billplz_id'], $getFailedOnlineTransaction());
|
||||||
|
$FailedBillplzID_Koop = array_map(fn($x) => $x['billplz_id'], $getFailedOnlineTransaction_Koop());
|
||||||
|
|
||||||
|
$this->resolve_payment($FailedBillplzID,CompanyStatus::COM_PKB);
|
||||||
|
$this->resolve_payment($FailedBillplzID_Koop,CompanyStatus::COM_KOOPPKB);
|
||||||
|
|
||||||
|
}
|
||||||
|
public function resolve_payment($FailedBillplzID,$company)
|
||||||
|
{
|
||||||
|
$billplzService = new BillplzService($company);
|
||||||
|
|
||||||
if(sizeof($FailedBillplzID) < 0){
|
if(sizeof($FailedBillplzID) < 0){
|
||||||
return;
|
return;
|
||||||
@@ -59,7 +70,13 @@ class UpdateUnsuccess extends Command
|
|||||||
];
|
];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = Http::arrahn()->put('/api/transaction/online/unsuccesfull/update', $transactionData);
|
|
||||||
|
$CallableHttp = $company == CompanyStatus::COM_PKB
|
||||||
|
? Http::arrahn()
|
||||||
|
: Http::arrahn_koop();
|
||||||
|
|
||||||
|
$response = $CallableHttp->put('/api/transaction/online/unsuccesfull/update', $transactionData);
|
||||||
|
|
||||||
OnlineTransactionLoggerService::logs($transaction['bill_id'], $transactionData, $response, TransactionOnlineStatus::UPDATE_UNSUCCESSFUL_TRANSACTION );
|
OnlineTransactionLoggerService::logs($transaction['bill_id'], $transactionData, $response, TransactionOnlineStatus::UPDATE_UNSUCCESSFUL_TRANSACTION );
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Http\Requests\PaymentRequest;
|
use App\Http\Requests\PaymentRequest;
|
||||||
|
use App\Models\CompanyStatus;
|
||||||
|
use App\Models\PersonalCarts;
|
||||||
use App\Models\TransactionOnlineStatus;
|
use App\Models\TransactionOnlineStatus;
|
||||||
use App\Services\BillplzService;
|
use App\Services\BillplzService;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
@@ -13,25 +15,60 @@ use Illuminate\Support\Facades\Http;
|
|||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Money\Money;
|
use Money\Money;
|
||||||
use App\Services\OnlineTransactionLoggerService;
|
use App\Services\OnlineTransactionLoggerService;
|
||||||
|
use Illuminate\Support\Facades\Session;
|
||||||
|
|
||||||
class BayaranController extends Controller
|
class BayaranController extends Controller
|
||||||
{
|
{
|
||||||
|
public $CallableHttp;
|
||||||
|
|
||||||
public function PembayaranAction(PaymentRequest $request)
|
public function PembayaranAction(PaymentRequest $request)
|
||||||
{
|
{
|
||||||
$request->validated();
|
|
||||||
|
$exist_carts = $this->checkCarts();
|
||||||
|
$exist_carts = optional($exist_carts)->toArray();
|
||||||
|
|
||||||
|
if($exist_carts){
|
||||||
|
/* Do Have Carts. */
|
||||||
|
$list_pkb = json_decode($exist_carts['list_pkb'],true);
|
||||||
|
$list_koop = json_decode($exist_carts['list_koop'],true);
|
||||||
|
|
||||||
$arraybayar = $this->setUpahTawarruq($request->getPembiayaanFromNorujukan());
|
if($exist_carts['status_pkb'] == 'PENDING') $list_pkb = ($list_pkb) ? $this->setUpahTawarruq($list_pkb) : []; else $list_pkb = [];
|
||||||
|
if($exist_carts['status_koop'] == 'PENDING') $list_koop = ($list_koop) ? $this->setUpahTawarruq($list_koop) : []; else $list_koop = [];
|
||||||
|
|
||||||
return view('includes.bayaran.pembayaransag', compact('arraybayar'));
|
}else{
|
||||||
|
/* Doesn't Have Carts. First Timer */
|
||||||
|
$request->validated();
|
||||||
|
|
||||||
|
$arraybayar = $this->setUpahTawarruq($request->getPembiayaanFromNorujukan());
|
||||||
|
|
||||||
|
$list_pkb = array_filter(array_map(function ($x){
|
||||||
|
return ($x['tag_syarikat'] == CompanyStatus::COM_PKB) ? $x : null;
|
||||||
|
},$arraybayar));
|
||||||
|
|
||||||
|
$list_koop = array_filter(array_map(function ($x){
|
||||||
|
return ($x['tag_syarikat'] == CompanyStatus::COM_KOOPPKB) ? $x : null;
|
||||||
|
},$arraybayar));
|
||||||
|
|
||||||
|
$personal_carts = new PersonalCarts();
|
||||||
|
$personal_carts->ic_no = Auth::user()->icno;
|
||||||
|
$personal_carts->list_koop = json_encode($list_koop);
|
||||||
|
$personal_carts->list_pkb = json_encode($list_pkb);
|
||||||
|
$personal_carts->status_pkb = ($list_pkb) ? 'PENDING' : 'NONE';
|
||||||
|
$personal_carts->status_koop = ($list_koop) ? 'PENDING' : 'NONE';
|
||||||
|
$personal_carts->user_id = Auth::user()->id;
|
||||||
|
$personal_carts->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('includes.bayaran.pembayaransag', compact('list_pkb','list_koop'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function PembayaranEngine(Request $request, BillplzService $billplzService)
|
public function PembayaranEngine(Request $request)
|
||||||
{
|
{
|
||||||
['email' => $customerEmail, 'notel' => $customerPhoneNumber, 'name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray();
|
['email' => $customerEmail, 'notel' => $customerPhoneNumber, 'name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray();
|
||||||
|
|
||||||
$bayaranArrahn = array_filter($request->txtjenisbayaran, fn($x) => $x == 'arrahn');
|
$bayaranArrahn = array_filter($request->txtjenisbayaran, fn($x) => $x == 'arrahn');
|
||||||
$bayaranOthers = array_filter($request->txtjenisbayaran, fn($x) => $x != 'arrahn');
|
$bayaranOthers = array_filter($request->txtjenisbayaran, fn($x) => $x != 'arrahn');
|
||||||
|
|
||||||
$bayaranArrahnArray = array_map(function ($x) use ($customerName, $customerIcno, $request) {
|
$bayaranArrahnArray = array_map(function ($x) use ($customerName, $customerIcno, $request) {
|
||||||
return [
|
return [
|
||||||
'customer_name' => $customerName,
|
'customer_name' => $customerName,
|
||||||
@@ -62,9 +99,14 @@ class BayaranController extends Controller
|
|||||||
return Money::MYR($sum())->add($billPlzTransactionFee);
|
return Money::MYR($sum())->add($billPlzTransactionFee);
|
||||||
};
|
};
|
||||||
|
|
||||||
$bill = $billplzService->createBill([$customerEmail, $customerPhoneNumber, $customerName, $getPaymentSum()]);
|
$company = strtoupper($request->txtcompany);
|
||||||
|
$billplzService = new BillplzService($company);
|
||||||
|
$bill = $billplzService->createBill([$customerEmail, $customerPhoneNumber, $customerName, $getPaymentSum()],$company);
|
||||||
|
|
||||||
|
Session::put('company', $company);
|
||||||
|
$this->serviceCallHttp($company);
|
||||||
|
|
||||||
$isRecordTransactionSuccess = $this->recordTransaction($paymentArray, $bill);
|
$isRecordTransactionSuccess = $this->recordTransaction($paymentArray, $bill,$company);
|
||||||
|
|
||||||
if ($isRecordTransactionSuccess) {
|
if ($isRecordTransactionSuccess) {
|
||||||
session([
|
session([
|
||||||
@@ -76,12 +118,12 @@ class BayaranController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function recordTransaction($paymentArray, $bill)
|
public function recordTransaction($paymentArray, $bill,$company = 'PKB')
|
||||||
{
|
{
|
||||||
['name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray();
|
['name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray();
|
||||||
|
|
||||||
$getlatestNoSiri = function () {
|
$getlatestNoSiri = function () {
|
||||||
$previous_siri = Http::arrahn()->get('/api/online/transaction')->json();
|
$previous_siri = $this->CallableHttp->get('/api/online/transaction')->json();
|
||||||
if ($previous_siri) {
|
if ($previous_siri) {
|
||||||
return $previous_siri['nosiri'] + 1;
|
return $previous_siri['nosiri'] + 1;
|
||||||
} else {
|
} else {
|
||||||
@@ -95,10 +137,13 @@ class BayaranController extends Controller
|
|||||||
return 'APKB' . $day . $month . $year . sprintf('%08d', $getlatestNoSiri());
|
return 'APKB' . $day . $month . $year . sprintf('%08d', $getlatestNoSiri());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$serviceCallable = $company == 'PKB'
|
||||||
|
? fn(Pool $pool) => $pool->arrahn()
|
||||||
|
: fn(Pool $pool) => $pool->arrahn_koop();
|
||||||
try {
|
try {
|
||||||
Http::pool(
|
Http::pool(
|
||||||
fn(Pool $pool) => collect($paymentArray)->map(
|
fn(Pool $pool) => collect($paymentArray)->map(
|
||||||
fn($payment) => $pool->arrahn()->post('/api/online/transaction', [
|
fn($payment) => $serviceCallable($pool)->post('/api/online/transaction', [
|
||||||
'nokp' => $customerIcno,
|
'nokp' => $customerIcno,
|
||||||
'reference_no' => $generateTransactionReferenceNumber(),
|
'reference_no' => $generateTransactionReferenceNumber(),
|
||||||
'nosiri' => $getlatestNoSiri(),
|
'nosiri' => $getlatestNoSiri(),
|
||||||
@@ -122,7 +167,7 @@ class BayaranController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = Http::arrahn()
|
$response = $this->CallableHttp
|
||||||
->put('/api/transaction/online/tagportal', [
|
->put('/api/transaction/online/tagportal', [
|
||||||
'billplz_id' => $bill['id'],
|
'billplz_id' => $bill['id'],
|
||||||
])
|
])
|
||||||
@@ -142,11 +187,12 @@ class BayaranController extends Controller
|
|||||||
|
|
||||||
public function ResitBayaran(Request $request)
|
public function ResitBayaran(Request $request)
|
||||||
{
|
{
|
||||||
|
$this->serviceCallHttp(Session::get('company'));
|
||||||
$payment_details = $request->payment;
|
$payment_details = $request->payment;
|
||||||
|
|
||||||
$kpbaru = Auth::User()->icno;
|
$kpbaru = Auth::User()->icno;
|
||||||
|
|
||||||
$customer = Http::arrahn()
|
$customer = $this->CallableHttp
|
||||||
->get('/api/customers/' . $kpbaru)
|
->get('/api/customers/' . $kpbaru)
|
||||||
->json();
|
->json();
|
||||||
$customer_details = $customer;
|
$customer_details = $customer;
|
||||||
@@ -155,16 +201,16 @@ class BayaranController extends Controller
|
|||||||
$current = new Carbon();
|
$current = new Carbon();
|
||||||
$date = $current->toDateTimeString();
|
$date = $current->toDateTimeString();
|
||||||
|
|
||||||
$cawangan_info = Http::arrahn()
|
$cawangan_info = $this->CallableHttp
|
||||||
->get('/api/cawangan/' . $payment_details['kodcaw'])
|
->get('/api/cawangan/' . $payment_details['kodcaw'])
|
||||||
->json();
|
->json();
|
||||||
$cawangan = Http::arrahn()
|
$cawangan = $this->CallableHttp
|
||||||
->get('/api/cawangan/detail/' . $payment_details['kodcaw'])
|
->get('/api/cawangan/detail/' . $payment_details['kodcaw'])
|
||||||
->json();
|
->json();
|
||||||
$cawangan_detail = $cawangan[0];
|
$cawangan_detail = $cawangan[0];
|
||||||
$nama_cawangan = $cawangan_info['details_caw'];
|
$nama_cawangan = $cawangan_info['details_caw'];
|
||||||
|
|
||||||
$gadai_details = Http::arrahn()
|
$gadai_details = $this->CallableHttp
|
||||||
->get('/api/gadai/norujukan/' . $payment_details['norujukan'])
|
->get('/api/gadai/norujukan/' . $payment_details['norujukan'])
|
||||||
->json();
|
->json();
|
||||||
$gadai = $gadai_details[0][0];
|
$gadai = $gadai_details[0][0];
|
||||||
@@ -172,14 +218,15 @@ class BayaranController extends Controller
|
|||||||
return view('pembayaran.resit.resitportal', compact('customer_details', 'payment_details', 'cawangan_detail', 'nama_cawangan', 'gadai'));
|
return view('pembayaran.resit.resitportal', compact('customer_details', 'payment_details', 'cawangan_detail', 'nama_cawangan', 'gadai'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function callback(Request $request, BillplzService $billplzService)
|
public function callback(Request $request)
|
||||||
{
|
{
|
||||||
|
$billplzService = new BillplzService(Session::get('company'));
|
||||||
$data = $billplzService->webhook($request->toArray());
|
$data = $billplzService->webhook($request->toArray());
|
||||||
|
|
||||||
$isBillUnpaid = $data['paid'] !== true;
|
$isBillUnpaid = $data['paid'] !== true;
|
||||||
|
|
||||||
if ($isBillUnpaid) {
|
if ($isBillUnpaid) {
|
||||||
Http::arrahn()->put('/api/online/transaction', [
|
$this->CallableHttp->put('/api/online/transaction', [
|
||||||
'billplz_id' => $data['id'],
|
'billplz_id' => $data['id'],
|
||||||
'status' => 'UNSUCCESSFUL',
|
'status' => 'UNSUCCESSFUL',
|
||||||
'paid_at' => null,
|
'paid_at' => null,
|
||||||
@@ -188,29 +235,43 @@ class BayaranController extends Controller
|
|||||||
return response(200);
|
return response(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
Http::arrahn()->put('/api/online/transaction', [
|
$this->CallableHttp->put('/api/online/transaction', [
|
||||||
'billplz_id' => $data['id'],
|
'billplz_id' => $data['id'],
|
||||||
'status' => 'PAID',
|
'status' => 'PAID',
|
||||||
'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'),
|
'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$column_updated = (Session::get('company') == 'PKB') ? 'status_pkb' : 'status_koop';
|
||||||
|
$value_paid = 'PAID';
|
||||||
|
|
||||||
|
$exist_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('status_pkb', 'PENDING')
|
||||||
|
->orWhere('status_koop', 'PENDING');
|
||||||
|
})
|
||||||
|
->update([
|
||||||
|
$column_updated => $value_paid,
|
||||||
|
]);
|
||||||
|
|
||||||
return response(200);
|
return response(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function response(Request $request, BillplzService $billplzService)
|
public function response(Request $request)
|
||||||
{
|
{
|
||||||
|
$billplzService = new BillplzService(Session::get('company'));
|
||||||
$data = $billplzService->redirect($request->toArray());
|
$data = $billplzService->redirect($request->toArray());
|
||||||
|
$this->serviceCallHttp($billplzService->company);
|
||||||
$isBillUnpaid = $data['paid'] !== true;
|
$isBillUnpaid = $data['paid'] !== true;
|
||||||
|
|
||||||
if ($isBillUnpaid) {
|
if ($isBillUnpaid) {
|
||||||
Http::arrahn()->put('/api/online/transaction', [
|
$this->CallableHttp->put('/api/online/transaction', [
|
||||||
'billplz_id' => $data['id'],
|
'billplz_id' => $data['id'],
|
||||||
'status' => 'NOT PAID',
|
'status' => 'NOT PAID',
|
||||||
'paid_at' => null,
|
'paid_at' => null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$transactionOnline = Http::arrahn()
|
$transactionOnline = $this->CallableHttp
|
||||||
->get('/api/transaction/online/login', [
|
->get('/api/transaction/online/login', [
|
||||||
'billplz_id' => $data['id'],
|
'billplz_id' => $data['id'],
|
||||||
])
|
])
|
||||||
@@ -219,18 +280,33 @@ class BayaranController extends Controller
|
|||||||
return redirect()->route('pay.failed');
|
return redirect()->route('pay.failed');
|
||||||
}
|
}
|
||||||
|
|
||||||
Http::arrahn()->put('/api/online/transaction', [
|
$this->CallableHttp->put('/api/online/transaction', [
|
||||||
'billplz_id' => $data['id'],
|
'billplz_id' => $data['id'],
|
||||||
'status' => 'PAID',
|
'status' => 'PAID',
|
||||||
'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'),
|
'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$transactionOnline = Http::arrahn()
|
$column_updated = (Session::get('company') == 'PKB') ? 'status_pkb' : 'status_koop';
|
||||||
|
$value_paid = 'PAID';
|
||||||
|
$column_payment_updated = (Session::get('company') == 'PKB') ? 'payment_pkb' : 'payment_koop';
|
||||||
|
|
||||||
|
$transactionOnline = $this->CallableHttp
|
||||||
->get('/api/transaction/online/login', [
|
->get('/api/transaction/online/login', [
|
||||||
'billplz_id' => $data['id'],
|
'billplz_id' => $data['id'],
|
||||||
])
|
])
|
||||||
->json();
|
->json();
|
||||||
|
|
||||||
|
$exist_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('status_pkb', 'PENDING')
|
||||||
|
->orWhere('status_koop', 'PENDING');
|
||||||
|
})
|
||||||
|
->update([
|
||||||
|
$column_updated => $value_paid,
|
||||||
|
$column_payment_updated => json_encode($transactionOnline)
|
||||||
|
]);
|
||||||
|
|
||||||
return redirect()->route('pay.success', [
|
return redirect()->route('pay.success', [
|
||||||
'transactionOnline' => $transactionOnline,
|
'transactionOnline' => $transactionOnline,
|
||||||
]);
|
]);
|
||||||
@@ -238,23 +314,76 @@ class BayaranController extends Controller
|
|||||||
|
|
||||||
public function successPayment(Request $request)
|
public function successPayment(Request $request)
|
||||||
{
|
{
|
||||||
|
$this->serviceCallHttp(Session::get('company'));
|
||||||
$transactionOnline = $request->transactionOnline;
|
$transactionOnline = $request->transactionOnline;
|
||||||
|
|
||||||
|
$exist_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('status_pkb', 'PENDING')
|
||||||
|
->orWhere('status_koop', 'PENDING');
|
||||||
|
})
|
||||||
|
->first();
|
||||||
|
|
||||||
|
$exist_carts = optional($exist_carts)->toArray();
|
||||||
|
|
||||||
|
if(!$exist_carts){
|
||||||
|
$paid_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('status_pkb', 'PAID')
|
||||||
|
->where('status_koop', 'PAID');
|
||||||
|
})
|
||||||
|
->first();
|
||||||
|
$paid_carts = optional($paid_carts)->toArray();
|
||||||
|
if($paid_carts){
|
||||||
|
|
||||||
|
$trans_pkb = json_decode($paid_carts['payment_pkb'],true);
|
||||||
|
$trans_koop = json_decode($paid_carts['payment_koop'],true);
|
||||||
|
|
||||||
|
$trans_pkb = array_map(function ($item) {
|
||||||
|
$item['tag_syarikat'] = CompanyStatus::COM_PKB;
|
||||||
|
return $item;
|
||||||
|
}, $trans_pkb);
|
||||||
|
|
||||||
|
$trans_koop = array_map(function ($item) {
|
||||||
|
$item['tag_syarikat'] = CompanyStatus::COM_KOOPPKB;
|
||||||
|
return $item;
|
||||||
|
}, $trans_koop);
|
||||||
|
|
||||||
|
$transactionOnline = array_merge($trans_pkb,$trans_koop);
|
||||||
|
|
||||||
|
$arraycawangan = array_map(
|
||||||
|
fn($x) => $x['tag_syarikat'] == CompanyStatus::COM_PKB
|
||||||
|
? Http::arrahn()
|
||||||
|
->get('/api/cawangan/detail/' . $x['kodcaw'])
|
||||||
|
->json()[0]
|
||||||
|
: Http::arrahn_koop()
|
||||||
|
->get('/api/cawangan/detail/' . $x['kodcaw'])
|
||||||
|
->json()[0],
|
||||||
|
$transactionOnline
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return view('pembayaran.result.berjayaportal', compact('transactionOnline', 'arraycawangan','exist_carts'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$arraygadai = array_map(
|
$arraygadai = array_map(
|
||||||
fn($x) => Http::arrahn()
|
fn($x) => $this->CallableHttp
|
||||||
->get('/api/gadai/norujukan/' . $x['norujukan'])
|
->get('/api/gadai/norujukan/' . $x['norujukan'])
|
||||||
->json()[0][0],
|
->json()[0][0],
|
||||||
$transactionOnline,
|
$transactionOnline,
|
||||||
);
|
);
|
||||||
|
|
||||||
$arraycawangan = array_map(
|
$arraycawangan = array_map(
|
||||||
fn($x) => Http::arrahn()
|
fn($x) => $this->CallableHttp
|
||||||
->get('/api/cawangan/detail/' . $x['kodcaw'])
|
->get('/api/cawangan/detail/' . $x['kodcaw'])
|
||||||
->json()[0],
|
->json()[0],
|
||||||
$transactionOnline,
|
$transactionOnline,
|
||||||
);
|
);
|
||||||
|
|
||||||
return view('pembayaran.result.berjayaportal', compact('transactionOnline', 'arraycawangan', 'arraygadai'));
|
return view('pembayaran.result.berjayaportal', compact('transactionOnline', 'arraycawangan', 'arraygadai','exist_carts'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function failedPayment()
|
public function failedPayment()
|
||||||
@@ -270,7 +399,7 @@ class BayaranController extends Controller
|
|||||||
|
|
||||||
$auth_user = Auth::user();
|
$auth_user = Auth::user();
|
||||||
|
|
||||||
$belum_tebus = Http::arrahn()
|
$belum_tebus = $this->CallableHttp
|
||||||
->get('/api/customers/' . $auth_user['icno'] . '/gadai/' . 'belum_tebus')
|
->get('/api/customers/' . $auth_user['icno'] . '/gadai/' . 'belum_tebus')
|
||||||
->json();
|
->json();
|
||||||
|
|
||||||
@@ -302,7 +431,11 @@ class BayaranController extends Controller
|
|||||||
|
|
||||||
$getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) {
|
$getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) {
|
||||||
$jenisKeuntungan = $getJenisKeuntungan($x);
|
$jenisKeuntungan = $getJenisKeuntungan($x);
|
||||||
$upahTawarruq = Http::arrahn()
|
$CallableHttp = $x['tag_syarikat'] == CompanyStatus::COM_PKB
|
||||||
|
? Http::arrahn()
|
||||||
|
: Http::arrahn_koop();
|
||||||
|
|
||||||
|
$upahTawarruq = $CallableHttp
|
||||||
->get('/api/upahtawarruq/' . $x['kodcaw'] . '/' . $x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan])
|
->get('/api/upahtawarruq/' . $x['kodcaw'] . '/' . $x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan])
|
||||||
->json();
|
->json();
|
||||||
|
|
||||||
@@ -319,4 +452,47 @@ class BayaranController extends Controller
|
|||||||
|
|
||||||
return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan);
|
return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function checkCarts(){
|
||||||
|
$exist_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('status_pkb', 'PENDING')
|
||||||
|
->orWhere('status_koop', 'PENDING');
|
||||||
|
})
|
||||||
|
->first();
|
||||||
|
|
||||||
|
return $exist_carts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function UserCheckCarts(){
|
||||||
|
$exist_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('status_pkb', 'PENDING')
|
||||||
|
->orWhere('status_koop', 'PENDING');
|
||||||
|
})
|
||||||
|
->first();
|
||||||
|
|
||||||
|
return response()->json($exist_carts);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeCarts(){
|
||||||
|
$exist_carts = PersonalCarts::where('ic_no', Auth::user()->icno)
|
||||||
|
->where('user_id', Auth::user()->id)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if ($exist_carts) {
|
||||||
|
$exist_carts->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($exist_carts);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function serviceCallHttp($company){
|
||||||
|
$this->CallableHttp = $company == 'PKB'
|
||||||
|
? Http::arrahn()
|
||||||
|
: Http::arrahn_koop();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,11 +30,24 @@ class HomeController extends Controller
|
|||||||
{
|
{
|
||||||
$homeUrl = route('home');
|
$homeUrl = route('home');
|
||||||
$authUser = Auth::user();
|
$authUser = Auth::user();
|
||||||
$customerInfo = Http::withOptions(['verify' => config('app.api_verify')])
|
$customer_pkb = Http::withOptions(['verify' => config('app.api_verify')])
|
||||||
->get(config('api.url') . '/portal/customer/info', ['ic' => $authUser['icno']])
|
->get(config('api.url') . '/portal/customer/info', ['ic' => $authUser['icno']])
|
||||||
->json();
|
->json();
|
||||||
|
|
||||||
['gadai' => $customer_gadai, 'lelong' => $customer_lelong] = $customerInfo;
|
$customer_koop = Http::withOptions(['verify' => config('app.api_verify')])
|
||||||
|
->get(config('api.url_koop') . '/portal/customer/info', ['ic' => $authUser['icno']])
|
||||||
|
->json();
|
||||||
|
|
||||||
|
// ['gadai' => $customer_gadai, 'lelong' => $customer_lelong] = $customerInfo;
|
||||||
|
$customer_gadai = array_merge(
|
||||||
|
$customer_pkb['gadai'] ?? [],
|
||||||
|
$customer_koop['gadai'] ?? []
|
||||||
|
);
|
||||||
|
|
||||||
|
$customer_lelong = array_merge(
|
||||||
|
$customer_pkb['lelong'] ?? [],
|
||||||
|
$customer_koop['lelong'] ?? []
|
||||||
|
);
|
||||||
|
|
||||||
// only get lelong that is harga jualan that is not null or 0
|
// only get lelong that is harga jualan that is not null or 0
|
||||||
$customer_lelong = array_filter($customer_lelong, fn($x) => $x['hargajualan'] != null && $x['hargajualan'] != 0);
|
$customer_lelong = array_filter($customer_lelong, fn($x) => $x['hargajualan'] != null && $x['hargajualan'] != 0);
|
||||||
@@ -62,12 +75,26 @@ class HomeController extends Controller
|
|||||||
$pembiayaan = $this->pembiayaanService->getPembiayaan($request->filter);
|
$pembiayaan = $this->pembiayaanService->getPembiayaan($request->filter);
|
||||||
|
|
||||||
$authUser = Auth::user();
|
$authUser = Auth::user();
|
||||||
$customerInfo = Http::withOptions(['verify' => config('app.api_verify')])
|
$customer_pkb = Http::withOptions(['verify' => config('app.api_verify')])
|
||||||
->get(config('api.url') . '/portal/customer/info', ['ic' => $authUser['icno']])
|
->get(config('api.url') . '/portal/customer/info', ['ic' => $authUser['icno']])
|
||||||
->json();
|
->json();
|
||||||
|
|
||||||
['gadai' => $customer_gadai, 'lelong' => $customer_lelong] = $customerInfo;
|
$customer_koop = Http::withOptions(['verify' => config('app.api_verify')])
|
||||||
|
->get(config('api.url_koop') . '/portal/customer/info', ['ic' => $authUser['icno']])
|
||||||
|
->json();
|
||||||
|
|
||||||
|
// ['gadai' => $customer_gadai, 'lelong' => $customer_lelong] = $customerInfo;
|
||||||
|
|
||||||
|
$customer_gadai = array_merge(
|
||||||
|
$customer_pkb['gadai'] ?? [],
|
||||||
|
$customer_koop['gadai'] ?? []
|
||||||
|
);
|
||||||
|
|
||||||
|
$customer_lelong = array_merge(
|
||||||
|
$customer_pkb['lelong'] ?? [],
|
||||||
|
$customer_koop['lelong'] ?? []
|
||||||
|
);
|
||||||
|
|
||||||
// only get lelong that is harga jualan that is not null or 0
|
// only get lelong that is harga jualan that is not null or 0
|
||||||
$customer_lelong = array_filter($customer_lelong, fn($x) => $x['hargajualan'] != null && $x['hargajualan'] != 0);
|
$customer_lelong = array_filter($customer_lelong, fn($x) => $x['hargajualan'] != null && $x['hargajualan'] != 0);
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\CompanyStatus;
|
||||||
use App\Models\LelongBid;
|
use App\Models\LelongBid;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
@@ -30,17 +31,29 @@ class InformationController extends Controller
|
|||||||
{
|
{
|
||||||
$auth_user = Auth::User();
|
$auth_user = Auth::User();
|
||||||
|
|
||||||
$CustomerInfo = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
$customer_pkb = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
||||||
|
$customer_koop = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url_koop') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
||||||
|
|
||||||
$pembiayaansemasa = [];
|
$pembiayaansemasa = [];
|
||||||
if(isset($CustomerInfo['gadai']))
|
if(isset($customer_pkb['gadai'])){
|
||||||
{
|
$pembiayaansemasa = array_map(function ($pkb) {
|
||||||
$pembiayaansemasa = $CustomerInfo['gadai'];
|
$pkb['tag_syarikat'] = CompanyStatus::COM_PKB;
|
||||||
|
return $pkb;
|
||||||
|
}, $customer_pkb['gadai']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($CustomerInfo['lelong'])){
|
if(isset($customer_koop['gadai'])){
|
||||||
if(sizeof($CustomerInfo['lelong']) > 0){
|
$array_koop = array_map(function ($koop) {
|
||||||
foreach($CustomerInfo['lelong'] as $index=>$lelong){
|
$koop['tag_syarikat'] = CompanyStatus::COM_KOOPPKB;
|
||||||
|
return $koop;
|
||||||
|
}, $customer_koop['gadai']);
|
||||||
|
$pembiayaansemasa = array_merge($pembiayaansemasa,$array_koop);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($customer_pkb['lelong'])){
|
||||||
|
if(sizeof($customer_pkb['lelong']) > 0){
|
||||||
|
foreach($customer_pkb['lelong'] as $index=>$lelong){
|
||||||
|
$customer_pkb['lelong'][$index]['tag_syarikat'] = CompanyStatus::COM_KOOPPKB;
|
||||||
$array_lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api-lelong.url') . '/api/portalApi',['norujukan' => $lelong['norujukan']])->json();
|
$array_lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api-lelong.url') . '/api/portalApi',['norujukan' => $lelong['norujukan']])->json();
|
||||||
|
|
||||||
if($array_lelong === null){
|
if($array_lelong === null){
|
||||||
@@ -48,13 +61,33 @@ class InformationController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($array_lelong['lelong'] !== null){
|
if($array_lelong['lelong'] !== null){
|
||||||
$CustomerInfo['lelong'][$index] = collect($lelong)->merge($array_lelong['lelong'])->toArray();
|
$customer_pkb['lelong'][$index] = collect($lelong)->merge($array_lelong['lelong'])->toArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$pembiayaansemasa = collect($pembiayaansemasa)->merge($CustomerInfo['lelong']);
|
$pembiayaansemasa = collect($pembiayaansemasa)->merge($customer_pkb['lelong']);
|
||||||
$pembiayaansemasa = $pembiayaansemasa->toArray();
|
$pembiayaansemasa = $pembiayaansemasa->toArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isset($customer_koop['lelong'])){
|
||||||
|
if(sizeof($customer_koop['lelong']) > 0){
|
||||||
|
foreach($customer_koop['lelong'] as $index=>$lelong){
|
||||||
|
$customer_koop['lelong'][$index]['tag_syarikat'] = CompanyStatus::COM_KOOPPKB;
|
||||||
|
$array_lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api-lelong.url_koop') . '/api/portalApi',['norujukan' => $lelong['norujukan']])->json();
|
||||||
|
|
||||||
|
if($array_lelong === null){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($array_lelong['lelong'] !== null){
|
||||||
|
$customer_koop['lelong'][$index] = collect($lelong)->merge($array_lelong['lelong'])->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$pembiayaansemasa = collect($pembiayaansemasa)->merge($customer_koop['lelong']);
|
||||||
|
$pembiayaansemasa = $pembiayaansemasa->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return response()->json($pembiayaansemasa,200);
|
return response()->json($pembiayaansemasa,200);
|
||||||
// return view('includes.information.pembiayaanaktif',compact('pembiayaansemasa'));
|
// return view('includes.information.pembiayaanaktif',compact('pembiayaansemasa'));
|
||||||
}
|
}
|
||||||
@@ -63,14 +96,16 @@ class InformationController extends Controller
|
|||||||
{
|
{
|
||||||
$auth_user = Auth::User();
|
$auth_user = Auth::User();
|
||||||
|
|
||||||
$CustomerInfo = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
$customer_pkb = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
||||||
|
$customer_koop = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url_koop') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
||||||
|
|
||||||
$melebihi6bulan = [];
|
$melebihi6bulan = [];
|
||||||
|
|
||||||
if(isset($CustomerInfo['gadai']))
|
if(isset($customer_pkb['gadai']))
|
||||||
{
|
{
|
||||||
foreach($CustomerInfo['gadai'] as $index=>$gadai)
|
foreach($customer_pkb['gadai'] as $index=>$gadai)
|
||||||
{
|
{
|
||||||
|
$gadai['tag_syarikat'] = CompanyStatus::COM_PKB;
|
||||||
if($gadai['tempoh'] >= 6)
|
if($gadai['tempoh'] >= 6)
|
||||||
{
|
{
|
||||||
array_push($melebihi6bulan,$gadai);
|
array_push($melebihi6bulan,$gadai);
|
||||||
@@ -78,6 +113,21 @@ class InformationController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isset($customer_koop['gadai']))
|
||||||
|
{
|
||||||
|
foreach($customer_koop['gadai'] as $index=>$gadai)
|
||||||
|
{
|
||||||
|
$gadai['tag_syarikat'] = CompanyStatus::COM_KOOPPKB;
|
||||||
|
|
||||||
|
if($gadai['tempoh'] >= 6)
|
||||||
|
{
|
||||||
|
array_push($melebihi6bulan,$gadai);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return response()->json($melebihi6bulan,200);
|
return response()->json($melebihi6bulan,200);
|
||||||
// return view('includes.information.melebihi6bulan',compact('melebihi6bulan'));
|
// return view('includes.information.melebihi6bulan',compact('melebihi6bulan'));
|
||||||
}
|
}
|
||||||
@@ -86,12 +136,13 @@ class InformationController extends Controller
|
|||||||
{
|
{
|
||||||
$auth_user = Auth::User();
|
$auth_user = Auth::User();
|
||||||
|
|
||||||
$CustomerInfo = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
$customer_pkb = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
||||||
|
$customer_koop = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url_koop') .'/portal/customer/info',['ic' => $auth_user['icno']])->json();
|
||||||
|
|
||||||
$lelong = [];
|
$lelong = [];
|
||||||
if(isset($CustomerInfo['lelong'])){
|
if(isset($customer_pkb['lelong'])){
|
||||||
if(sizeof($CustomerInfo['lelong']) > 0){
|
if(sizeof($customer_pkb['lelong']) > 0){
|
||||||
foreach($CustomerInfo['lelong'] as $index=>$lel){
|
foreach($customer_pkb['lelong'] as $index=>$lel){
|
||||||
$array_lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api-lelong.url') . '/api/portalApi',['norujukan' => $lel['norujukan']])->json();
|
$array_lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api-lelong.url') . '/api/portalApi',['norujukan' => $lel['norujukan']])->json();
|
||||||
|
|
||||||
if($array_lelong === null){
|
if($array_lelong === null){
|
||||||
@@ -99,11 +150,29 @@ class InformationController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($array_lelong['lelong'] !== null){
|
if($array_lelong['lelong'] !== null){
|
||||||
$CustomerInfo['lelong'][$index] = collect($lel)->merge($array_lelong['lelong'])->toArray();
|
$customer_pkb['lelong'][$index] = collect($lel)->merge($array_lelong['lelong'])->toArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$lelong = collect($lelong)->merge($CustomerInfo['lelong']);
|
$lelong = collect($lelong)->merge($customer_pkb['lelong']);
|
||||||
$lelong = $lelong->toArray();
|
$lelong = $lelong->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($customer_koop['lelong'])){
|
||||||
|
if(sizeof($customer_koop['lelong']) > 0){
|
||||||
|
foreach($customer_koop['lelong'] as $index=>$lel){
|
||||||
|
$array_lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api-lelong.url') . '/api/portalApi',['norujukan' => $lel['norujukan']])->json();
|
||||||
|
|
||||||
|
if($array_lelong === null){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($array_lelong['lelong'] !== null){
|
||||||
|
$customer_koop['lelong'][$index] = collect($lel)->merge($array_lelong['lelong'])->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$lelong = collect($lelong)->merge($customer_koop['lelong']);
|
||||||
|
$lelong = $lelong->toArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Middleware;
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||||
|
use Illuminate\Session\TokenMismatchException;
|
||||||
|
|
||||||
class VerifyCsrfToken extends Middleware
|
class VerifyCsrfToken extends Middleware
|
||||||
{
|
{
|
||||||
@@ -11,7 +12,19 @@ class VerifyCsrfToken extends Middleware
|
|||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $except = [
|
|
||||||
|
protected $except = [
|
||||||
'/pembayaran/backend'
|
'/pembayaran/backend'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function handle($request, \Closure $next)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return parent::handle($request, $next);
|
||||||
|
} catch (TokenMismatchException $e) {
|
||||||
|
// Redirect to login page if CSRF token is invalid
|
||||||
|
return redirect()->route('login')->with('logsemula', 'Sesi anda telah tamat. Sila log masuk semula.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Requests;
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
use App\Http\Controllers\InformationController;
|
use App\Http\Controllers\InformationController;
|
||||||
|
use App\Models\CompanyStatus;
|
||||||
use App\Rules\PaymentRules\CawanganPermitUjrahPayment;
|
use App\Rules\PaymentRules\CawanganPermitUjrahPayment;
|
||||||
use App\Rules\PaymentRules\NorujukanBukanFasa2;
|
use App\Rules\PaymentRules\NorujukanBukanFasa2;
|
||||||
use App\Rules\PaymentRules\NorujukanContractNotExceed12Month;
|
use App\Rules\PaymentRules\NorujukanContractNotExceed12Month;
|
||||||
@@ -53,9 +54,33 @@ class PaymentRequest extends FormRequest
|
|||||||
|
|
||||||
public function getPembiayaanFromNorujukan()
|
public function getPembiayaanFromNorujukan()
|
||||||
{
|
{
|
||||||
|
if(null !== $this->input('redirect_trolley') && $this->input('redirect_trolley') == 'trolley'){
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
$norujukanList = json_decode($this->totalSagInCartInput);
|
$norujukanList = json_decode($this->totalSagInCartInput);
|
||||||
|
$syarikatList = json_decode($this->listSyarikatinCartInput);
|
||||||
|
|
||||||
return array_map(fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x)->json()[0][0], $norujukanList);
|
$filterByStatus = function ($status) use ($norujukanList, $syarikatList) {
|
||||||
|
return array_filter(
|
||||||
|
array_map(function ($sag, $index) use ($syarikatList, $status) {
|
||||||
|
if (isset($syarikatList[$index]) && $syarikatList[$index] == $status) {
|
||||||
|
$HttpRequest = $status == CompanyStatus::COM_PKB ? Http::arrahn() : Http::arrahn_koop();
|
||||||
|
$array_temp = $HttpRequest->get('/api/gadai/norujukan/' . $sag)->json()[0][0] ?? null;
|
||||||
|
$array_temp['tag_syarikat'] = $status;
|
||||||
|
return $array_temp;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}, $norujukanList, array_keys($norujukanList))
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
$list_pkb = $filterByStatus(CompanyStatus::COM_PKB);
|
||||||
|
$list_koop = $filterByStatus(CompanyStatus::COM_KOOPPKB);
|
||||||
|
|
||||||
|
$array_merged_list = array_merge($list_pkb,$list_koop);
|
||||||
|
return $array_merged_list;
|
||||||
|
// return array_map(fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x)->json()[0][0], $norujukanList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPembiayaanAkanDilelong()
|
public function getPembiayaanAkanDilelong()
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class CompanyStatus extends Model
|
||||||
|
{
|
||||||
|
const COM_PKB = 1;
|
||||||
|
const COM_KOOPPKB = 2;
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
|
class PersonalCarts extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
use SoftDeletes;
|
||||||
|
|
||||||
|
protected $table = 'personal_carts';
|
||||||
|
protected $dates = ['deleted_at'];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'list_pkb' => 'array',
|
||||||
|
'list_koop' => 'array',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $guarded = [
|
||||||
|
'id',
|
||||||
|
'ic_no',
|
||||||
|
'list_pkb',
|
||||||
|
'list_koop',
|
||||||
|
'status_pkb',
|
||||||
|
'status_koop',
|
||||||
|
'payment_pkb',
|
||||||
|
'payment_koop',
|
||||||
|
'user_id',
|
||||||
|
'created_at',
|
||||||
|
'updated_at'
|
||||||
|
];
|
||||||
|
|
||||||
|
public $timestamps = true;
|
||||||
|
}
|
||||||
@@ -28,11 +28,21 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
Http::macro('arrahn', function () {
|
Http::macro('arrahn', function () {
|
||||||
return Http::withOptions(['verify' => config('app.api_verify')])->baseUrl(config('api.url'));
|
return Http::withOptions(['verify' => config('app.api_verify')])->baseUrl(config('api.url'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Http::macro('arrahn_koop', function () {
|
||||||
|
return Http::withOptions(['verify' => config('app.api_verify')])->baseUrl(config('api.url_koop'));
|
||||||
|
});
|
||||||
|
|
||||||
PendingRequest::macro('arrahn', function () {
|
PendingRequest::macro('arrahn', function () {
|
||||||
$this->options['verify'] = config('app.api_verify');
|
$this->options['verify'] = config('app.api_verify');
|
||||||
$this->baseUrl(config('api.url'));
|
$this->baseUrl(config('api.url'));
|
||||||
return $this;
|
return $this;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
PendingRequest::macro('arrahn_koop', function () {
|
||||||
|
$this->options['verify'] = config('app.api_verify');
|
||||||
|
$this->baseUrl(config('api.url_koop'));
|
||||||
|
return $this;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ use App\Models\TransactionOnlineStatus;
|
|||||||
use Billplz\Client;
|
use Billplz\Client;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Facades\Session;
|
||||||
|
|
||||||
class BillplzService
|
class BillplzService
|
||||||
{
|
{
|
||||||
@@ -14,24 +16,14 @@ class BillplzService
|
|||||||
public $callbackUrl;
|
public $callbackUrl;
|
||||||
public $paymentTitle;
|
public $paymentTitle;
|
||||||
public $redirectUrl;
|
public $redirectUrl;
|
||||||
|
public $company;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(string $company)
|
||||||
{
|
{
|
||||||
$appEnvironment = config('app.env');
|
$this->company = $company;
|
||||||
$billplzConfig = $appEnvironment == 'production' ? config('services.billplz.production') : config('services.billplz.sandbox');
|
$this->setupBillplzClient($company);
|
||||||
|
$this->setupUrls();
|
||||||
$client = Client::make($billplzConfig['api_key'], $billplzConfig['x_signature']);
|
$this->paymentTitle = config('services.billplz.paymentTitle');
|
||||||
$client->useVersion('v4');
|
|
||||||
|
|
||||||
if ($appEnvironment != 'production') {
|
|
||||||
$client->useSandbox();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->callbackUrl = route('pay.callback');
|
|
||||||
$this->redirectUrl = ['redirect_url' => route('pay.paymentStatus')];
|
|
||||||
$this->paymentTitle = "Pembayaran Ansuran";
|
|
||||||
$this->config = $billplzConfig;
|
|
||||||
$this->client = $client;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCollections()
|
public function getCollections()
|
||||||
@@ -39,8 +31,9 @@ class BillplzService
|
|||||||
return $this->client->collection()->all()->toArray();
|
return $this->client->collection()->all()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function createBill(array $data)
|
public function createBill(array $data,string $company)
|
||||||
{
|
{
|
||||||
|
|
||||||
$composed_data = [
|
$composed_data = [
|
||||||
$this->config['collection_id'],
|
$this->config['collection_id'],
|
||||||
...$data,
|
...$data,
|
||||||
@@ -94,6 +87,8 @@ class BillplzService
|
|||||||
|
|
||||||
public function webhook($request)
|
public function webhook($request)
|
||||||
{
|
{
|
||||||
|
// $this->setCompany(Session::get('company'));
|
||||||
|
// $this->setupBillplzClient($this->company);
|
||||||
try {
|
try {
|
||||||
$response = $this->client->webhook($request);
|
$response = $this->client->webhook($request);
|
||||||
|
|
||||||
@@ -145,13 +140,21 @@ class BillplzService
|
|||||||
|
|
||||||
public function getArrahnTransactions($queryData)
|
public function getArrahnTransactions($queryData)
|
||||||
{
|
{
|
||||||
|
$query_all = [];
|
||||||
|
|
||||||
if(isset($queryData['date'])){
|
if(isset($queryData['date'])){
|
||||||
return Http::arrahn()->get('/api/transaction/online/query', ['date' => $queryData['date']])->json();
|
$pkb_query = Http::arrahn()->get('/api/transaction/online/query', ['date' => $queryData['date']])->json();
|
||||||
|
$koop_query = Http::arrahn_koop()->get('/api/transaction/online/query', ['date' => $queryData['date']])->json();
|
||||||
|
$query_all = array_merge($pkb_query,$koop_query);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($queryData['billId'])){
|
if(isset($queryData['billId'])){
|
||||||
return Http::arrahn()->get('/api/transaction/online/query', ['billId' => $queryData['billId']])->json();
|
$pkb_query = Http::arrahn()->get('/api/transaction/online/query', ['billId' => $queryData['billId']])->json();
|
||||||
|
$koop_query = Http::arrahn_koop()->get('/api/transaction/online/query', ['billId' => $queryData['billId']])->json();
|
||||||
|
$query_all = array_merge($pkb_query,$koop_query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $query_all;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getBillplzTransactionReview($date)
|
public function getBillplzTransactionReview($date)
|
||||||
@@ -252,4 +255,61 @@ class BillplzService
|
|||||||
{
|
{
|
||||||
return array_map(fn($x) => $this->client->bill()->get($x)->toArray(), $billIds);
|
return array_map(fn($x) => $this->client->bill()->get($x)->toArray(), $billIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function setupBillplzClient($company)
|
||||||
|
{
|
||||||
|
$appEnvironment = config('app.env');
|
||||||
|
|
||||||
|
$billplzEnvironments = [
|
||||||
|
'PKB' => ($appEnvironment === 'production') ? config('services.billplz.production') : config('services.billplz.sandbox'),
|
||||||
|
'KOPKB' => ($appEnvironment === 'production') ? config('services.billplz.production_kopkb') : config('services.billplz.sandbox_kopkb'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$billplzConfig = $appEnvironment === 'production'
|
||||||
|
? ($billplzEnvironments[$company] ?? config('services.billplz.production'))
|
||||||
|
: ($billplzEnvironments[$company] ?? config('services.billplz.sandbox'));
|
||||||
|
|
||||||
|
$client = Client::make($billplzConfig['api_key'], ($this->isBase64($billplzConfig['x_signature'])) ? $billplzConfig['x_signature'] : base64_encode($billplzConfig['x_signature']));
|
||||||
|
$client->useVersion('v4');
|
||||||
|
|
||||||
|
if ($appEnvironment !== 'production') {
|
||||||
|
$client->useSandbox();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->config = $billplzConfig;
|
||||||
|
$this->client = $client;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setupUrls()
|
||||||
|
{
|
||||||
|
$this->callbackUrl = route('pay.callback');
|
||||||
|
$this->redirectUrl = ['redirect_url' => route('pay.paymentStatus')];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isBase64($string) {
|
||||||
|
if($this->isBase64UrlSafe($string)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/^[A-Za-z0-9+\/=]+$/', $string)) {
|
||||||
|
return base64_encode(base64_decode($string, true)) === $string;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isBase64UrlSafe($string) {
|
||||||
|
// Convert URL-safe Base64 to standard Base64
|
||||||
|
$standardBase64 = str_replace(['-', '_'], ['+', '/'], $string);
|
||||||
|
|
||||||
|
// Add padding if necessary
|
||||||
|
$remainder = strlen($standardBase64) % 4;
|
||||||
|
if ($remainder > 0) {
|
||||||
|
$standardBase64 .= str_repeat('=', 4 - $remainder);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to decode the string
|
||||||
|
$decoded = base64_decode($standardBase64, true);
|
||||||
|
|
||||||
|
return $decoded !== false; // Return true if it successfully decodes
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
use App\Http\Controllers\InformationController;
|
use App\Http\Controllers\InformationController;
|
||||||
|
use App\Models\CompanyStatus;
|
||||||
use Illuminate\Http\Client\Pool;
|
use Illuminate\Http\Client\Pool;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
@@ -23,6 +24,9 @@ class PembiayaanService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$pembiayaan = array_filter($getPembiayaan(), fn($x) => $x->hargajualan != null || $x->hargajualan != 0);
|
$pembiayaan = array_filter($getPembiayaan(), fn($x) => $x->hargajualan != null || $x->hargajualan != 0);
|
||||||
|
// $pembiayaan_filter = array_filter($getPembiayaan(),fn($x) => $x->tag_syarikat == CompanyStatus::COM_PKB);
|
||||||
|
// $pembiayaan_koop = array_filter($getPembiayaan(),fn($x) => $x->tag_syarikat == CompanyStatus::COM_PKB);
|
||||||
|
|
||||||
$pembiayaan = $this->setUpahTawarruq($pembiayaan);
|
$pembiayaan = $this->setUpahTawarruq($pembiayaan);
|
||||||
$pembiayaan = $this->formatPembiayaanData($pembiayaan);
|
$pembiayaan = $this->formatPembiayaanData($pembiayaan);
|
||||||
$pembiayaan = $this->checkPembiayaanPaymentDisabled($pembiayaan);
|
$pembiayaan = $this->checkPembiayaanPaymentDisabled($pembiayaan);
|
||||||
@@ -44,7 +48,12 @@ class PembiayaanService
|
|||||||
|
|
||||||
$getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) {
|
$getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) {
|
||||||
$jenisKeuntungan = $getJenisKeuntungan($x);
|
$jenisKeuntungan = $getJenisKeuntungan($x);
|
||||||
$upahTawarruq = Http::arrahn()->get('/api/upahtawarruq/' . $x->kodcaw . '/' . $x->norujukan, ['jeniskeuntungan' => $jenisKeuntungan])->json();
|
|
||||||
|
$CallableHttp = $x->tag_syarikat == CompanyStatus::COM_PKB
|
||||||
|
? Http::arrahn()
|
||||||
|
: Http::arrahn_koop();
|
||||||
|
|
||||||
|
$upahTawarruq = $CallableHttp->get('/api/upahtawarruq/' . $x->kodcaw . '/' . $x->norujukan, ['jeniskeuntungan' => $jenisKeuntungan])->json();
|
||||||
|
|
||||||
if ($jenisKeuntungan == 'onepercent') {
|
if ($jenisKeuntungan == 'onepercent') {
|
||||||
$x->upah_tawarruq = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah'];
|
$x->upah_tawarruq = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah'];
|
||||||
@@ -62,7 +71,10 @@ class PembiayaanService
|
|||||||
|
|
||||||
private function formatPembiayaanData($pembiayaan)
|
private function formatPembiayaanData($pembiayaan)
|
||||||
{
|
{
|
||||||
$allCawangan = Http::arrahn()->get('/api/cawangan')->json();
|
$arrahnCawangan = Http::arrahn()->get('/api/cawangan')->json();
|
||||||
|
$arrahnKoopCawangan = Http::arrahn_koop()->get('/api/cawangan')->json();
|
||||||
|
|
||||||
|
$allCawangan = array_merge($arrahnCawangan, $arrahnKoopCawangan);
|
||||||
|
|
||||||
$setCawanganFullName = function ($pembiayaan) use ($allCawangan) {
|
$setCawanganFullName = function ($pembiayaan) use ($allCawangan) {
|
||||||
$cawangan = array_filter($allCawangan, fn($x) => $x['kodcaw'] === $pembiayaan->kodcaw);
|
$cawangan = array_filter($allCawangan, fn($x) => $x['kodcaw'] === $pembiayaan->kodcaw);
|
||||||
@@ -100,13 +112,17 @@ class PembiayaanService
|
|||||||
return $formatted;
|
return $formatted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMarhunModalData($norujukan)
|
public function getMarhunModalData($norujukan,$tagsyarikat)
|
||||||
{
|
{
|
||||||
|
|
||||||
$gadaianDetails = Http::arrahn()->get('/api/gadai/norujukan/' . $norujukan)->json()[0][0];
|
$CallableHttp = $tagsyarikat == CompanyStatus::COM_PKB
|
||||||
|
? Http::arrahn()
|
||||||
|
: Http::arrahn_koop();
|
||||||
|
|
||||||
|
$gadaianDetails = $CallableHttp->get('/api/gadai/norujukan/' . $norujukan)->json()[0][0];
|
||||||
|
|
||||||
$attachCawanganName = function ($x) use ($gadaianDetails) {
|
$attachCawanganName = function ($x) use ($gadaianDetails,$CallableHttp) {
|
||||||
$x['cawangan_name'] = Http::arrahn()->get('/api/cawangan/detail/' . $gadaianDetails['kodcaw'])->json()[0]['cawangan'];
|
$x['cawangan_name'] = $CallableHttp->get('/api/cawangan/detail/' . $gadaianDetails['kodcaw'])->json()[0]['cawangan'];
|
||||||
return $x;
|
return $x;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
'url' => env('API_LELONG_URL', 'https://niklah.arrahn.com.my')
|
'url' => env('API_LELONG_URL', 'https://niklah.arrahn.com.my'),
|
||||||
|
'url_koop' => env('API_LELONG_URL_KOOP', 'https://niklah.arrahn.com.my')
|
||||||
];
|
];
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
'url' => env('API_URL'),
|
'url' => 'https://api2.arrahn.com.my',
|
||||||
|
'url_koop' => 'https://api3.arrahn.com.my'
|
||||||
];
|
];
|
||||||
|
|||||||
+13
-2
@@ -31,15 +31,26 @@ return [
|
|||||||
],
|
],
|
||||||
|
|
||||||
'billplz' => [
|
'billplz' => [
|
||||||
|
'paymentTitle' => 'Pembayaran Ansuran',
|
||||||
'production' => [
|
'production' => [
|
||||||
'api_key' => env('BILLPLZ_PRODUCTION_API_KEY', 'f3e82fe1-a422-4660-97f0-65cc59ff6c47'),
|
'api_key' => env('BILLPLZ_PRODUCTION_API_KEY', 'f3e82fe1-a422-4660-97f0-65cc59ff6c47'),
|
||||||
'x_signature' => env('BILLPLZ_PRODUCTION_X_SIGNATURE', 'S-alZUbzmD2_TF3vmrRqgehQ'),
|
'x_signature' => env('BILLPLZ_PRODUCTION_X_SIGNATURE', 'S-alZUbzmD2_TF3vmrRqgehQ'),
|
||||||
'collection_id' => env('BILLPLZ_SANDBOX_COLLECTION_ID', '5aosv2dg'),
|
'collection_id' => env('BILLPLZ_PRODUCTION_COLLECTION_ID', '5aosv2dg'),
|
||||||
|
],
|
||||||
|
'production_kopkb' => [
|
||||||
|
'api_key' => env('BILLPLZ_PRODUCTION_KOPKB_API_KEY', 'fb81e895-f307-4c9c-b43d-0b55033ee479'),
|
||||||
|
'x_signature' => env('BILLPLZ_PRODUCTION_KOPKB_X_SIGNATURE', 'afdb4035f1fe7f53cfdf3668765235f2714ee2ad6211c287a6ee52d170cb52b9b9e87d795213a9b4ede2de14076cdf2ced351343692194a28b0c23adfe3087bb'),
|
||||||
|
'collection_id' => env('BILLPLZ_PRODUCTION_KOPKB_COLLECTION_ID', '93mzsttm'),
|
||||||
],
|
],
|
||||||
'sandbox' => [
|
'sandbox' => [
|
||||||
'api_key' => env('BILLPLZ_SANDBOX_API_KEY', 'abecfd0c-98d8-4635-abc2-2fcba8c60c11'),
|
'api_key' => env('BILLPLZ_SANDBOX_API_KEY', 'abecfd0c-98d8-4635-abc2-2fcba8c60c11'),
|
||||||
'x_signature' => env('BILLPLZ_SANDBOX_X_SIGNATURE', 'S-GWr7z03XjAhqPsFfu_H5nQ'),
|
'x_signature' => env('BILLPLZ_SANDBOX_X_SIGNATURE', 'S-GWr7z03XjAhqPsFfu_H5nQ'),
|
||||||
'collection_id' => env('BILLPLZ_PRODUCTION_COLLECTION_ID', 'z0r4kjhi'),
|
'collection_id' => env('BILLPLZ_SANDBOX_COLLECTION_ID', 'z0r4kjhi'),
|
||||||
|
],
|
||||||
|
'sandbox_kopkb' => [
|
||||||
|
'api_key' => env('BILLPLZ_SANDBOX_KOPKB_API_KEY', '4b9218fd-04fb-4338-a067-982e6730d160'),
|
||||||
|
'x_signature' => env('BILLPLZ_SANDBOX_KOPKB_X_SIGNATURE', '0ac6e5438cf729754bb819860ed7de6d87d79b0d183212bf10581fca39a4c2d992697b605a706118032af37d31a85fed6637ff1233c56e6d2421bc22cca9d710'),
|
||||||
|
'collection_id' => env('BILLPLZ_SANDBOX_KOPKB_COLLECTION_ID', 'uae40muk'),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateCartsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('personal_carts', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('ic_no');
|
||||||
|
$table->json('list_pkb');
|
||||||
|
$table->json('list_koop');
|
||||||
|
$table->json('payment_pkb')->nullable();
|
||||||
|
$table->json('payment_koop')->nullable();
|
||||||
|
$table->enum('status_pkb', ['PENDING', 'PAID','NONE']);
|
||||||
|
$table->enum('status_koop', ['PENDING', 'PAID','NONE']);
|
||||||
|
$table->softDeletes();
|
||||||
|
$table->unsignedBigInteger('user_id');
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('personal_carts');
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+2
@@ -1,4 +1,6 @@
|
|||||||
function loadingbtn(){
|
function loadingbtn(){
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
loader.classList.remove('d-none');
|
||||||
$.notifyClose();
|
$.notifyClose();
|
||||||
// $(this).unbind("click");
|
// $(this).unbind("click");
|
||||||
$('#background').css('display', 'block');
|
$('#background').css('display', 'block');
|
||||||
|
|||||||
Vendored
+92
@@ -0,0 +1,92 @@
|
|||||||
|
let checked_rad = () =>{
|
||||||
|
const radios = document.querySelectorAll('input[name="radpembayaran"]');
|
||||||
|
// let rad_payment = document.getElementById('radpembayaran');
|
||||||
|
let btn_payment = document.getElementById('bayarsbmt');
|
||||||
|
let btn_payment_phone = document.getElementById('bayarsbmt-phone');
|
||||||
|
|
||||||
|
|
||||||
|
if(radios.checked){
|
||||||
|
btn_payment.disabled = false;
|
||||||
|
btn_payment_phone.disabled = false;
|
||||||
|
}else{
|
||||||
|
btn_payment.disabled = true;
|
||||||
|
btn_payment_phone.disabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const radios = document.querySelectorAll('input[name="radpembayaran"]');
|
||||||
|
|
||||||
|
radios.forEach((radio) => {
|
||||||
|
radio.addEventListener('change', function () {
|
||||||
|
let btn_payment = document.getElementById('bayarsbmt');
|
||||||
|
let btn_payment_phone = document.getElementById('bayarsbmt-phone');
|
||||||
|
let content1 = document.getElementById('divpkb');
|
||||||
|
let content2 = document.getElementById('divkopkb');
|
||||||
|
let whole_total = document.getElementById('spanjumlah');
|
||||||
|
let whole_total_phone = document.getElementById('spanjumlah-phone');
|
||||||
|
let inputs = document.querySelectorAll(`#div${this.value} input[type="number"]`);
|
||||||
|
let values = Array.from(inputs).map(input => parseFloat(input.value) || 0).reduce((sum,value) => sum + value, 0);
|
||||||
|
|
||||||
|
if (this.checked) {
|
||||||
|
if(this.value == 'kopkb'){
|
||||||
|
let inputsdisabled = document.querySelectorAll(`#divpkb input:not([type="radio"])`);
|
||||||
|
let inputenabled = document.querySelectorAll(`#divkopkb input`);
|
||||||
|
inputsdisabled.forEach(input => {
|
||||||
|
input.disabled = true;
|
||||||
|
});
|
||||||
|
inputenabled.forEach(input =>{
|
||||||
|
input.disabled = false;
|
||||||
|
});
|
||||||
|
content1?.classList.add('blurred');
|
||||||
|
content2?.classList.remove('blurred');
|
||||||
|
btn_payment.disabled = false;
|
||||||
|
btn_payment_phone.disabled = false;
|
||||||
|
whole_total.innerHTML = formatter.format(values + 1);
|
||||||
|
whole_total_phone.innerHTML = formatter.format(values + 1);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
let inputsdisabled = document.querySelectorAll(`#divkopkb input:not([type="radio"])`);
|
||||||
|
let inputenabled = document.querySelectorAll(`#divpkb input`);
|
||||||
|
|
||||||
|
inputsdisabled.forEach(input => {
|
||||||
|
input.disabled = true;
|
||||||
|
});
|
||||||
|
inputenabled.forEach(input =>{
|
||||||
|
input.disabled = false;
|
||||||
|
});
|
||||||
|
content2?.classList.add('blurred');
|
||||||
|
content1?.classList.remove('blurred');
|
||||||
|
btn_payment.disabled = false;
|
||||||
|
btn_payment_phone.disabled = false;
|
||||||
|
whole_total.innerHTML = formatter.format(values + 1);
|
||||||
|
whole_total_phone.innerHTML = formatter.format(values + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
let deleteCarts = () => {
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
if(loader)
|
||||||
|
loader.classList.remove('d-none');
|
||||||
|
|
||||||
|
fetch('/deletecarts')
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('HTTP error ' + response.status);
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
if (data) {
|
||||||
|
redirect_home();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => console.error(error));
|
||||||
|
}
|
||||||
|
|
||||||
|
let redirect_home = () => {
|
||||||
|
window.location.href = redirect_home_var;
|
||||||
|
}
|
||||||
|
|
||||||
+67
@@ -0,0 +1,67 @@
|
|||||||
|
async function fetchCartCount() {
|
||||||
|
try {
|
||||||
|
const response = await fetch('/showcarts-available');
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('Failed to fetch cart count');
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
let totalcount = 0;
|
||||||
|
totalcount += (data.status_koop === 'PENDING') ? 1 : 0;
|
||||||
|
totalcount += (data.status_pkb === 'PENDING') ? 1 : 0;
|
||||||
|
const cartCount = totalcount || 0;
|
||||||
|
|
||||||
|
updateCartCount(cartCount);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching cart count:', error);
|
||||||
|
updateCartCount(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateCartCount(itemCount) {
|
||||||
|
const cartCountElement = document.getElementById('cart-count');
|
||||||
|
const ahrefRedirect = document.getElementById('a-redirect');
|
||||||
|
|
||||||
|
if (itemCount > 0) {
|
||||||
|
cartCountElement.textContent = itemCount;
|
||||||
|
cartCountElement.classList.remove('d-none');
|
||||||
|
} else {
|
||||||
|
cartCountElement.textContent = '';
|
||||||
|
cartCountElement.classList.add('d-none');
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function redirectTrolley() {
|
||||||
|
const cartCountElement = document.getElementById('cart-count');
|
||||||
|
if(cartCountElement.textContent == 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let form = document.createElement('form');
|
||||||
|
form.method = 'POST';
|
||||||
|
form.action = routetrolley;
|
||||||
|
|
||||||
|
let csrfInput = document.createElement('input');
|
||||||
|
csrfInput.type = 'hidden';
|
||||||
|
csrfInput.name = '_token';
|
||||||
|
csrfInput.value = csrftoken;
|
||||||
|
form.appendChild(csrfInput);
|
||||||
|
|
||||||
|
let redirectInput = document.createElement('input');
|
||||||
|
redirectInput.type = 'hidden';
|
||||||
|
redirectInput.name = 'redirect_trolley';
|
||||||
|
redirectInput.value = 'trolley';
|
||||||
|
form.appendChild(redirectInput);
|
||||||
|
document.body.appendChild(form);
|
||||||
|
|
||||||
|
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
loader.classList.remove('d-none');
|
||||||
|
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchCartCount();
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
|
|
||||||
<!-- Control Center for Material UI Kit: parallax effects, scripts for the example pages etc -->
|
<!-- Control Center for Material UI Kit: parallax effects, scripts for the example pages etc -->
|
||||||
<!-- Google Maps Plugin -->
|
<!-- Google Maps Plugin -->
|
||||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script>
|
{{-- <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script> --}}
|
||||||
<!-- <script src="{{ asset('assets/js/material-kit/material-kit.min.js?v=3.0.0') }}" type="text/javascript"></script> -->
|
<!-- <script src="{{ asset('assets/js/material-kit/material-kit.min.js?v=3.0.0') }}" type="text/javascript"></script> -->
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -10,10 +10,90 @@
|
|||||||
.card-header {
|
.card-header {
|
||||||
padding: 1rem !important;
|
padding: 1rem !important;
|
||||||
}
|
}
|
||||||
|
.blurred {
|
||||||
|
filter: blur(2px); /* Apply a blur effect */
|
||||||
|
opacity: 0.5; /* Slight transparency */
|
||||||
|
/*pointer-events: none; */
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="number"]::-webkit-outer-spin-button,
|
||||||
|
input[type="number"]::-webkit-inner-spin-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="number"] {
|
||||||
|
-moz-appearance: textfield;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) { /* Target screens smaller than tablets */
|
||||||
|
.sticky-footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background-color: white; /* Adjust to match your theme */
|
||||||
|
height:100px;
|
||||||
|
box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1); /* Optional shadow for better visibility */
|
||||||
|
padding: 10px; /* Add some padding for spacing */
|
||||||
|
z-index: 1000; /* Ensure it stays above other content */
|
||||||
|
text-align: center; /* Center align buttons */
|
||||||
|
}
|
||||||
|
|
||||||
|
.sticky-footer .btn {
|
||||||
|
width: 45%; /* Ensure buttons fit well side-by-side */
|
||||||
|
margin: 0 5px; /* Add spacing between buttons */
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader-arrahn {
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader-arrahn img {
|
||||||
|
width: 100px; /* Image size */
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader-arrahn:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
|
border-radius: 50%;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay-arrahn {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 9998;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
<script>let redirect_home_var="{{ route('buffer') }}";</script>
|
||||||
|
|
||||||
<title>Bayar SAG | Portal Pelanggan</title>
|
<title>Bayar SAG | Portal Pelanggan</title>
|
||||||
<div class="container">
|
<div>
|
||||||
|
|
||||||
|
<div id="load-arrahn" class="d-none">
|
||||||
|
<div class="overlay-arrahn"></div>
|
||||||
|
<div class="loader-arrahn text-center">
|
||||||
|
<img src="{{ asset('argon/img/brand/ar-rahn-take-2.gif') }}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<form name="formpayment" method="post" action="{{ route('payment.engine') }}">
|
<form name="formpayment" method="post" action="{{ route('payment.engine') }}">
|
||||||
@csrf
|
@csrf
|
||||||
@@ -27,46 +107,38 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row justify-content-center">
|
<div class="d-md-flex">
|
||||||
<div class="col-md-10 col-sm-12">
|
<div class="col-sm-12 col-md-9">
|
||||||
|
@if($list_pkb)
|
||||||
|
<div class="col-md-11 col-sm-12 mb-4" id="divpkb">
|
||||||
<div class="card shadow">
|
<div class="card shadow">
|
||||||
<div class="card-header mb-4 bg-dark border-0">
|
<div class="card-header mb-4 bg-dark border-0" onclick="document.getElementById('pkb').click()">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<h4 class="text-white" style="margin-right: 1%;">Pembayaran</h4>
|
<h4 class="text-white" style="margin-right: 1%;">PKB</h4>
|
||||||
<i class="fas fa-clipboard-list fa-2x text-white"></i>
|
<div class="ms-auto">
|
||||||
|
<small class="text-white mr-2 font-weight-bold d-none d-md-inline">*sila tick di sini untuk memilih bayaran.</small>
|
||||||
|
<input type="radio" id="pkb" name="radpembayaran" value="pkb" class="ms-auto" style="width: 30px; height: 30px;" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<div style="overflow-x: auto;">
|
<div style="overflow-x: auto;">
|
||||||
<table class="table align-items-left" id="selepas_tawarruq" style="width: 100%;">
|
<table class="table align-items-left" id="selepas_tawarruq" style="width: 100%;">
|
||||||
<thead class="thead-light">
|
<thead class="thead-light">
|
||||||
<!-- <div style="margin-bottom: 15px; text-align: left;">
|
|
||||||
<i class="text-danger" style="font-size:12px;">Klik 'Klik Di Sini' untuk Pilihan Bayaran</i><br>
|
|
||||||
<i class="text-danger" style="font-size:12px;">Amaun Semasa -> Amaun Keuntungan Semasa Sahaja.</i><br>
|
|
||||||
<i class="text-danger" style="font-size:12px;">Amaun Lain -> Amaun Ansuran Pembiayaan & Amaun Keuntungan Semasa, Sila Masukkan Amaun</i>
|
|
||||||
</div> -->
|
|
||||||
<tr style="text-align: center;">
|
<tr style="text-align: center;">
|
||||||
<!-- <th width="10%">No</th> -->
|
<th width="10%">No Rujukan</th>
|
||||||
<th width="10%">No <br>Rujukan</th>
|
|
||||||
<th width="10%">Tarikh Akhir</th>
|
<th width="10%">Tarikh Akhir</th>
|
||||||
<th width="10%">Bayaran</th>
|
<th width="10%">Bayaran</th>
|
||||||
<th width="10%">Baki <br>Pembiayaan</th>
|
<th width="10%">Baki Pembiayaan</th>
|
||||||
<!-- <th width="10%">Pembiayaan Asal</th>
|
|
||||||
<th width="10%">Tempoh</th> -->
|
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@php $counter = 1;$jenisbayaran = 'tawarruq'; $totalupahasal = 1; $errorcount = 0; @endphp
|
@php $counter = 1;$jenisbayaran = 'tawarruq'; $totalupahasal = 1; $errorcount = 0; @endphp
|
||||||
@foreach($arraybayar as $index=>$bayar)
|
@foreach($list_pkb as $index=>$bayar)
|
||||||
@if($bayar['hargajualan'] != '')
|
@if($bayar['hargajualan'] != '')
|
||||||
<tbody class="list" style="text-align: center;">
|
<tbody class="list" style="text-align: center;">
|
||||||
<tr>
|
<tr>
|
||||||
<!-- <td>
|
|
||||||
{{ $counter }}
|
|
||||||
</td> -->
|
|
||||||
<td>
|
<td>
|
||||||
{{ $bayar['norujukan'] }}
|
{{ $bayar['norujukan'] }}
|
||||||
</td>
|
</td>
|
||||||
@@ -96,38 +168,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@endphp
|
@endphp
|
||||||
<!-- <td>
|
<td><input name="txtbayarantawarruq" type="number" step="0.01" value="{{ sprintf('%0.2f', $upahtawarruq) }}" class="form-control" style="text-align: center; border: outset; -moz-appearance: textfield;-webkit-appearance: none;appearance: none;" data-bakipjm="{{ $bayar['bakipjm'] }}" data-upah="{{ $upahtawarruq }}" data-nm="{{ $bayar['nilaimarhun'] }}" data-taglel="{{ $bayar['taglel'] }}">
|
||||||
|
|
||||||
<select name="sltbayaran" value="{{ old('sltbayaran') ? old('sltbayaran') : '' }}" class="form-control mb-2" data-upah="{{ $upahtawarruq }}" data-jenis="tawarruq" style="text-align: center; border: revert;">
|
|
||||||
<option selected disabled></option>
|
|
||||||
<option value="fixed">Amaun Semasa</option>
|
|
||||||
<option value="otheramount">Amaun Lain</option>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<input type="text" value="{{ old('txtbayarantawarruq') ? old('txtbayarantawarruq') : '' }}" data-bakipjm="{{ $bayar['bakipjm'] }}" data-taglel="{{ $bayar['taglel'] }}" data-upah="{{ $upahtawarruq }}" data-nm="{{ $bayar['nilaimarhun'] }}" data-jenis="tawarruq" name="txtbayarantawarruq" class="form-control txtbayaran" style="text-align: center; border: outset;" />
|
|
||||||
<input type="hidden" name="txtbayaranhidden[]" class="bayaran" style="text-align: center;" />
|
|
||||||
<input type="hidden" name="txtjenisbayaran[]" value="{{ $jenisbayaran }}" style="text-align: center;" />
|
|
||||||
<input type="hidden" name="txtnorujukanhidden[]" value="{{ $bayar['norujukan'] }}" style="text-align: center;" />
|
|
||||||
<input type="hidden" name="txtkodcawhidden[]" value="{{ $bayar['kodcaw'] }}" style="text-align: center;" />
|
|
||||||
</td>-->
|
|
||||||
<td><input name="txtbayarantawarruq" type="number" step="0.01" value="{{ sprintf('%0.2f', $upahtawarruq) }}" class="form-control" style="text-align: center; border: outset;" data-bakipjm="{{ $bayar['bakipjm'] }}" data-upah="{{ $upahtawarruq }}" data-nm="{{ $bayar['nilaimarhun'] }}" data-taglel="{{ $bayar['taglel'] }}">
|
|
||||||
<input type="hidden" name="txtbayaranhidden[]" value="{{ $upahtawarruq }}" class="bayaran" style="text-align: center;" />
|
<input type="hidden" name="txtbayaranhidden[]" value="{{ $upahtawarruq }}" class="bayaran" style="text-align: center;" />
|
||||||
<input type="hidden" name="txtjenisbayaran[]" value="{{ $jenisbayaran }}" style="text-align: center;" />
|
<input type="hidden" name="txtjenisbayaran[]" value="{{ $jenisbayaran }}" style="text-align: center;" />
|
||||||
<input type="hidden" name="txtnorujukanhidden[]" value="{{ $bayar['norujukan'] }}" style="text-align: center;" />
|
<input type="hidden" name="txtnorujukanhidden[]" value="{{ $bayar['norujukan'] }}" style="text-align: center;" />
|
||||||
<input type="hidden" name="txtkodcawhidden[]" value="{{ $bayar['kodcaw'] }}" style="text-align: center;" />
|
<input type="hidden" name="txtkodcawhidden[]" value="{{ $bayar['kodcaw'] }}" style="text-align: center;" />
|
||||||
|
<input type="hidden" name="txtcompany" value="pkb"/>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<input style="border: none; text-align: center;" type="text" value="{{ number_format($bayar['bakipjm'],2) }}" class="bakibaru" readonly>
|
<input style="border: none; text-align: center;" type="text" value="{{ number_format($bayar['bakipjm'],2) }}" class="bakibaru" readonly>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<!-- <td>
|
|
||||||
{{ number_format($bayar['pinjaman'],2) }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ $bayar['tempoh'] }}
|
|
||||||
</td> -->
|
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@php $counter++; @endphp
|
@php $counter++; @endphp
|
||||||
@@ -138,52 +189,190 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row pb-4 font-weight-light">
|
|
||||||
<div class="col-6">
|
|
||||||
<label style="text-transform: uppercase; text-align: center;"><strong>Fi Pengurusan</strong></label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-6">
|
<span class="text-danger d-none" id="spanamarankosong">*Jangan biarkan kotak bayaran ditinggalkan kosong, Sila masukkan amaun!</span>
|
||||||
<span class="text-primary"><strong>RM<span>1.00</span></strong></span>
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if($list_koop)
|
||||||
|
<div class="col-md-11 col-sm-12" id="divkopkb">
|
||||||
|
<div class="card shadow">
|
||||||
|
<div class="card-header mb-4 bg-dark border-0" onclick="document.getElementById('kopkb').click()">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="d-flex">
|
||||||
|
<h4 class="text-white" style="margin-right: 1%;">KOPKB</h4>
|
||||||
|
<div class="ms-auto">
|
||||||
|
<small class="text-white mr-2 font-weight-bold d-none d-md-inline">*sila tick di sini untuk memilih bayaran.</small>
|
||||||
|
<input type="radio" id="kopkb" name="radpembayaran" value="kopkb" class="ms-auto" style="width: 30px; height: 30px;" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row pb-4 font-weight-light">
|
<div class="form">
|
||||||
<div class="col-6">
|
<div style="overflow-x: auto;">
|
||||||
<label style="text-transform: uppercase; text-align: center;"><strong>Jumlah Keseluruhan</strong></label>
|
<table class="table align-items-left" id="selepas_tawarruq_koop" style="width: 100%;">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr style="text-align: center;">
|
||||||
|
<th width="10%">No <br>Rujukan</th>
|
||||||
|
<th width="10%">Tarikh Akhir</th>
|
||||||
|
<th width="10%">Bayaran</th>
|
||||||
|
<th width="10%">Baki <br>Pembiayaan</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
@php $counter = 1;$jenisbayaran = 'tawarruq'; $totalupahasal = 1; $errorcount = 0; @endphp
|
||||||
|
@foreach($list_koop as $index=>$bayar)
|
||||||
|
@if($bayar['hargajualan'] != '')
|
||||||
|
<tbody class="list" style="text-align: center;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ $bayar['norujukan'] }}
|
||||||
|
</td>
|
||||||
|
@php
|
||||||
|
|
||||||
|
$t_matang = strtotime($bayar['t_matang']);
|
||||||
|
$t_akhir = date("d/m/Y", $t_matang);
|
||||||
|
|
||||||
|
if($bayar['lelong_tawarruq'] == 0)
|
||||||
|
{
|
||||||
|
$t_matang = strtotime($bayar['t_matang1']);
|
||||||
|
$t_akhir = date("d/m/Y", $t_matang);
|
||||||
|
}
|
||||||
|
@endphp
|
||||||
|
<td>
|
||||||
|
{{ $t_akhir }}
|
||||||
|
</td>
|
||||||
|
@php
|
||||||
|
$upahtawarruq = $bayar['upah_tawarruq'];
|
||||||
|
$upahtawarruq = floatval(str_replace(',','',$upahtawarruq));
|
||||||
|
|
||||||
|
$totalupahasal = $totalupahasal + $upahtawarruq;
|
||||||
|
|
||||||
|
|
||||||
|
if(floatval($upahtawarruq) == 0){
|
||||||
|
$errorcount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@endphp
|
||||||
|
<td><input name="txtbayarantawarruq" type="number" step="0.01" value="{{ sprintf('%0.2f', $upahtawarruq) }}" class="form-control" style="text-align: center; border: outset;" data-bakipjm="{{ $bayar['bakipjm'] }}" data-upah="{{ $upahtawarruq }}" data-nm="{{ $bayar['nilaimarhun'] }}" data-taglel="{{ $bayar['taglel'] }}">
|
||||||
|
<input type="hidden" name="txtbayaranhidden[]" value="{{ $upahtawarruq }}" class="bayaran" style="text-align: center;" />
|
||||||
|
<input type="hidden" name="txtjenisbayaran[]" value="{{ $jenisbayaran }}" style="text-align: center;" />
|
||||||
|
<input type="hidden" name="txtnorujukanhidden[]" value="{{ $bayar['norujukan'] }}" style="text-align: center;" />
|
||||||
|
<input type="hidden" name="txtkodcawhidden[]" value="{{ $bayar['kodcaw'] }}" style="text-align: center;" />
|
||||||
|
<input type="hidden" name="txtcompany" value="kopkb"/>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<input style="border: none; text-align: center;" type="text" value="{{ number_format($bayar['bakipjm'],2) }}" class="bakibaru" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
@php $counter++; @endphp
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-6">
|
|
||||||
<span class="text-primary"><strong>RM<span id="spanjumlah">{{ number_format($totalupahasal,2) }}</span></strong></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="text-danger d-none" id="spanamarankosong">*Jangan biarkan kotak bayaran ditinggalkan kosong, Sila masukkan amaun!</span>
|
<span class="text-danger d-none" id="spanamarankosong">*Jangan biarkan kotak bayaran ditinggalkan kosong, Sila masukkan amaun!</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="d-none d-sm-none d-md-block col-xl-3">
|
||||||
<div class="col-md-10 col-sm-12">
|
<div class="col-md-12">
|
||||||
<div class="card shadow">
|
<div class="card shadow">
|
||||||
<div class="form" style="text-align: center;">
|
<div class="card-header mb-4 bg-dark border-0">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="d-flex">
|
||||||
|
<h4 class="text-white" style="margin-right: 1%;">Pembayaran</h4>
|
||||||
|
<i class="ms-auto fas fa-shopping-cart fa-2x text-white"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row pb-4 font-weight-light">
|
||||||
|
<div class="col-8">
|
||||||
|
<label style="text-transform: uppercase; text-align: center;"><strong>Fi Pengurusan</strong></label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-4">
|
||||||
|
<span class="text-primary"><strong>RM<span>1.00</span></strong></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row pb-4 font-weight-light">
|
||||||
|
<div class="col-8">
|
||||||
|
<label style="text-transform: uppercase; text-align: center;"><strong>Jumlah Keseluruhan</strong></label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-4">
|
||||||
|
<span class="text-primary"><strong>RM<span id="spanjumlah">1.00</span></strong></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div class="d-flex justify-content-between col-12 mt-3 align-self-end"> -->
|
<div class="col-md-12 col-sm-12">
|
||||||
<div class="d-flex justify-content-center col-12 mt-3 align-self-end">
|
<div class="card shadow">
|
||||||
<a href="{{ route('home') }}" type="button" class="btn btn-danger">Batal</a>
|
<div class="form" style="text-align: center;">
|
||||||
<!-- <button type="submit" id="bayarsbmt" class="btn btn-primary" disabled onclick="loadingbtn();">Bayar</button> -->
|
</div>
|
||||||
@if($totalupahasal == 1.00 || $errorcount > 0)
|
</div>
|
||||||
<button type="submit" id="bayarsbmt" class="btn btn-primary" disabled onclick="loadingbtn();">Bayar</button>
|
|
||||||
@else
|
<!-- <div class="d-flex justify-content-between col-12 mt-3 align-self-end"> -->
|
||||||
<button type="submit" id="bayarsbmt" class="btn btn-primary" onclick="loadingbtn();">Bayar</button>
|
<div class="d-flex justify-content-center col-12 mt-3 align-self-end">
|
||||||
@endif
|
<a onclick="deleteCarts()" type="button" class="cursor-pointer btn btn-danger">Batal</a>
|
||||||
|
<!-- <button type="submit" id="bayarsbmt" class="btn btn-primary" disabled onclick="loadingbtn();">Bayar</button> -->
|
||||||
|
@if($totalupahasal == 1.00 || $errorcount > 0)
|
||||||
|
<button type="submit" id="bayarsbmt" class="btn btn-primary" disabled onclick="loadingbtn();">Bayar</button>
|
||||||
|
@else
|
||||||
|
<button type="submit" id="bayarsbmt" class="btn btn-primary" onclick="loadingbtn();">Bayar</button>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<small>*sila klik bayar untuk transaksi bayaran berikutnya.</small>
|
||||||
|
<!-- Sticky Footer for Mobile View -->
|
||||||
|
<div class="sticky-footer d-sm-block d-md-none">
|
||||||
|
<div>
|
||||||
|
<div class="d-sm-flex">
|
||||||
|
<div class="font-weight-light small d-flex">
|
||||||
|
<div class="col-3">
|
||||||
|
<label style="text-transform: uppercase; text-align: center;font-size: 10px;"><strong>Fi Pengurusan</strong></label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-3">
|
||||||
|
<span class="text-primary"><strong>RM<span>1.00</span></strong></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-3">
|
||||||
|
<label style="text-transform: uppercase; text-align: center;font-size: 10px;"><strong>Jumlah Keseluruhan</strong></label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-3">
|
||||||
|
<span class="text-primary"><strong>RM<span id="spanjumlah-phone">1.00</span></strong></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="">
|
||||||
|
<a href="{{ route('home') }}" type="button" class="btn btn-danger">Batal</a>
|
||||||
|
@if($totalupahasal == 1.00 || $errorcount > 0)
|
||||||
|
<button type="submit" id="bayarsbmt-phone" class="btn btn-primary" disabled onclick="loadingbtn();">Bayar</button>
|
||||||
|
@else
|
||||||
|
<button type="submit" id="bayarsbmt-phone" class="btn btn-primary" onclick="loadingbtn();">Bayar</button>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="{{ asset('js/miscellaneous/cart.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$(window).keydown(function(event) {
|
$(window).keydown(function(event) {
|
||||||
@@ -197,7 +386,7 @@
|
|||||||
$('#selepas_tawarruq > tbody > tr').each(function() {
|
$('#selepas_tawarruq > tbody > tr').each(function() {
|
||||||
$(this).find("td:gt(0)").each(function() {
|
$(this).find("td:gt(0)").each(function() {
|
||||||
// console.log($(this).html());
|
// console.log($(this).html());
|
||||||
console.log($("input[name=txtbayarantawarruq]").val());
|
// console.log($("input[name=txtbayarantawarruq]").val());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -235,6 +424,23 @@
|
|||||||
"pagingType": "simple",
|
"pagingType": "simple",
|
||||||
"paging": false
|
"paging": false
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var selepastawarruq_kooptable = $('#selepas_tawarruq_koop').DataTable({
|
||||||
|
"bLengthChange": false,
|
||||||
|
"bFilter": false,
|
||||||
|
"bInfo": false,
|
||||||
|
language: {
|
||||||
|
'paginate': {
|
||||||
|
'previous': '<span class="fas fa-backward"></span>',
|
||||||
|
'next': '<span class="fas fa-forward"></span>'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scrollX": true,
|
||||||
|
"pageLength": 10,
|
||||||
|
"pagingType": "simple",
|
||||||
|
"paging": false
|
||||||
|
|
||||||
});
|
});
|
||||||
// var selepastawarruqtable = $('#ringkasan_bayaran').DataTable({
|
// var selepastawarruqtable = $('#ringkasan_bayaran').DataTable({
|
||||||
// "bLengthChange": false,
|
// "bLengthChange": false,
|
||||||
@@ -270,37 +476,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name=txtbayaranarrahn]").change(function(e) {
|
|
||||||
|
|
||||||
let upah = $(this).data('upah');
|
|
||||||
let pinjaman = $(this).data('pinjaman');
|
|
||||||
let jenis = $(this).data('jenis');
|
|
||||||
let nm = $(this).data('nm');
|
|
||||||
let taglel = $(this).data('taglel');
|
|
||||||
|
|
||||||
let bayar = Number(this.value);
|
|
||||||
|
|
||||||
let errorlebih = nm - (nm * 0.1);
|
|
||||||
|
|
||||||
if (bayar > parseFloat(errorlebih)) {
|
|
||||||
$("#bayarsbmt").prop('disabled', false);
|
|
||||||
Swal.fire(
|
|
||||||
'Amaran!',
|
|
||||||
'Baki Pembiayaan tidak boleh kurang 10% daripada Nilai Marhun',
|
|
||||||
'error'
|
|
||||||
)
|
|
||||||
$(this).val(upah);
|
|
||||||
$(this).closest('tr').find('.bayaran').val(upah);
|
|
||||||
calculateall(jenis, taglel);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$(this).closest('tr').find('.bayaran').val(this.value);
|
|
||||||
calculateall(jenis, taglel);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
$("input[name=txtbayarantawarruq]").change(function(e) {
|
$("input[name=txtbayarantawarruq]").change(function(e) {
|
||||||
// $("input[name=txtbayarantawarruq]").click(function(e) {
|
// $("input[name=txtbayarantawarruq]").click(function(e) {
|
||||||
@@ -392,30 +567,43 @@
|
|||||||
var sumtawarruq = 0;
|
var sumtawarruq = 0;
|
||||||
var sum = 0;
|
var sum = 0;
|
||||||
var counterrorbayar = 0;
|
var counterrorbayar = 0;
|
||||||
|
var selectedRadio = document.querySelector('input[name="radpembayaran"]:checked');
|
||||||
|
|
||||||
$('#belum_tawarruq').find('input[name=txtbayaranarrahn]').each(function() {
|
if (!selectedRadio) {
|
||||||
sumarrahn += parseFloat(this.value) || 0;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.value <= 0 || this.value == '') {
|
if(selectedRadio.value == 'kopkb'){
|
||||||
counterrorbayar++;
|
$('#selepas_tawarruq_koop').find('input[name=txtbayarantawarruq]').each(function(index) {
|
||||||
}
|
|
||||||
|
|
||||||
});
|
var bayaranselepas = (this.value * 100) / 10;
|
||||||
|
// bayaranselepas = Math.round(bayaranselepas);
|
||||||
|
bayaranselepas = bayaranselepas / 10;
|
||||||
|
|
||||||
$('#selepas_tawarruq').find('input[name=txtbayarantawarruq]').each(function(index) {
|
$('#spantransaksi' + (index + 1)).text(formatter.format(bayaranselepas));
|
||||||
|
|
||||||
var bayaranselepas = (this.value * 100) / 10;
|
sumtawarruq += parseFloat(bayaranselepas) || 0;
|
||||||
// bayaranselepas = Math.round(bayaranselepas);
|
|
||||||
bayaranselepas = bayaranselepas / 10;
|
|
||||||
|
|
||||||
$('#spantransaksi' + (index + 1)).text(formatter.format(bayaranselepas));
|
if (this.value <= 0 || this.value == '') {
|
||||||
|
counterrorbayar++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
$('#selepas_tawarruq').find('input[name=txtbayarantawarruq]').each(function(index) {
|
||||||
|
|
||||||
sumtawarruq += parseFloat(bayaranselepas) || 0;
|
var bayaranselepas = (this.value * 100) / 10;
|
||||||
|
// bayaranselepas = Math.round(bayaranselepas);
|
||||||
|
bayaranselepas = bayaranselepas / 10;
|
||||||
|
|
||||||
if (this.value <= 0 || this.value == '') {
|
$('#spantransaksi' + (index + 1)).text(formatter.format(bayaranselepas));
|
||||||
counterrorbayar++;
|
|
||||||
}
|
sumtawarruq += parseFloat(bayaranselepas) || 0;
|
||||||
});
|
|
||||||
|
if (this.value <= 0 || this.value == '') {
|
||||||
|
counterrorbayar++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
sum = sumarrahn + sumtawarruq;
|
sum = sumarrahn + sumtawarruq;
|
||||||
sum = (sum * 100) / 10;
|
sum = (sum * 100) / 10;
|
||||||
@@ -433,6 +621,7 @@
|
|||||||
$("#spanbayaranarrahn").text(sumarrahn.toFixed(2));
|
$("#spanbayaranarrahn").text(sumarrahn.toFixed(2));
|
||||||
$("#spanbayarantawarruq").text(sumtawarruq.toFixed(2));
|
$("#spanbayarantawarruq").text(sumtawarruq.toFixed(2));
|
||||||
$('#spanjumlah').text(formatter.format(sum + 1));
|
$('#spanjumlah').text(formatter.format(sum + 1));
|
||||||
|
$('#spanjumlah-phone').text(formatter.format(sum + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.addEventListener) {
|
if (document.addEventListener) {
|
||||||
@@ -450,7 +639,10 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
var inputs = document.querySelectorAll('input[name="txtbayarantawarruq"]');
|
/*check radio button enabled*/
|
||||||
|
checked_rad();
|
||||||
|
|
||||||
|
var inputs = document.querySelectorAll('input[name="txtbayarantawarruq"]:not([disabled])');
|
||||||
|
|
||||||
Array.from(inputs).forEach(function(input) {
|
Array.from(inputs).forEach(function(input) {
|
||||||
var timer;
|
var timer;
|
||||||
@@ -458,9 +650,9 @@
|
|||||||
input.addEventListener('input', function() {
|
input.addEventListener('input', function() {
|
||||||
|
|
||||||
const stringHasPoint = input.value.indexOf('.') !== -1;
|
const stringHasPoint = input.value.indexOf('.') !== -1;
|
||||||
const stringHasMoreThanTwoDecimal = input.value.split('.')[1].length > 2;
|
const stringHasMoreThanTwoDecimal = (stringHasPoint) ? input.value.split('.')[1].length > 2 : false;
|
||||||
const lastDecimalIsNotZeroOrFive = input.value.split('.')[1].slice(-1) !== '0' && input.value.split('.')[1].slice(-1) !== '5';
|
const lastDecimalIsNotZeroOrFive = (stringHasPoint) ? input.value.split('.')[1].slice(-1) !== '0' && input.value.split('.')[1].slice(-1) !== '5' : false;
|
||||||
const stringHasTwoDecimalNumber = input.value.split('.')[1].length === 2;
|
const stringHasTwoDecimalNumber = (stringHasPoint) ? input.value.split('.')[1].length === 2 : false;
|
||||||
|
|
||||||
if (stringHasPoint && stringHasMoreThanTwoDecimal) {
|
if (stringHasPoint && stringHasMoreThanTwoDecimal) {
|
||||||
input.value = input.value.split('.')[0] + '.' + input.value.split('.')[1].substring(0, 2);
|
input.value = input.value.split('.')[0] + '.' + input.value.split('.')[1].substring(0, 2);
|
||||||
|
|||||||
@@ -95,7 +95,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$koskeuntungan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/upahtawarruq/' . $bt['kodcaw'] . '/' . $bt['norujukan'])->json();
|
$koskeuntungan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/upahtawarruq/' . $bt['kodcaw'] . '/' . $bt['norujukan'],['jeniskeuntungan' => ($bt['tagbaru'] == 1) ? 'onepercent' : 'asal'])->json();
|
||||||
$keuntungan_1bln = $bt['pinjaman'] * ($bt['kadarupah'] / 100);
|
$keuntungan_1bln = $bt['pinjaman'] * ($bt['kadarupah'] / 100);
|
||||||
$ten_percent = floatval($bt['nilaimarhun']) * 0.1;
|
$ten_percent = floatval($bt['nilaimarhun']) * 0.1;
|
||||||
$baki_pinjaman = floatval($bt['bakipjm']);
|
$baki_pinjaman = floatval($bt['bakipjm']);
|
||||||
@@ -194,7 +194,6 @@
|
|||||||
let berat = $(e).data('berat');
|
let berat = $(e).data('berat');
|
||||||
let nm = $(e).data('nm');
|
let nm = $(e).data('nm');
|
||||||
|
|
||||||
console.log(pinjaman,upah12,bakipjm,berat,nm);
|
|
||||||
|
|
||||||
$('#pembiayaan').text('RM ' + pinjaman);
|
$('#pembiayaan').text('RM ' + pinjaman);
|
||||||
$('#bpembiayaan').text('RM ' + bakipjm);
|
$('#bpembiayaan').text('RM ' + bakipjm);
|
||||||
|
|||||||
@@ -693,7 +693,6 @@ var hargaemastable = $('#harga_emas').DataTable({
|
|||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
namacawangan = data[0].namacaw;
|
namacawangan = data[0].namacaw;
|
||||||
console.log(namacawangan);
|
|
||||||
namacawangan = namacawangan.toLowerCase().substring(8).replace(/\b[a-z]/g, function(value) {
|
namacawangan = namacawangan.toLowerCase().substring(8).replace(/\b[a-z]/g, function(value) {
|
||||||
return value.toUpperCase();
|
return value.toUpperCase();
|
||||||
});
|
});
|
||||||
@@ -835,7 +834,6 @@ var hargaemastable = $('#harga_emas').DataTable({
|
|||||||
async: false,
|
async: false,
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
console.log(data);
|
|
||||||
for(i in data){
|
for(i in data){
|
||||||
datalelong.push(data[i]);
|
datalelong.push(data[i]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,13 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
<title>Home | Portal Pelanggan</title>
|
<title>Home | Portal Pelanggan</title>
|
||||||
|
|
||||||
|
<div id="load-arrahn" class="d-none">
|
||||||
|
<div class="overlay-arrahn"></div>
|
||||||
|
<div class="loader-arrahn text-center">
|
||||||
|
<img src="{{ asset('argon/img/brand/ar-rahn-take-2.gif') }}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row mt-n9 top-0">
|
<div class="row mt-n9 top-0">
|
||||||
<x-dashboard-card
|
<x-dashboard-card
|
||||||
title="Jum. Pembiayaan Semasa"
|
title="Jum. Pembiayaan Semasa"
|
||||||
@@ -137,27 +144,29 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
let totalSagInCart = [];
|
let totalSagInCart = [];
|
||||||
|
let totaltagSyarikat = [];
|
||||||
let updateSagInCart = function(norujukan){
|
let updateSagInCart = function(norujukan,syarikat){
|
||||||
|
|
||||||
let isNorujukanIsAlreadyInCart = totalSagInCart.includes(norujukan);
|
let isNorujukanIsAlreadyInCart = totalSagInCart.includes(norujukan);
|
||||||
|
|
||||||
if(isNorujukanIsAlreadyInCart){
|
if(isNorujukanIsAlreadyInCart){
|
||||||
totalSagInCart = totalSagInCart.filter(x => x != norujukan);
|
let index = totalSagInCart.indexOf(norujukan);
|
||||||
}
|
totalSagInCart = totalSagInCart.filter(x => x != norujukan);
|
||||||
|
totaltagSyarikat.splice(index, 1);
|
||||||
|
}
|
||||||
|
|
||||||
if(! isNorujukanIsAlreadyInCart){
|
if(! isNorujukanIsAlreadyInCart){
|
||||||
totalSagInCart.push(norujukan);
|
totalSagInCart.push(norujukan);
|
||||||
|
totaltagSyarikat.push(syarikat);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add event listener to checkboxes to update total count customer wants to pay
|
// Add event listener to checkboxes to update total count customer wants to pay
|
||||||
$('#main-table').on('input', 'input[type="checkbox"][name="chkboxsag[]"]', function(el) {
|
$('#main-table').on('input', 'input[type="checkbox"][name="chkboxsag[]"]', function(el) {
|
||||||
let norujukan = el.target.dataset.norujukan;
|
let norujukan = el.target.dataset.norujukan;
|
||||||
|
let tagsyarikat = el.target.dataset.syarikat;
|
||||||
let isNorujukanIsChecked = el.target.checked;
|
let isNorujukanIsChecked = el.target.checked;
|
||||||
|
|
||||||
updateSagInCart(norujukan);
|
updateSagInCart(norujukan,tagsyarikat);
|
||||||
|
|
||||||
document.getElementById('totalsag').innerHTML = totalSagInCart.length;
|
document.getElementById('totalsag').innerHTML = totalSagInCart.length;
|
||||||
});
|
});
|
||||||
@@ -172,8 +181,69 @@
|
|||||||
totalSagInCartInput.value = JSON.stringify(totalSagInCart);
|
totalSagInCartInput.value = JSON.stringify(totalSagInCart);
|
||||||
event.target.appendChild(totalSagInCartInput);
|
event.target.appendChild(totalSagInCartInput);
|
||||||
|
|
||||||
event.target.submit();
|
let listSyarikatinCartInput = document.createElement('input');
|
||||||
|
listSyarikatinCartInput.type = 'hidden';
|
||||||
|
listSyarikatinCartInput.name = 'listSyarikatinCartInput';
|
||||||
|
listSyarikatinCartInput.value = JSON.stringify(totaltagSyarikat);
|
||||||
|
event.target.appendChild(listSyarikatinCartInput);
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const cartsAvailable = await checkCarts();
|
||||||
|
if (!cartsAvailable || (typeof cartsAvailable === 'object' && Object.keys(cartsAvailable).length === 0)) {
|
||||||
|
// console.log('No carts available or an error occurred.');
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
loader.classList.remove('d-none');
|
||||||
|
event.target.submit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: "Troli Anda Masih Ada Lagi?",
|
||||||
|
showDenyButton: true,
|
||||||
|
showCancelButton: false,
|
||||||
|
confirmButtonText: "Pergi Ke Troli",
|
||||||
|
denyButtonText: `Buang Troli`
|
||||||
|
}).then((result) => {
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
loader.classList.remove('d-none');
|
||||||
|
if (result.isDenied) {
|
||||||
|
let remove_carts = fetch('/deletecarts')
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('HTTP error ' + response.status);
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.catch(error => console.error(error));
|
||||||
|
|
||||||
|
}
|
||||||
|
event.target.submit();
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const checkCarts = async () => {
|
||||||
|
try {
|
||||||
|
const response = await fetch('/showcarts-available');
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('HTTP error ' + response.status);
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
return data;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching carts:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('pageshow', (event) => {
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
if (loader) {
|
||||||
|
loader.classList.add('d-none');
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -13,6 +13,12 @@
|
|||||||
<!-- <div style="text-align: center;"><img src="{{ asset('/argon/img/brand/arrahnpay3.png') }}" style="text-align: center;"></div> -->
|
<!-- <div style="text-align: center;"><img src="{{ asset('/argon/img/brand/arrahnpay3.png') }}" style="text-align: center;"></div> -->
|
||||||
<h6 style="text-align: center; margin-bottom: 10%;">Log Masuk</h6>
|
<h6 style="text-align: center; margin-bottom: 10%;">Log Masuk</h6>
|
||||||
|
|
||||||
|
@if(session('logsemula'))
|
||||||
|
<div class="alert alert-primary text-center font-weight-bold" style="font-size: 13px;color:white;">
|
||||||
|
{{ session('logsemula') }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
<form role="#" method="post" enctype="multipart/form-data" class="login-form" novalidate="novalidate">
|
<form role="#" method="post" enctype="multipart/form-data" class="login-form" novalidate="novalidate">
|
||||||
@csrf
|
@csrf
|
||||||
<div class="input-group input-group-outline my-3 {{ $errors->has('email') ? ' has-danger' : '' }}">
|
<div class="input-group input-group-outline my-3 {{ $errors->has('email') ? ' has-danger' : '' }}">
|
||||||
@@ -41,7 +47,7 @@
|
|||||||
<button type="submit" class="btn bg-gradient-dark w-100 my-4 mb-2" onclick="loadingbtn();this.disabled=true;this.form.submit();" style="background: #4A4E59;">Masuk</button>
|
<button type="submit" class="btn bg-gradient-dark w-100 my-4 mb-2" onclick="loadingbtn();this.disabled=true;this.form.submit();" style="background: #4A4E59;">Masuk</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center mt-3" style="margin: 0% 10%;">
|
<div class="text-center mt-3" style="margin: 0% 10%;">
|
||||||
<a href="https://spare.arrahn.com.my/pembayaransegera" id="buttonspare" title="Pembayaran Pantas SPARE" style="color: #12B652; border: 1px solid #12B652;" class="btn my-4 mb-2" target="_blank">Bayaran Pantas (SPARE)</a href="#">
|
{{-- <a href="https://spare.arrahn.com.my/pembayaransegera" id="buttonspare" title="Pembayaran Pantas SPARE" style="color: #12B652; border: 1px solid #12B652;" class="btn my-4 mb-2" target="_blank">Bayaran Pantas (SPARE)</a href="#"> --}}
|
||||||
<!-- <a href="http://e-arrahn.test/pembayaransegera" id="buttonspare" title="Pembayaran Pantas SPARE" style="color: #12B652; border: 1px solid #12B652;" class="btn my-4 mb-2" target="_blank">Bayaran Pantas (SPARE)</a href="#"> -->
|
<!-- <a href="http://e-arrahn.test/pembayaransegera" id="buttonspare" title="Pembayaran Pantas SPARE" style="color: #12B652; border: 1px solid #12B652;" class="btn my-4 mb-2" target="_blank">Bayaran Pantas (SPARE)</a href="#"> -->
|
||||||
</div>
|
</div>
|
||||||
<p class="text-sm text-center">
|
<p class="text-sm text-center">
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
|
|
||||||
<!-- Control Center for Material UI Kit: parallax effects, scripts for the example pages etc -->
|
<!-- Control Center for Material UI Kit: parallax effects, scripts for the example pages etc -->
|
||||||
<!-- Google Maps Plugin -->
|
<!-- Google Maps Plugin -->
|
||||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script>
|
{{-- <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script> --}}
|
||||||
<script src="{{ asset('assets/js/material-kit/material-kit.min.js?v=3.0.0') }}" type="text/javascript"></script>
|
<script src="{{ asset('assets/js/material-kit/material-kit.min.js?v=3.0.0') }}" type="text/javascript"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -12,7 +12,10 @@
|
|||||||
<link href="{{ asset('css/nucleo-icons.css') }}" rel="stylesheet">
|
<link href="{{ asset('css/nucleo-icons.css') }}" rel="stylesheet">
|
||||||
<link href="{{ asset('css/nucleo-svg.css') }}" rel="stylesheet">
|
<link href="{{ asset('css/nucleo-svg.css') }}" rel="stylesheet">
|
||||||
|
|
||||||
<script src="https://kit.fontawesome.com/42d5adcbca.js" crossorigin="anonymous"></script>
|
{{-- <script src="https://kit.fontawesome.com/42d5adcbca.js" crossorigin="anonymous"></script> --}}
|
||||||
|
|
||||||
|
<link href="{{ asset('css/nucleo-svg.css') }}" rel="stylesheet">
|
||||||
|
<link href="{{ asset('argon') }}/vendor/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="{{ asset('argon/css/dataTables.bootstrap4.min.css') }}" rel="stylesheet">
|
<link href="{{ asset('argon/css/dataTables.bootstrap4.min.css') }}" rel="stylesheet">
|
||||||
<script src="{{ asset('argon') }}/vendor/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="{{ asset('argon') }}/vendor/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
@@ -61,6 +64,42 @@
|
|||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.loader-arrahn {
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader-arrahn img {
|
||||||
|
width: 100px; /* Image size */
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader-arrahn:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
|
border-radius: 50%;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay-arrahn {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 9998;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,51 @@
|
|||||||
<!-- <div class="container position-sticky z-index-sticky top-0">
|
<style>
|
||||||
<div class="row">
|
.loader-arrahn {
|
||||||
<div class="col-12">
|
position: fixed;
|
||||||
<nav class="navbar navbar-expand-lg position-absolute top-0 z-index-3 w-100 shadow-none my-3 navbar-transparent ">
|
top: 50%;
|
||||||
<div class="container">
|
left: 50%;
|
||||||
<a class="navbar-brand text-white " href="#home" rel="tooltip" title="Designed and Coded by Creative Tim" data-placement="bottom">
|
transform: translate(-50%, -50%);
|
||||||
MOHAMAD HAFIZUDDIN BIN HANAFI
|
z-index: 9999;
|
||||||
</a>
|
}
|
||||||
<button class="navbar-toggler shadow-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#navigation" aria-controls="navigation" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<span class="navbar-toggler-icon mt-2">
|
.loader-arrahn img {
|
||||||
<span class="navbar-toggler-bar bar1"></span>
|
width: 100px; /* Image size */
|
||||||
<span class="navbar-toggler-bar bar2"></span>
|
}
|
||||||
<span class="navbar-toggler-bar bar3"></span>
|
|
||||||
</span>
|
.loader-arrahn:before {
|
||||||
</button>
|
content: '';
|
||||||
<div class="collapse navbar-collapse w-100 pt-3 pb-2 py-lg-0 ms-lg-12 ps-lg-5" id="navigation">
|
position: absolute;
|
||||||
<ul class="navbar-nav navbar-nav-hover ms-auto">
|
top: 50%;
|
||||||
<li class="nav-item ms-lg-auto">
|
left: 50%;
|
||||||
<a class="nav-link nav-link-icon me-2" href="#rekodpembelian">
|
transform: translate(-50%, -50%);
|
||||||
<i class="fa fa-list-alt me-1"></i>
|
width: 120px;
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Senarai Rekod Gadaian & Tebusan">Rekod Pembelian</p>
|
height: 120px;
|
||||||
</a>
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
</li>
|
border-radius: 50%;
|
||||||
<li class="nav-item ms-lg-auto">
|
z-index: -1;
|
||||||
<a class="nav-link nav-link-icon me-2" href="#pemabayaran">
|
}
|
||||||
<i class="fa fa-money me-1"></i>
|
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Transaksi Pembayaran Upah">Pembayaran</p>
|
.overlay-arrahn {
|
||||||
</a>
|
position: fixed;
|
||||||
</li>
|
z-index: 9998;
|
||||||
<li class="nav-item ms-lg-auto">
|
width: 100%;
|
||||||
<a class="nav-link nav-link-icon me-2" href="#tebus">
|
height: 100%;
|
||||||
<i class="fa fa-exchange me-1"></i>
|
top: 0;
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tebus Marhun">Tebus</p>
|
left: 0;
|
||||||
</a>
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
</li>
|
overflow: hidden;
|
||||||
<li class="nav-item ms-lg-auto">
|
}
|
||||||
<a class="nav-link nav-link-icon me-2" href="#analisa">
|
</style>
|
||||||
<i class="fa fa-line-chart me-1"></i>
|
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Analisa Marhun">Analisa</p>
|
<script> let routetrolley = '{{ route("payment.action") }}';let csrftoken = '{{ csrf_token() }}';</script>
|
||||||
</a>
|
<script src="{{ asset('js/miscellaneous/navigation-trolley.js') }}"></script>
|
||||||
</li>
|
|
||||||
<li class="nav-item ms-lg-auto">
|
<div id="load-arrahn" class="d-none">
|
||||||
<a class="nav-link nav-link-icon me-2" href="#analisa">
|
<div class="overlay-arrahn"></div>
|
||||||
<i class="fa fa-microchip me-1"></i>
|
<div class="loader-arrahn text-center">
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Function Seterusnya">Next</p>
|
<img src="{{ asset('argon/img/brand/ar-rahn-take-2.gif') }}">
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item ms-lg-auto">
|
|
||||||
<a class="nav-link nav-link-icon me-2" href="portalprofile">
|
|
||||||
<i class="fa fa-user me-1"></i>
|
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tetapan Profile">Profil</p>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item my-auto ms-3 ms-lg-0">
|
|
||||||
<a href="loginportal" class="btn btn-sm bg-white mb-0 me-1 mt-2 mt-md-0">Log out</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div>
|
||||||
|
|
||||||
<div class="container position-sticky z-index-sticky top-0">
|
<div class="container position-sticky z-index-sticky top-0">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
@@ -78,24 +63,6 @@
|
|||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse pt-3 pb-2 py-lg-0 w-100" id="navigation">
|
<div class="collapse navbar-collapse pt-3 pb-2 py-lg-0 w-100" id="navigation">
|
||||||
<ul class="navbar-nav navbar-nav-hover ms-auto">
|
<ul class="navbar-nav navbar-nav-hover ms-auto">
|
||||||
{{-- <li class="nav-item ms-lg-auto">
|
|
||||||
<a class="nav-link nav-link-icon me-2" href="{{ route('semaksag') }}">
|
|
||||||
<i class="fa fa-list-alt me-1"></i>
|
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Senarai Rekod Gadaian & Tebusan">Rekod Pembelian</p>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item ms-lg-auto">
|
|
||||||
<a class="nav-link nav-link-icon me-2" href="{{ route('pembayaransag') }}">
|
|
||||||
<i class="fa fa-money me-1"></i>
|
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Transaksi Pembayaran Upah">Pembayaran</p>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item ms-lg-auto">
|
|
||||||
<a class="nav-link nav-link-icon me-2" href="{{ route('analisa.index') }}">
|
|
||||||
<i class="fa fa-line-chart me-1"></i>
|
|
||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Analisa Marhun">Analisa</p>
|
|
||||||
</a>
|
|
||||||
</li> --}}
|
|
||||||
<li class="nav-item ms-lg-auto">
|
<li class="nav-item ms-lg-auto">
|
||||||
<a class="nav-link nav-link-icon me-2" href="{{ route('profile.edit') }}">
|
<a class="nav-link nav-link-icon me-2" href="{{ route('profile.edit') }}">
|
||||||
<i class="fa fa-user me-1"></i>
|
<i class="fa fa-user me-1"></i>
|
||||||
@@ -108,6 +75,12 @@
|
|||||||
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Manual Pengguna">Manual Pengguna</p>
|
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Manual Pengguna">Manual Pengguna</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item ms-lg-auto">
|
||||||
|
<a id="a-redirect" class="nav-link nav-link-icon me-2 cursor-pointer" onclick="redirectTrolley()">
|
||||||
|
<i class="fa fa-shopping-cart"></i>
|
||||||
|
<p class="d-inline text-sm z-index-1 font-weight-bold" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Troli">Troli <span id="cart-count" class="badge bg-danger ms-1">0</span></p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item my-auto ms-3 ms-lg-0">
|
<li class="nav-item my-auto ms-3 ms-lg-0">
|
||||||
<a href="{{ route('logout') }}" class="btn btn-sm bg-white border mb-0 me-1 mt-2 mt-md-0" onclick="event.preventDefault();document.getElementById('logout-form').submit();">
|
<a href="{{ route('logout') }}" class="btn btn-sm bg-white border mb-0 me-1 mt-2 mt-md-0" onclick="event.preventDefault();document.getElementById('logout-form').submit();">
|
||||||
<span>{{ __('LOG KELUAR') }}</span>
|
<span>{{ __('LOG KELUAR') }}</span>
|
||||||
|
|||||||
@@ -12,16 +12,18 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="list">
|
<tbody class="list">
|
||||||
|
{{-- {{ dd($pembiayaan) }} --}}
|
||||||
@foreach ($pembiayaan as $data)
|
@foreach ($pembiayaan as $data)
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" name="chkboxsag[]" value="{{ $data->norujukan }}"
|
<input type="checkbox" name="chkboxsag[]" value="{{ $data->norujukan }}"
|
||||||
id="sag-{{ $loop->iteration }}" data-norujukan="{{ $data->norujukan }}"
|
id="sag-{{ $loop->iteration }}" data-norujukan="{{ $data->norujukan }}"
|
||||||
{{ $data->disabled_payment ? 'disabled' : '' }} />
|
data-syarikat="{{ $data->tag_syarikat }}" {{ $data->disabled_payment ? 'disabled' : '' }} />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="#" class="marhun-detail-link">
|
<a href="#" class="marhun-detail-link">
|
||||||
<span class="text-sm text-info">{{ $data->norujukan }}</span>
|
<span class="text-sm text-info">{{ $data->norujukan }}</span>
|
||||||
|
<input type="hidden" name="tag_syarikat" value="{{ $data->tag_syarikat }}"/>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="hide-xs">{{ $data->tempoh }}</td>
|
<td class="hide-xs">{{ $data->tempoh }}</td>
|
||||||
@@ -35,4 +37,4 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<i class="hide-xs text-success" style="font-size:12px;">"Swipe" ke kiri</i>
|
<i class="hide-xs text-success" style="font-size:12px;">"Swipe" ke kiri</i>
|
||||||
</div>
|
</div>
|
||||||
@@ -234,7 +234,6 @@
|
|||||||
let berat = $(e).data('berat');
|
let berat = $(e).data('berat');
|
||||||
let nm = $(e).data('nm');
|
let nm = $(e).data('nm');
|
||||||
|
|
||||||
console.log(pinjaman,upah12,bakipjm,berat,nm);
|
|
||||||
|
|
||||||
$('#pembiayaan').text('RM ' + pinjaman);
|
$('#pembiayaan').text('RM ' + pinjaman);
|
||||||
$('#bpemb').text('RM ' + bakipjm);
|
$('#bpemb').text('RM ' + bakipjm);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<!-- Control Center for Material UI Kit: parallax effects, scripts for the example pages etc -->
|
<!-- Control Center for Material UI Kit: parallax effects, scripts for the example pages etc -->
|
||||||
<!-- Google Maps Plugin -->
|
<!-- Google Maps Plugin -->
|
||||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script>
|
{{-- <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script> --}}
|
||||||
<script src="{{ asset('assets/js/material-kit/material-kit.min.js?v=3.0.0') }}" type="text/javascript"></script>
|
<script src="{{ asset('assets/js/material-kit/material-kit.min.js?v=3.0.0') }}" type="text/javascript"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -208,20 +208,28 @@
|
|||||||
|
|
||||||
@push('additional_js_scripts')
|
@push('additional_js_scripts')
|
||||||
<script>
|
<script>
|
||||||
const showMarhunDetailModal = async function(event) {
|
const showMarhunDetailModal = async function(event,tagsyarikat) {
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
document.getElementById('marhunLoader').style.display = 'flex';
|
document.getElementById('marhunLoader').style.display = 'flex';
|
||||||
const norujukan = event.target.innerHTML;
|
const norujukan = event.target.innerHTML;
|
||||||
|
|
||||||
try {
|
const data = await fetch('/api/pembiayaan-modal-data/' + norujukan + "/" + tagsyarikat)
|
||||||
|
.then(x => x.json())
|
||||||
const data = await fetch('/api/pembiayaan-modal-data/' + norujukan).then(x => x.json());
|
.catch(error => {
|
||||||
|
console.error(error);
|
||||||
const formatter = new Intl.NumberFormat('en-US', {
|
const loader = document.getElementById('load-arrahn');
|
||||||
minimumFractionDigits: 2
|
loader.classList.add('d-none');
|
||||||
});
|
throw error;
|
||||||
|
});
|
||||||
|
|
||||||
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
loader.classList.add('d-none');
|
||||||
|
|
||||||
|
const formatter = new Intl.NumberFormat('en-US', {
|
||||||
|
minimumFractionDigits: 2
|
||||||
|
});
|
||||||
|
|
||||||
$('#pembiayaan').text('RM' + formatter.format(data.gadaianDetails.pinjaman));
|
$('#pembiayaan').text('RM' + formatter.format(data.gadaianDetails.pinjaman));
|
||||||
$('#bpembiayaan').text('RM' + formatter.format(data.gadaianDetails.bakipjm));
|
$('#bpembiayaan').text('RM' + formatter.format(data.gadaianDetails.bakipjm));
|
||||||
@@ -277,7 +285,11 @@
|
|||||||
|
|
||||||
|
|
||||||
$('#main-table').on('click', 'a.marhun-detail-link', function(e) {
|
$('#main-table').on('click', 'a.marhun-detail-link', function(e) {
|
||||||
showMarhunDetailModal(e)
|
const loader = document.getElementById('load-arrahn');
|
||||||
|
loader.classList.remove('d-none');
|
||||||
|
|
||||||
|
const tag_syarikat = $(this).find('input[name="tag_syarikat"]').val();
|
||||||
|
showMarhunDetailModal(e,tag_syarikat)
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -467,7 +467,7 @@
|
|||||||
<script src="../assets/vendor/jquery.scrollbar/jquery.scrollbar.min.js"></script>
|
<script src="../assets/vendor/jquery.scrollbar/jquery.scrollbar.min.js"></script>
|
||||||
<script src="../assets/vendor/jquery-scroll-lock/dist/jquery-scrollLock.min.js"></script>
|
<script src="../assets/vendor/jquery-scroll-lock/dist/jquery-scrollLock.min.js"></script>
|
||||||
<!-- Optional JS -->
|
<!-- Optional JS -->
|
||||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script>
|
{{-- <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTTfWur0PDbZWPr7Pmq8K3jiDp0_xUziI"></script> --}}
|
||||||
<!-- Argon JS -->
|
<!-- Argon JS -->
|
||||||
<script src="../assets/js/argon.js?v=1.2.0"></script>
|
<script src="../assets/js/argon.js?v=1.2.0"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -158,7 +158,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@php
|
@php
|
||||||
$upahtawarruq = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/upahtawarruq/'. $bayar['kodcaw'] . '/' . $bayar['norujukan'])->json();
|
$upahtawarruq = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/upahtawarruq/'. $bayar['kodcaw'] . '/' . $bayar['norujukan'],['jeniskeuntungan' => ($bayar['tagbaru'] == 1) ? 'onepercent' : 'asal'])->json();
|
||||||
@endphp
|
@endphp
|
||||||
{{ $upahtawarruq }}
|
{{ $upahtawarruq }}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -36,10 +36,46 @@
|
|||||||
|
|
||||||
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
|
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
|
||||||
|
|
||||||
|
|
||||||
<center>
|
<center>
|
||||||
<span class="far fa-check-circle fa-6x" style="color:green;"></span>
|
<span class="far fa-check-circle fa-6x" style="color:green;"></span>
|
||||||
<h4 class="text-success mt-1 mb-1">Pembayaran Berjaya</h4>
|
<h4 class="text-success mt-1 mb-1">Pembayaran Berjaya</h4>
|
||||||
|
@if($exist_carts)
|
||||||
|
<span class="text-dark">
|
||||||
|
Terima kasih atas pembayaran! Anda akan dibawa ke troli dalam masa <span id="remaining">10</span> saat.
|
||||||
|
</span>
|
||||||
|
<script>
|
||||||
|
let remainingElement = document.getElementById('remaining');
|
||||||
|
let remainingSeconds = parseInt(remainingElement.textContent, 10);
|
||||||
|
|
||||||
|
const remaining_countdown = () => {
|
||||||
|
if (remainingSeconds > 0) {
|
||||||
|
remainingSeconds--;
|
||||||
|
remainingElement.textContent = remainingSeconds;
|
||||||
|
} else {
|
||||||
|
clearInterval(interval);
|
||||||
|
let form = document.createElement('form');
|
||||||
|
form.method = 'POST';
|
||||||
|
form.action = '{{ route("payment.action") }}';
|
||||||
|
|
||||||
|
let csrfInput = document.createElement('input');
|
||||||
|
csrfInput.type = 'hidden';
|
||||||
|
csrfInput.name = '_token';
|
||||||
|
csrfInput.value = '{{ csrf_token() }}';
|
||||||
|
form.appendChild(csrfInput);
|
||||||
|
|
||||||
|
let redirectInput = document.createElement('input');
|
||||||
|
redirectInput.type = 'hidden';
|
||||||
|
redirectInput.name = 'redirect_trolley';
|
||||||
|
redirectInput.value = 'trolley';
|
||||||
|
form.appendChild(redirectInput);
|
||||||
|
document.body.appendChild(form);
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const interval = setInterval(remaining_countdown, 1000);
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
<div class="row mb-4" style="margin-top:10px;">
|
<div class="row mb-4" style="margin-top:10px;">
|
||||||
<div class="col-12 text-dark"><small>*Sebarang pembayaran akan dikemaskini selepas <b>1 Jam</b></small></div>
|
<div class="col-12 text-dark"><small>*Sebarang pembayaran akan dikemaskini selepas <b>1 Jam</b></small></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$koskeuntungan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/upahtawarruq/' . $bt['kodcaw'] . '/' . $bt['norujukan'])->json();
|
$koskeuntungan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/upahtawarruq/' . $bt['kodcaw'] . '/' . $bt['norujukan'],['jeniskeuntungan' => ($bt['tagbaru'] == 1) ? 'onepercent' : 'asal'])->json();
|
||||||
$keuntungan_1bln = $bt['pinjaman'] * ($bt['kadarupah'] / 100);
|
$keuntungan_1bln = $bt['pinjaman'] * ($bt['kadarupah'] / 100);
|
||||||
$ten_percent = floatval($bt['nilaimarhun']) * 0.1;
|
$ten_percent = floatval($bt['nilaimarhun']) * 0.1;
|
||||||
$baki_pinjaman = floatval($bt['bakipjm']);
|
$baki_pinjaman = floatval($bt['bakipjm']);
|
||||||
|
|||||||
+1
-1
@@ -25,4 +25,4 @@ Route::get('/billplz', BillplzController::class);
|
|||||||
Route::get('/billplz-transaction-review', [BillplzTransactionReviewController::class, 'index']);
|
Route::get('/billplz-transaction-review', [BillplzTransactionReviewController::class, 'index']);
|
||||||
Route::get('/billplz-transaction-review/{bill_id}', [BillplzTransactionReviewController::class, 'show']);
|
Route::get('/billplz-transaction-review/{bill_id}', [BillplzTransactionReviewController::class, 'show']);
|
||||||
|
|
||||||
Route::get('/pembiayaan-modal-data/{norujukan}', [PembiayaanService::class, 'getMarhunModalData']);
|
Route::get('/pembiayaan-modal-data/{norujukan}/{tagsyarikat}', [PembiayaanService::class, 'getMarhunModalData']);
|
||||||
|
|||||||
@@ -126,6 +126,8 @@ Route::get('/requesticfe', 'App\Http\Controllers\TacController@requestKadPengena
|
|||||||
Route::get('/requesttac', 'App\Http\Controllers\TacController@TACrequest')->name('requesttac');
|
Route::get('/requesttac', 'App\Http\Controllers\TacController@TACrequest')->name('requesttac');
|
||||||
Route::get('/requesttacfe', 'App\Http\Controllers\TacController@TACrequestfe')->name('requesttacfe');
|
Route::get('/requesttacfe', 'App\Http\Controllers\TacController@TACrequestfe')->name('requesttacfe');
|
||||||
|
|
||||||
|
Route::get('/showcarts-available','App\Http\Controllers\BayaranController@UserCheckCarts')->name('checkcarts');
|
||||||
|
Route::get('/deletecarts','App\Http\Controllers\BayaranController@removeCarts')->name('removecarts');
|
||||||
|
|
||||||
Route::get('download/manualpengguna',['as'=>'miscellaneous.manualpengguna', function(){
|
Route::get('download/manualpengguna',['as'=>'miscellaneous.manualpengguna', function(){
|
||||||
if (Storage::disk('miscellaneous')->exists('Manual_Pengguna.pdf')) {
|
if (Storage::disk('miscellaneous')->exists('Manual_Pengguna.pdf')) {
|
||||||
|
|||||||
Reference in New Issue
Block a user