Files
erahn-click/app/Services/PembiayaanService.php
T
2025-01-21 00:57:35 +08:00

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);
}
}