288 lines
10 KiB
PHP
288 lines
10 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Http\Controllers\InformationController;
|
|
use App\Models\CompanyStatus;
|
|
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 = 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->formatPembiayaanData($pembiayaan);
|
|
$pembiayaan = $this->checkPembiayaanPaymentDisabled($pembiayaan);
|
|
|
|
return $pembiayaan;
|
|
}
|
|
|
|
private function setUpahTawarruq($pembiayaan)
|
|
{
|
|
$getJenisKeuntungan = function ($x) {
|
|
|
|
$jenisKeuntungan = [
|
|
'1' => 'onepercent',
|
|
'0' => 'asal',
|
|
];
|
|
|
|
return $jenisKeuntungan[$x->tagbaru];
|
|
};
|
|
|
|
$getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) {
|
|
$jenisKeuntungan = $getJenisKeuntungan($x);
|
|
|
|
$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') {
|
|
$x->upah_tawarruq = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah'];
|
|
}
|
|
|
|
if ($jenisKeuntungan == 'asal') {
|
|
$x->upah_tawarruq = $upahTawarruq;
|
|
}
|
|
|
|
return $x;
|
|
};
|
|
|
|
return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan);
|
|
}
|
|
|
|
private function formatPembiayaanData($pembiayaan)
|
|
{
|
|
$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) {
|
|
$cawangan = array_filter($allCawangan, fn($x) => $x['kodcaw'] === $pembiayaan->kodcaw);
|
|
$pembiayaan->cawangan_name = array_pop($cawangan)['details_caw'];
|
|
return $pembiayaan;
|
|
};
|
|
|
|
$setUpahTawarruqFormatted = function ($pembiayaan) {
|
|
$pembiayaan->upah_tawarruq_formatted = number_format((float) $pembiayaan->upah_tawarruq, 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, $setUpahTawarruqFormatted, $setTarikhAkhir, $setTLelongFormatted) {
|
|
$x = $setCawanganFullName($x);
|
|
$x = $setUpahTawarruqFormatted($x);
|
|
$x = $setTarikhAkhir($x);
|
|
$x = $setTLelongFormatted($x);
|
|
return $x;
|
|
}, $pembiayaan);
|
|
|
|
return $formatted;
|
|
}
|
|
|
|
public function getMarhunModalData($norujukan,$tagsyarikat)
|
|
{
|
|
|
|
$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,$CallableHttp) {
|
|
$x['cawangan_name'] = $CallableHttp->get('/api/cawangan/detail/' . $gadaianDetails['kodcaw'])->json()[0]['cawangan'];
|
|
return $x;
|
|
};
|
|
|
|
$gadaianDetails = $attachCawanganName($gadaianDetails);
|
|
|
|
$marhunDetails = MarhunService::from($norujukan)->getMarhunDetails($tagsyarikat);
|
|
|
|
$bayaranHistoryDetails = BayaranHistoryService::from($norujukan)->getBayaranHistory($tagsyarikat);
|
|
|
|
|
|
return [
|
|
'gadaianDetails' => $gadaianDetails,
|
|
'marhunDetails' => $marhunDetails,
|
|
'bayaranHistoryDetails' => $bayaranHistoryDetails,
|
|
];
|
|
}
|
|
|
|
private function getNorujukanRecentlyAttemptPayment($norujukanList)
|
|
{
|
|
$getRecentlyAttemptPayment = function () use ($norujukanList) {
|
|
return Http::pool(function (Pool $pool) use ($norujukanList) {
|
|
foreach ($norujukanList as $list) {
|
|
$pool->get(($list['tag_syarikat'] == CompanyStatus::COM_PKB ? config('api.url') : config('api.url_koop')) . '/portal/searchsagonline/', ['norujukan' => $list['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) => [
|
|
'tag_syarikat' => $x->tag_syarikat,
|
|
'norujukan' => $x->norujukan,
|
|
], $pembiayaan);
|
|
|
|
$norujukanRecentlyAttemptPayment = $this->getNorujukanRecentlyAttemptPayment($norujukanList);
|
|
|
|
$getPembiayaanAkanDilelong = fn() => (new InformationController())->pembiayaanakandilelong()->getData();
|
|
|
|
$isCurrentDateGreaterThanEqual2DaysBeforeLelong = function ($x) {
|
|
$tarikhLelong = Carbon::parse($x->t_lelong);
|
|
$currentDate = Carbon::now();
|
|
|
|
if ($currentDate->gte($tarikhLelong->subDays(2))) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
$pembiayaanAkanDilelong = array_filter($getPembiayaanAkanDilelong(), $isCurrentDateGreaterThanEqual2DaysBeforeLelong);
|
|
|
|
$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) {
|
|
$norujukanRecentlyAttemptPayment = array_column($norujukanRecentlyAttemptPayment, 'norujukan');
|
|
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;
|
|
};
|
|
|
|
|
|
$checkExcludePaymentList = function($x) {
|
|
$norujukanExcludeList = [
|
|
'011237240808-0003',
|
|
'011237240719-0015',
|
|
'011237240806-0011',
|
|
'011237240828-0001',
|
|
'011237240904-0007',
|
|
'011237240904-0008',
|
|
'011237240904-0009',
|
|
'011237240719-0023',
|
|
'011237240719-0024',
|
|
'011237240719-0025',
|
|
'011237240618-0026',
|
|
'011237240719-0027',
|
|
'011237240719-0028',
|
|
'011237240618-0020',
|
|
'011237240719-0030',
|
|
'011237240618-0029',
|
|
'011237240731-0026',
|
|
'011237240715-0027',
|
|
'011237240912-0009',
|
|
];
|
|
|
|
return in_array($x->norujukan, $norujukanExcludeList);
|
|
};
|
|
|
|
return array_map(function ($x) use ($isNorujukanPaymentRecentlyAttempted, $isNorujukanAkanDilelong, $isNorujukanIsInFasa2, $isCawanganNotPermitUjrahPayment, $checkExcludePaymentList) {
|
|
|
|
$x->disabled_payment = false;
|
|
|
|
if (
|
|
$isNorujukanAkanDilelong($x)
|
|
|| $isNorujukanIsInFasa2($x)
|
|
|| $isNorujukanPaymentRecentlyAttempted($x)
|
|
|| $isCawanganNotPermitUjrahPayment($x)
|
|
|| $checkExcludePaymentList($x)
|
|
) {
|
|
$x->disabled_payment = true;
|
|
}
|
|
|
|
return $x;
|
|
|
|
}, $pembiayaan);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|