diff --git a/app/Http/Controllers/BayaranController.php b/app/Http/Controllers/BayaranController.php index 01a9c23..654ad75 100644 --- a/app/Http/Controllers/BayaranController.php +++ b/app/Http/Controllers/BayaranController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\PaymentRequest; use App\Services\BillplzService; use Carbon\Carbon; use Illuminate\Http\Client\Pool; @@ -12,41 +13,13 @@ use Money\Money; class BayaranController extends Controller { - - public function PembayaranAction(Request $request) + public function PembayaranAction(PaymentRequest $request) { - $totalSagInCartInput = $request->totalSagInCartInput; - - $validated = $request->validate([ - 'totalSagInCartInput' => 'required', - ]); - - $norujukanList = json_decode($request->totalSagInCartInput); - - $arraybayar = array_map(fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x)->json()[0][0], $norujukanList); - - $arraybayar = $this->setUpahTawarruq($arraybayar); - - $norujukanRecentlyAttemptPayment = array_map( - fn($x) => Http::arrahn()->get('/portal/searchsagonline/', ['norujukan' => $x])->json(), - $norujukanList - ); - - $isNorujukanRecentlyAttemptPayment = in_array(true, $norujukanRecentlyAttemptPayment); - - if ($isNorujukanRecentlyAttemptPayment) { - return redirect()->route('home')->with('errorsagonline', 'Sila Tunggu Sebentar!'); - } - - $gadaiContractExceed12Month = array_filter($arraybayar, fn($x) => $x['tempoh'] >= 12); - - $isGadaiContractExceed12Month = sizeof($gadaiContractExceed12Month) > 0; - - if ($isGadaiContractExceed12Month) { - return redirect()->route('home')->with('error', 'SAG Yang Dipilih Akan/Telah Tamat Kontrak 12 Bulan. Sila Hadir Ke Kaunter Cawangan Untuk Pembayaran/Penebusan.'); - } - + $request->validated(); + + $arraybayar = $this->setUpahTawarruq($request->getPembiayaanFromNorujukan()); + return view('includes.bayaran.pembayaransag', compact('arraybayar')); } @@ -87,7 +60,6 @@ class BayaranController extends Controller return Money::MYR($sum())->add($billPlzTransactionFee); }; - $bill = $billplzService->createBill([ $customerEmail, $customerPhoneNumber, @@ -242,7 +214,7 @@ class BayaranController extends Controller public function successPayment(Request $request) { $transactionOnline = $request->transactionOnline; - + $arraygadai = array_map( fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x['norujukan'])->json()[0][0], $transactionOnline @@ -289,31 +261,31 @@ class BayaranController extends Controller private function setUpahTawarruq($pembiayaan) { - $getJenisKeuntungan = function($x){ + $getJenisKeuntungan = function ($x) { - $jenisKeuntungan = [ - '1' => 'onepercent', - '0' => 'asal', - ]; + $jenisKeuntungan = [ + '1' => 'onepercent', + '0' => 'asal', + ]; - return $jenisKeuntungan[$x['tagbaru']]; - }; + return $jenisKeuntungan[$x['tagbaru']]; + }; - $getUpahTawarruqPerPembiayaan = function($x) use($getJenisKeuntungan){ - $jenisKeuntungan = $getJenisKeuntungan($x); - $upahTawarruq = Http::arrahn()->get('/api/upahtawarruq/'.$x['kodcaw'].'/'.$x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan])->json(); + $getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) { + $jenisKeuntungan = $getJenisKeuntungan($x); + $upahTawarruq = Http::arrahn()->get('/api/upahtawarruq/' . $x['kodcaw'] . '/' . $x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan])->json(); - if($jenisKeuntungan == 'onepercent'){ - $x['upah_tawarruq'] = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah']; - } + if ($jenisKeuntungan == 'onepercent') { + $x['upah_tawarruq'] = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah']; + } - if($jenisKeuntungan == 'asal'){ - $x['upah_tawarruq'] = $upahTawarruq; - } + if ($jenisKeuntungan == 'asal') { + $x['upah_tawarruq'] = $upahTawarruq; + } - return $x; - }; + return $x; + }; - return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan); + return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan); } } diff --git a/app/Http/Requests/PaymentRequest.php b/app/Http/Requests/PaymentRequest.php new file mode 100644 index 0000000..e2212eb --- /dev/null +++ b/app/Http/Requests/PaymentRequest.php @@ -0,0 +1,65 @@ +selectedPembiayaan = $this->getPembiayaanFromNorujukan(); + $this->pembiayaanAkanDilelong = $this->getPembiayaanAkanDilelong(); + + return [ + 'totalSagInCartInput' => [ + new PilihMinimumSatuSAG, + new NorujukanTidakAkanDilelong($this->pembiayaanAkanDilelong), + new NorujukanBukanFasa2($this->pembiayaanAkanDilelong), + new NorujukanNotAttemptPaymentRecently, + new CawanganPermitUjrahPayment($this->selectedPembiayaan), + new PaymentNotUjrah($this->selectedPembiayaan), + new NorujukanContractNotExceed12Month($this->selectedPembiayaan), + ] + ]; + } + + public function getPembiayaanFromNorujukan() + { + $norujukanList = json_decode($this->totalSagInCartInput); + + return array_map(fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x)->json()[0][0], $norujukanList); + } + + public function getPembiayaanAkanDilelong() + { + return (new InformationController())->pembiayaanakandilelong()->getData(); + } +} diff --git a/app/Rules/PaymentRules/CawanganPermitUjrahPayment.php b/app/Rules/PaymentRules/CawanganPermitUjrahPayment.php new file mode 100644 index 0000000..b7ce8ca --- /dev/null +++ b/app/Rules/PaymentRules/CawanganPermitUjrahPayment.php @@ -0,0 +1,61 @@ +pembiayaan = $pembiayaan; + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + $getPayableUjrahBranches = fn() => Http::arrahn()->get('/api/payable-ujrah-branches')->json(); + $branchesNotPermitPaymentUjrah = array_filter($getPayableUjrahBranches(), fn($x) => $x['gadaian_ujrah_payable'] == 0); + $kodCawanganBranchesNotPermitPaymentUjrah = array_map(fn($x) => $x['kodcaw'], $branchesNotPermitPaymentUjrah); + + $isNorujukanUjrah = fn($x) => $x['tagbaru'] === 1 ? true : false; + + $isCawanganNotPermitUjrahPayment = function ($x) use ($kodCawanganBranchesNotPermitPaymentUjrah, $isNorujukanUjrah) { + + if ($isNorujukanUjrah($x)) { + return in_array($x['kodcaw'], $kodCawanganBranchesNotPermitPaymentUjrah); + } + + return false; + }; + + $cawanganNotPermitUjrahPayment = array_filter($this->pembiayaan, fn($x) => $isCawanganNotPermitUjrahPayment($x)); + + return sizeof($cawanganNotPermitUjrahPayment) == 0; + + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'Tidak dibenarkan pembayaran ujrah!'; + } +} diff --git a/app/Rules/PaymentRules/NorujukanBukanFasa2.php b/app/Rules/PaymentRules/NorujukanBukanFasa2.php new file mode 100644 index 0000000..7c984df --- /dev/null +++ b/app/Rules/PaymentRules/NorujukanBukanFasa2.php @@ -0,0 +1,58 @@ +pembiayaanAkanDilelong = $pembiayaanAkanDilelong; + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + $norujukanToPay = json_decode($value); + + $setDefaultFasaIfNotAvailable = function ($x) { + if (!isset($x->fasa)) { + $x->fasa = 1; + } + return $x; + }; + + $pembiayaanWithFasa = array_map($setDefaultFasaIfNotAvailable, $this->pembiayaanAkanDilelong); + $pembiayaanInFasa2 = array_filter($pembiayaanWithFasa, fn($x) => $x->fasa == 2); + $norujukanInFasa2 = array_map(fn($x) => $x->norujukan, $pembiayaanInFasa2); + + $pembiayaanFasa2 = array_filter($norujukanToPay, fn($x) => in_array($x, $norujukanInFasa2)); + + return sizeof($pembiayaanFasa2) == 0; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'No pembiayaan dalam kategori fasa 2, sila ke kaunter'; + } +} diff --git a/app/Rules/PaymentRules/NorujukanContractNotExceed12Month.php b/app/Rules/PaymentRules/NorujukanContractNotExceed12Month.php new file mode 100644 index 0000000..e9a3adb --- /dev/null +++ b/app/Rules/PaymentRules/NorujukanContractNotExceed12Month.php @@ -0,0 +1,45 @@ +pembiayaan = $pembiayaan; + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + $gadaiContractExceed12Month = array_filter($this->pembiayaan, fn($x) => $x['tempoh'] >= 12); + + return sizeof($gadaiContractExceed12Month) == 0; + + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'SAG Yang Dipilih Akan/Telah Tamat Kontrak 12 Bulan. Sila Hadir Ke Kaunter Cawangan Untuk Pembayaran/Penebusan.'; + } +} diff --git a/app/Rules/PaymentRules/NorujukanNotAttemptPaymentRecently.php b/app/Rules/PaymentRules/NorujukanNotAttemptPaymentRecently.php new file mode 100644 index 0000000..7ebdde8 --- /dev/null +++ b/app/Rules/PaymentRules/NorujukanNotAttemptPaymentRecently.php @@ -0,0 +1,72 @@ +getNorujukanRecentlyAttemptPayment($norujukanToPay); + + return sizeof($norujukanRecentlyAttemptPayment) == 0; + + } + + private function getNorujukanRecentlyAttemptPayment($norujukanList) + { + $getRecentlyAttemptPayment = function () use ($norujukanList) { + return Http::pool(function (Pool $pool) use ($norujukanList) { + foreach ($norujukanList as $norujukan) { + $pool->get(config('api.url') . '/portal/searchsagonline/', ['norujukan' => $norujukan]); + } + }); + }; + + $recentlyAttemptPaymentResponse = array_map( + fn($x, $y) => ['norujukan' => $x, 'isRecentlyAttemptPayment' => $y->json()], + $norujukanList, + $getRecentlyAttemptPayment() + ); + + $filterRecentlyAttemptPayment = array_filter( + $recentlyAttemptPaymentResponse, + fn($x) => $x['isRecentlyAttemptPayment'] === true + ); + + return array_map(fn($x) => $x['norujukan'], $filterRecentlyAttemptPayment); + + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'Sila Tunggu Sebentar!'; + } +} diff --git a/app/Rules/PaymentRules/NorujukanTidakAkanDilelong.php b/app/Rules/PaymentRules/NorujukanTidakAkanDilelong.php new file mode 100644 index 0000000..5fa9d95 --- /dev/null +++ b/app/Rules/PaymentRules/NorujukanTidakAkanDilelong.php @@ -0,0 +1,64 @@ +pembiayaanAkanDilelong = $pembiayaanAkanDilelong; + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + + $norujukanToPay = json_decode($value); + + $isCurrentDateGreaterThanEqual3DaysBeforeLelong = function ($x) { + $tarikhLelong = Carbon::parse($x->t_lelong); + $currentDate = Carbon::now(); + + if ($currentDate->gte($tarikhLelong->subDays(3))) { + return true; + } + + return false; + + }; + + $dataFromPembiayaanAkanDilelong = array_filter($this->pembiayaanAkanDilelong, fn($x) => in_array($x->norujukan, $norujukanToPay)); + + $pembiayaanAkanDilelong = array_filter($dataFromPembiayaanAkanDilelong, $isCurrentDateGreaterThanEqual3DaysBeforeLelong); + + return sizeof($pembiayaanAkanDilelong) == 0; + + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'No pembiayaan akan dilelong, sila ke kaunter'; + } +} diff --git a/app/Rules/PaymentRules/PaymentNotUjrah.php b/app/Rules/PaymentRules/PaymentNotUjrah.php new file mode 100644 index 0000000..a8a5fae --- /dev/null +++ b/app/Rules/PaymentRules/PaymentNotUjrah.php @@ -0,0 +1,50 @@ +pembiayaan = $pembiayaan; + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + $norujukanToPay = json_decode($value); + + $isNorujukanUjrah = fn ($x) => $x['tagbaru'] === 1 ? true : false; + + $norujukanUjrah = array_filter($this->pembiayaan, fn($x) => $isNorujukanUjrah($x)); + + return sizeof($norujukanUjrah) == 0; + + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'Tidak dibenarkan pembayaran ujrah!'; + } +} diff --git a/app/Rules/PaymentRules/PilihMinimumSatuSAG.php b/app/Rules/PaymentRules/PilihMinimumSatuSAG.php new file mode 100644 index 0000000..d5a059d --- /dev/null +++ b/app/Rules/PaymentRules/PilihMinimumSatuSAG.php @@ -0,0 +1,44 @@ + 0; + + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'Sila pilih salah satu checkbox di atas terlebih dahulu!'; + } +} diff --git a/resources/views/includes/home.blade.php b/resources/views/includes/home.blade.php index 39a3fcd..5a5d6e6 100644 --- a/resources/views/includes/home.blade.php +++ b/resources/views/includes/home.blade.php @@ -39,12 +39,12 @@