(new InformationController())->pembiayaanaktif()->getData(); if ($filter === 'pembiayaan-6-bulan') { $getPembiayaan = fn() => (new InformationController())->pembiayaanmelebihi6bulan()->getData(); } if ($filter === 'pembiayaan-akan-dilelong') { $getPembiayaan = fn() => (new InformationController())->pembiayaanakandilelong()->getData(); } $pembiayaan = $this->formatPembiayaanData($getPembiayaan()); $pembiayaan = $this->attachMarhunModalData($pembiayaan); $pembiayaan = $this->checkPembiayaanPaymentDisabled($pembiayaan); return $pembiayaan; } private function formatPembiayaanData($pembiayaan) { $allCawangan = Http::withOptions(['verify' => config('app.api_verify')]) ->get(config('api.url') . '/api/cawangan') ->json(); $setCawanganFullName = function ($pembiayaan) use ($allCawangan) { $cawangan = array_filter($allCawangan, fn($x) => $x['kodcaw'] === $pembiayaan->kodcaw); $pembiayaan->cawangan_name = array_pop($cawangan)['details_caw']; return $pembiayaan; }; $setKeuntunganFormatted = function ($pembiayaan) { $pembiayaan->keuntungan_formatted = number_format((float) $pembiayaan->keuntungan, 2, '.', ''); return $pembiayaan; }; $setTarikhAkhir = function ($pembiayaan) { $pembiayaan->tarikh_akhir = $pembiayaan->lelong_tawarruq != 0 ? '-' : Carbon::parse($pembiayaan->t_matang1)->format('d/m/Y'); return $pembiayaan; }; $setTLelongFormatted = function ($pembiayaan) { $t_lelong = $pembiayaan->t_lelong; $isTLelongNotAvailable = $t_lelong == 0 || $t_lelong == ''; $pembiayaan->t_lelong_formatted = $isTLelongNotAvailable ? '-' : Carbon::parse($pembiayaan->t_lelong)->format('d/m/Y'); return $pembiayaan; }; $formatted = array_map(function ($x) use ($setCawanganFullName, $setKeuntunganFormatted, $setTarikhAkhir, $setTLelongFormatted) { $x = $setCawanganFullName($x); $x = $setKeuntunganFormatted($x); $x = $setTarikhAkhir($x); $x = $setTLelongFormatted($x); return $x; }, $pembiayaan); return $formatted; } private function attachMarhunModalData($pembiayaan) { $marhunModalData = $this->getMarhunModalData($pembiayaan); return array_map( function ($x, $y) { $x->marhunModalData = $y; return $x; }, $pembiayaan, $marhunModalData, ); } public function getMarhunModalData($pembiayaan) { $norujukanList = array_map(fn($x) => $x->norujukan, $pembiayaan); $marhunDetails = MarhunService::from($norujukanList)->getMarhunDetails(); $bayaranHistoryDetails = BayaranHistoryService::from($norujukanList)->getBayaranHistory(); return array_map( fn($x, $y, $z) => [ 'nilaimarhun' => $x->nilaimarhun, 'berat' => $x->berat, 'bakiupah' => $x->bakiupah, 'pinjaman' => $x->pinjaman, 'bakipjm' => $x->bakipjm, 'taglel' => $x->taglel, 'marhun' => $x->marhun, 'pinjaman' => $x->pinjaman, 'norujukan' => $x->norujukan, 'hargajualan' => $x->hargajualan, 'kodcaw' => $x->kodcaw, 'tempoh' => $x->tempoh, 'cawangan_name' => $x->cawangan_name, 'marhun_details' => $y, 'bayaran_history' => $z, ], $pembiayaan, $marhunDetails, $bayaranHistoryDetails, ); } 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); } private function checkPembiayaanPaymentDisabled($pembiayaan) { $norujukanList = array_map(fn($x) => $x->norujukan, $pembiayaan); $norujukanRecentlyAttemptPayment = $this->getNorujukanRecentlyAttemptPayment($norujukanList); $getPembiayaanAkanDilelong = fn() => (new InformationController())->pembiayaanakandilelong()->getData(); $isCurrentDateGreaterThanEqual3DaysBeforeLelong = function ($x) { $tarikhLelong = Carbon::parse($x->t_lelong); $currentDate = Carbon::now(); if ($currentDate->gte($tarikhLelong->subDays(3))) { return true; } return false; }; $pembiayaanAkanDilelong = array_filter($getPembiayaanAkanDilelong(), $isCurrentDateGreaterThanEqual3DaysBeforeLelong); $norujukanAkanDilelong = array_map(fn($x) => $x->norujukan, $pembiayaanAkanDilelong); $setDefaultFasaIfNotAvailable = function($x){ if(! isset($x->fasa)){ $x->fasa = 1; } return $x; }; $pembiayaanWithFasa = array_map($setDefaultFasaIfNotAvailable, $getPembiayaanAkanDilelong()); $pembiayaanInFasa2 = array_filter($pembiayaanWithFasa, fn($x) => $x->fasa == 2); $norujukanInFasa2 = array_map(fn($x) => $x->norujukan, $pembiayaanInFasa2); $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); $isNorujukanPaymentRecentlyAttempted = function ($x) use ($norujukanRecentlyAttemptPayment) { return in_array($x->norujukan, $norujukanRecentlyAttemptPayment); }; $isNorujukanAkanDilelong = function ($x) use ($norujukanAkanDilelong) { return in_array($x->norujukan, $norujukanAkanDilelong); }; $isNorujukanUjrah = function ($x) { return $x->tagbaru === 1 ? true : false; }; $isNorujukanIsInFasa2 = function ($x) use ($norujukanInFasa2) { return in_array($x->norujukan, $norujukanInFasa2); }; $isCawanganNotPermitUjrahPayment = function ($x) use ($kodCawanganBranchesNotPermitPaymentUjrah, $isNorujukanUjrah) { if($isNorujukanUjrah($x)){ return in_array($x->kodcaw, $kodCawanganBranchesNotPermitPaymentUjrah); } return false; }; return array_map(function ($x) use ($isNorujukanPaymentRecentlyAttempted, $isNorujukanAkanDilelong, $isNorujukanIsInFasa2, $isCawanganNotPermitUjrahPayment) { $x->disabled_payment = false; if ( $isNorujukanAkanDilelong($x) || $isNorujukanIsInFasa2($x) || $isNorujukanPaymentRecentlyAttempted($x) || $isCawanganNotPermitUjrahPayment($x) ) { $x->disabled_payment = true; } return $x; }, $pembiayaan); } }