233 lines
8.1 KiB
PHP
233 lines
8.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Http\Controllers\InformationController;
|
|
use Illuminate\Http\Client\Pool;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
class PembiayaanService
|
|
{
|
|
|
|
public function getPembiayaan($filter)
|
|
{
|
|
$getPembiayaan = fn() => (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);
|
|
|
|
}
|
|
|
|
}
|