Files
lpj/app/Helpers/Lpj.php
Daeng Deni Mardaeni d1b200d9ca Tambahkan fungsionalitas perhitungan permohonan berdasarkan pengguna
Menambahkan fungsi `countPermohonanForUser` ke dalam file `Lpj.php` untuk menghitung jumlah permohonan yang terkait dengan pengguna tertentu melalui relasi `userPenilai`. Selain itu, menambahkan penggunaan model `Penilaian`
2024-12-04 20:55:28 +07:00

294 lines
9.0 KiB
PHP

<?php
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\HolidayCalendar;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Penilaian;
function formatTanggalIndonesia($date, $time = false)
{
Carbon::setLocale('id');
$waktu = Carbon::parse($date);
if (!$time) {
return $waktu->translatedFormat('d F Y');
}
return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB';
}
function formatRupiah($number)
{
$number = (float) $number;
return 'Rp ' . number_format($number, 2, ',', '.');
}
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->postal_code ?? '');
}
// andy add
function checkActiveDateRangePenawaran($id)
{
$penawaran = PenawaranTender::find($id);
$start_date = strtotime($penawaran->start_date);
$end_date = strtotime($penawaran->end_date);
// $todays_date = strtotime(now());
$todays_date = strtotime("+1 day", strtotime(now()));
$allow = true;
if ($todays_date >= $start_date && $todays_date <= $end_date) {
//Penawaran dibuka
$allow = true;
} else {
if ($todays_date < $start_date) {
//Penawaran Belum dibuka
$allow = true;
} else {
//Penawaran sudah ditutup
$allow = false;
}
}
return $allow;
}
function checkKelengkapanDetailKJPP($id)
{
$allow = true;
// DB::enableQueryLog();
// detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap?
$query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where(
function ($query) {
// no_proposal
$query->orWhere('no_proposal', '', "");
$query->orWhereNull('no_proposal');
// tgl_proposal
$query->orWhere('tgl_proposal', '', "");
$query->orWhereNull('tgl_proposal');
$query->orWhere('biaya_penawaran', '', "");
$query->orWhereNull('biaya_penawaran');
$query->orWhere('attachment', '', "");
$query->orWhereNull('attachment');
$query->orWhere('dokumen_persetujuan', '', "");
$query->orWhereNull('dokumen_persetujuan');
},
)->get();
// $sql = DB::getQueryLog();
if (sizeof($query) > 0) {
$allow = false;
}
return $allow;
}
// convert
function convertSlug($slug)
{
$words = explode('-', $slug);
foreach ($words as $index => $word) {
$words[$index] = strtoupper($word);
}
return implode(' ', $words);
}
// generate last penawaran.code
function onLastnumberCodePenawaran()
: string
{
// ambil code terakhir
$maxCode = PenawaranTender::max('code');
// chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
// $penawaran = PenawaranTender::latest()->first();
$penawaran = PenawaranTender::where('code','=',$maxCode)->first();
$code_penawaran_last='';
// nomor di set 0001
$noUrutAkhirString = sprintf("%04s", 1);
if($penawaran)
{
$isNum = substr($maxCode, 2); // memastikan string ke 3 s/d 8 adalan numiric
$isNP = substr($maxCode, 0, 2);
if((8 == strlen($maxCode)) && ("NP"==$isNP) && (isNumeric($isNum)))
{
$code_penawaran_last = substr ($maxCode, -4);
$year_penawaran_last = Carbon::parse($penawaran->created_at)->year;
$year_now = Carbon::now()->year;
if ($year_now == $year_penawaran_last) {
$noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
}
// jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 0001
}
}
return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
}
function isNumeric($str)
{
return ctype_digit($str);
}
// generate last penawaran.no_spk
function onLastnumberCodePenawaranSPK($jenis_laporan_code): string
{
// 20241124_001 ==> spk_no_core
// XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024
// 001 / PJ / JKT / XI / FR / 2024
$maxCode = PenawaranTender::max('spk_no_core');
$penawaran = PenawaranTender::where('spk_no_core','=',$maxCode)->first();
$no_spk_penawaran_last='';
$year_penawaran_last='';
$year_now = Carbon::now()->year;
// nomor di set 001
$noUrutAkhirString = sprintf("%03s", 1);
if($penawaran)
{
$no_spk_penawaran_last = substr ($maxCode, -3);
$year_penawaran_last = substr ($maxCode, 0, 4);
if($year_now == $year_penawaran_last)
{
$noUrutAkhirString = sprintf("%03s", abs($no_spk_penawaran_last + 1));
}
// jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 001
}
$month = onRomawi(Carbon::now()->month);
$lastSPK = $noUrutAkhirString.' / PJ / JKT / '. $month .' / ' .$jenis_laporan_code.' / '.$year_now;
return $lastSPK;
}
function onRomawi(int $bln): string
{
switch ($bln){
case 1:
return "I";
break;
case 2:
return "II";
break;
case 3:
return "III";
break;
case 4:
return "IV";
break;
case 5:
return "V";
break;
case 6:
return "VI";
break;
case 7:
return "VII";
break;
case 8:
return "VIII";
break;
case 9:
return "IX";
break;
case 10:
return "X";
break;
case 11:
return "XI";
break;
case 12:
return "XII";
break;
}
}
function penyebut($nilai) {
$nilai = abs($nilai);
$huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas");
$temp = "";
if ($nilai < 12) {
$temp = " ". $huruf[$nilai];
} else if ($nilai <20) {
$temp = penyebut($nilai - 10). " belas";
} else if ($nilai < 100) {
$temp = penyebut($nilai/10)." puluh". penyebut($nilai % 10);
} else if ($nilai < 200) {
$temp = " seratus" . penyebut($nilai - 100);
} else if ($nilai < 1000) {
$temp = penyebut($nilai/100) . " ratus" . penyebut($nilai % 100);
} else if ($nilai < 2000) {
$temp = " seribu" . penyebut($nilai - 1000);
} else if ($nilai < 1000000) {
$temp = penyebut($nilai/1000) . " ribu" . penyebut($nilai % 1000);
} else if ($nilai < 1000000000) {
$temp = penyebut($nilai/1000000) . " juta" . penyebut($nilai % 1000000);
} else if ($nilai < 1000000000000) {
$temp = penyebut($nilai/1000000000) . " milyar" . penyebut(fmod($nilai,1000000000));
} else if ($nilai < 1000000000000000) {
$temp = penyebut($nilai/1000000000000) . " trilyun" . penyebut(fmod($nilai,1000000000000));
}
return $temp;
}
function terbilang($nilai) {
if($nilai<0) {
$hasil = "minus ". trim(penyebut($nilai));
} else {
$hasil = trim(penyebut($nilai));
}
return $hasil;
}
// andy add
function hitungHariKerja($tanggalMulai, $tanggalSelesai)
{
$tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay();
$tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay();
$hariKerja = 0;
$tanggalSekarang = $tanggalMulai->copy();
while ($tanggalSekarang <= $tanggalSelesai) {
// Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur
if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), holidays())) {
$hariKerja++;
}
$tanggalSekarang->addDay();
}
return $hariKerja;
}
function holidays()
{
return HolidayCalendar::pluck('date')->map(
function ($item) {
return Carbon::parse($item)->format('Y-m-d');
},
)->toArray();
}
function countPermohonanForUser($userId)
{
return Penilaian::whereHas('userPenilai', function ($query) use ($userId) {
$query->where('user_id', $userId);
})->count();
}