feat(lpj): perbarui fungsi dan struktur kode

- Mengatur ulang urutan penggunaan namespace untuk konsistensi.
- Memperbaiki penanganan kesalahan pada fungsi formatTanggalIndonesia.
- Menambahkan logika untuk memeriksa rentang tanggal aktif pada fungsi checkActiveDateRangePenawaran.
- Memperbaiki dan menyederhanakan logika pada fungsi checkKelengkapanDetailKJPP.
- Memperbarui fungsi generateLpjUniqueCode untuk menghasilkan kode unik dengan format yang lebih baik.
- Menyempurnakan fungsi formatNotifikasi untuk menampilkan pesan yang lebih informatif.
This commit is contained in:
Daeng Deni Mardaeni
2025-04-23 09:26:42 +07:00
parent d1744b07ec
commit fd21a5b86f

View File

@@ -1,23 +1,23 @@
<?php <?php
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\CustomField; use Modules\Location\Models\City;
use Modules\Lpj\Models\HolidayCalendar; use Modules\Location\Models\District;
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Location\Models\Province;
use Modules\Lpj\Models\PenawaranTender; use Modules\Location\Models\Village;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\JenisDokumen; use Modules\Lpj\Models\HolidayCalendar;
use Modules\Lpj\Models\TeamsUsers; use Modules\Lpj\Models\JenisDokumen;
use Modules\Lpj\Models\Laporan; use Modules\Lpj\Models\Laporan;
use Modules\Usermanagement\Models\User; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Location\Models\Province; use Modules\Lpj\Models\PenawaranTender;
use Modules\Location\Models\City; use Modules\Lpj\Models\Penilaian;
use Modules\Location\Models\District; use Modules\Lpj\Models\TeamsUsers;
use Modules\Location\Models\Village; use Modules\Usermanagement\Models\User;
function formatTanggalIndonesia($date, $time = false) function formatTanggalIndonesia($date, $time = false)
{ {
Carbon::setLocale('id'); Carbon::setLocale('id');
try { try {
$waktu = Carbon::parse($date); $waktu = Carbon::parse($date);
@@ -25,28 +25,28 @@ function formatTanggalIndonesia($date, $time = false)
return $waktu->translatedFormat('d F Y'); return $waktu->translatedFormat('d F Y');
} }
return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB';
} catch (\Throwable $e) { } catch (Throwable $e) {
return $date; return $date;
} }
} }
function formatRupiah($number,$decimals = 0) function formatRupiah($number, $decimals = 0)
{ {
$number = (float) $number; $number = (float) $number;
return 'Rp ' . number_format($number, $decimals, ',', '.'); return 'Rp ' . number_format($number, $decimals, ',', '.');
} }
function formatAlamat($alamat) function formatAlamat($alamat)
{ {
return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->village->postal_code ?? ''); return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->village->postal_code ?? '');
} }
// andy add // andy add
function checkActiveDateRangePenawaran($id) function checkActiveDateRangePenawaran($id)
{ {
$penawaran = PenawaranTender::find($id); $penawaran = PenawaranTender::find($id);
$start_date = strtotime($penawaran->start_date); $start_date = strtotime($penawaran->start_date);
@@ -69,10 +69,10 @@ function checkActiveDateRangePenawaran($id)
} }
return $allow; return $allow;
} }
function checkKelengkapanDetailKJPP($id) function checkKelengkapanDetailKJPP($id)
{ {
$allow = true; $allow = true;
// DB::enableQueryLog(); // DB::enableQueryLog();
// detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap? // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap?
@@ -104,11 +104,11 @@ function checkKelengkapanDetailKJPP($id)
} }
return $allow; return $allow;
} }
// convert // convert
function convertSlug($slug) function convertSlug($slug)
{ {
$words = explode('-', $slug); $words = explode('-', $slug);
foreach ($words as $index => $word) { foreach ($words as $index => $word) {
@@ -116,11 +116,12 @@ function convertSlug($slug)
} }
return implode(' ', $words); return implode(' ', $words);
} }
// generate last penawaran.code // generate last penawaran.code
function onLastnumberCodePenawaran(): string function onLastnumberCodePenawaran()
{ : string
{
// ambil code terakhir // ambil code terakhir
$maxCode = PenawaranTender::max('code'); $maxCode = PenawaranTender::max('code');
// chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
@@ -146,16 +147,17 @@ function onLastnumberCodePenawaran(): string
} }
return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString; return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
} }
function isNumeric($str) function isNumeric($str)
{ {
return ctype_digit($str); return ctype_digit($str);
} }
// generate last penawaran.no_spk // generate last penawaran.no_spk
function onLastnumberCodePenawaranSPK($jenis_laporan_code): string function onLastnumberCodePenawaranSPK($jenis_laporan_code)
{ : string
{
// 20241124_001 ==> spk_no_core // 20241124_001 ==> spk_no_core
// XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024 // XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024
@@ -179,12 +181,13 @@ function onLastnumberCodePenawaranSPK($jenis_laporan_code): string
$month = onRomawi(Carbon::now()->month); $month = onRomawi(Carbon::now()->month);
$lastSPK = $noUrutAkhirString.' / PJ / JKT / '. $month .' / ' .$jenis_laporan_code.' / '.$year_now; $lastSPK = $noUrutAkhirString . ' / PJ / JKT / ' . $month . ' / ' . $jenis_laporan_code . ' / ' . $year_now;
return $lastSPK; return $lastSPK;
} }
function onRomawi(int $bln): string function onRomawi(int $bln)
{ : string
{
switch ($bln) { switch ($bln) {
case 1: case 1:
return "I"; return "I";
@@ -225,51 +228,65 @@ function onRomawi(int $bln): string
} }
} }
function penyebut($nilai) function penyebut($nilai)
{ {
$nilai = abs($nilai); $nilai = abs($nilai);
$huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas"); $huruf = [
"",
"satu",
"dua",
"tiga",
"empat",
"lima",
"enam",
"tujuh",
"delapan",
"sembilan",
"sepuluh",
"sebelas"
];
$temp = ""; $temp = "";
if ($nilai < 12) { if ($nilai < 12) {
$temp = " ". $huruf[$nilai]; $temp = " " . $huruf[$nilai];
} elseif ($nilai < 20) { } else if ($nilai < 20) {
$temp = penyebut($nilai - 10). " belas"; $temp = penyebut($nilai - 10) . " belas";
} elseif ($nilai < 100) { } else if ($nilai < 100) {
$temp = penyebut($nilai / 10)." puluh". penyebut($nilai % 10); $temp = penyebut($nilai / 10) . " puluh" . penyebut($nilai % 10);
} elseif ($nilai < 200) { } else if ($nilai < 200) {
$temp = " seratus" . penyebut($nilai - 100); $temp = " seratus" . penyebut($nilai - 100);
} elseif ($nilai < 1000) { } else if ($nilai < 1000) {
$temp = penyebut($nilai / 100) . " ratus" . penyebut($nilai % 100); $temp = penyebut($nilai / 100) . " ratus" . penyebut($nilai % 100);
} elseif ($nilai < 2000) { } else if ($nilai < 2000) {
$temp = " seribu" . penyebut($nilai - 1000); $temp = " seribu" . penyebut($nilai - 1000);
} elseif ($nilai < 1000000) { } else if ($nilai < 1000000) {
$temp = penyebut($nilai / 1000) . " ribu" . penyebut($nilai % 1000); $temp = penyebut($nilai / 1000) . " ribu" . penyebut($nilai % 1000);
} elseif ($nilai < 1000000000) { } else if ($nilai < 1000000000) {
$temp = penyebut($nilai / 1000000) . " juta" . penyebut($nilai % 1000000); $temp = penyebut($nilai / 1000000) . " juta" . penyebut($nilai % 1000000);
} elseif ($nilai < 1000000000000) { } else if ($nilai < 1000000000000) {
$temp = penyebut($nilai / 1000000000) . " milyar" . penyebut(fmod($nilai, 1000000000)); $temp = penyebut($nilai / 1000000000) . " milyar" . penyebut(fmod($nilai, 1000000000));
} elseif ($nilai < 1000000000000000) { } else if ($nilai < 1000000000000000) {
$temp = penyebut($nilai / 1000000000000) . " trilyun" . penyebut(fmod($nilai, 1000000000000)); $temp = penyebut($nilai / 1000000000000) . " trilyun" . penyebut(fmod($nilai, 1000000000000));
} }
return $temp; return $temp;
} }
function terbilang($nilai) function terbilang($nilai)
{ {
if ($nilai < 0) { if ($nilai < 0) {
$hasil = "minus ". trim(penyebut($nilai)); $hasil = "minus " . trim(penyebut($nilai));
} else { } else {
$hasil = trim(penyebut($nilai)); $hasil = trim(penyebut($nilai));
} }
return $hasil; return $hasil;
} }
// andy add
// andy add
function hitungHariKerja($tanggalMulai, $tanggalSelesai) function hitungHariKerja($tanggalMulai, $tanggalSelesai)
{ {
$tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay(); $tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay();
$tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay(); $tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay();
@@ -285,19 +302,19 @@ function hitungHariKerja($tanggalMulai, $tanggalSelesai)
} }
return $hariKerja; return $hariKerja;
} }
function holidays() function holidays()
{ {
return HolidayCalendar::pluck('date')->map( return HolidayCalendar::pluck('date')->map(
function ($item) { function ($item) {
return Carbon::parse($item)->format('Y-m-d'); return Carbon::parse($item)->format('Y-m-d');
}, },
)->toArray(); )->toArray();
} }
function countPermohonanForUser($userId) function countPermohonanForUser($userId)
{ {
$validStatuses = [ $validStatuses = [
'assign', 'assign',
'survey-completed', 'survey-completed',
@@ -334,11 +351,11 @@ function countPermohonanForUser($userId)
}); });
return $result->count(); return $result->count();
} }
function getMaxFileSize($jenis) function getMaxFileSize($jenis)
{ {
$jenisDokumen = JenisDokumen::where('name', $jenis)->first(); $jenisDokumen = JenisDokumen::where('name', $jenis)->first();
if (!$jenisDokumen) { if (!$jenisDokumen) {
return 2048; return 2048;
@@ -347,15 +364,15 @@ function getMaxFileSize($jenis)
$maxSizeInKB = (int) $jenisDokumen->max_size * 1024; $maxSizeInKB = (int) $jenisDokumen->max_size * 1024;
return $maxSizeInKB; return $maxSizeInKB;
} }
function getUser($userId) function getUser($userId)
{ {
return User::find($userId); return User::find($userId);
} }
function generateLpjUniqueCode($randomLength = 6) function generateLpjUniqueCode($randomLength = 6)
{ {
$year = date('y'); $year = date('y');
$month = str_pad(date('m'), 2, '0', STR_PAD_LEFT); $month = str_pad(date('m'), 2, '0', STR_PAD_LEFT);
@@ -366,20 +383,20 @@ function generateLpjUniqueCode($randomLength = 6)
// Concatenate components to create the custom code // Concatenate components to create the custom code
return $year . $month . $day . $randomNumber; return $year . $month . $day . $randomNumber;
} }
function checkRegionUserName($userId) function checkRegionUserName($userId)
{ {
$region = TeamsUsers::where('user_id', $userId)->first(); $region = TeamsUsers::where('user_id', $userId)->first();
if ($region) { if ($region) {
return $region->team->regions->name; return $region->team->regions->name;
} else { } else {
return null; return null;
} }
} }
function getNomorLaporan($permohonanId, $documentId, $type = 'nomor_laporan') function getNomorLaporan($permohonanId, $documentId, $type = 'nomor_laporan')
{ {
$laporan = Laporan::where([ $laporan = Laporan::where([
'permohonan_id' => $permohonanId, 'permohonan_id' => $permohonanId,
@@ -391,10 +408,10 @@ function getNomorLaporan($permohonanId, $documentId, $type = 'nomor_laporan')
} }
return $type == 'nomor_laporan' ? $laporan->nomor_laporan : $laporan->created_at; return $type == 'nomor_laporan' ? $laporan->nomor_laporan : $laporan->created_at;
} }
function getCustomField($param) function getCustomField($param)
{ {
if (is_numeric($param)) { if (is_numeric($param)) {
$field = CustomField::find($param); $field = CustomField::find($param);
} else { } else {
@@ -405,9 +422,10 @@ function getCustomField($param)
} else { } else {
return null; return null;
} }
} }
function getWilayahName($code, $type)
{ function getWilayahName($code, $type)
{
try { try {
$wilayah = null; $wilayah = null;
@@ -435,14 +453,14 @@ function getWilayahName($code, $type)
default: default:
return null; return null;
} }
} catch (\Exception $e) { } catch (Exception $e) {
return null; return null;
} }
} }
function formatLabel($key) function formatLabel($key)
{ {
static $labelCache = []; static $labelCache = [];
if (isset($labelCache[$key])) { if (isset($labelCache[$key])) {
@@ -453,10 +471,10 @@ function formatLabel($key)
$labelCache[$key] = $customLabel->label ?? ucwords(str_replace('_', ' ', $key)); $labelCache[$key] = $customLabel->label ?? ucwords(str_replace('_', ' ', $key));
return $labelCache[$key]; return $labelCache[$key];
} }
function calculateSLA($permohonan, $type) function calculateSLA($permohonan, $type)
{ {
if (!$type) { if (!$type) {
return null; return null;
} }
@@ -479,19 +497,20 @@ function calculateSLA($permohonan, $type)
} }
return $slaMap[$type] ?? null; return $slaMap[$type] ?? null;
} }
/** /**
* Menghitung total nilai berdasarkan key dan jenis legalitas. * Menghitung total nilai berdasarkan key dan jenis legalitas.
* *
* @param array $detailsArray * @param array $detailsArray
* @param string $key * @param string $key
* @param int $jenisLegalitas * @param int $jenisLegalitas
*
* @return int * @return int
*/ */
function calculateTotalLuas($detailsArray, $key, $jenisLegalitas, $defaultJenisLegalitas, $fallbackJenisLegalitas) function calculateTotalLuas($detailsArray, $key, $jenisLegalitas, $defaultJenisLegalitas, $fallbackJenisLegalitas)
{ {
$total = 0; $total = 0;
if ($detailsArray) { if ($detailsArray) {
@@ -545,30 +564,33 @@ function calculateTotalLuas($detailsArray, $key, $jenisLegalitas, $defaultJenisL
} }
return $total > 0 ? $total : 0; return $total > 0 ? $total : 0;
} }
function ubahNomorHp($nomorHp) { function ubahNomorHp($nomorHp)
{
$nomorHp = preg_replace('/\D/', '', $nomorHp); $nomorHp = preg_replace('/\D/', '', $nomorHp);
if (strpos($nomorHp, '62') === 0) { if (strpos($nomorHp, '62') === 0) {
$nomorBaru = substr($nomorHp, 0, 5) . "xxxxx"; $nomorBaru = substr($nomorHp, 0, 5) . "xxxxx";
return '+' . $nomorBaru; return '+' . $nomorBaru;
} elseif (strpos($nomorHp, '0') === 0) { } else if (strpos($nomorHp, '0') === 0) {
$nomorBaru = substr($nomorHp, 0, 5) . "xxxxxx"; $nomorBaru = substr($nomorHp, 0, 5) . "xxxxxx";
return $nomorBaru; return $nomorBaru;
} else { } else {
return "Nomor HP tidak valid"; return "Nomor HP tidak valid";
} }
} }
function formatNotifikasi($data){ function formatNotifikasi($notifikasi)
$data = json_decode(json_encode($data->data)); {
$data = json_decode(json_encode($notifikasi->data));
$message = $data->message;
$data = $data->data; $data = $data->data;
$notifikasi = [ $notifikasi = [
'title'=> 'Permohonan : '.$data->nomor_registrasi, 'title' => 'Permohonan : ' . $data->nomor_registrasi,
'message'=> 'Status : '.str_replace(['-','_'],' ',ucwords($data->status)) 'message' => $message,
]; ];
return $notifikasi; return $notifikasi;
} }