From 38a8fb2d7d65cec483904abe32cad3bb7266485b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 15 Nov 2024 13:48:49 +0700 Subject: [PATCH] Tambah model HolidayCalendar dan fungsi hitungHariKerja Menambahkan file model HolidayCalendar dan fungsi hitungHariKerja ke dalam helper Lpj.php untuk menghitung jumlah hari kerja antara dua tanggal dengan mengabaikan akhir pekan dan hari libur yang tercatat dalam HolidayCalendar. --- app/Helpers/Lpj.php | 228 ++++++++++++++++++--------------- app/Models/HolidayCalendar.php | 10 ++ 2 files changed, 136 insertions(+), 102 deletions(-) create mode 100644 app/Models/HolidayCalendar.php diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 355c589..044c3f6 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -1,126 +1,150 @@ month - 1]; - return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y'); -} - -function formatTanggalIndonesia2($date) -{ - \Carbon\Carbon::setLocale('id'); - $waktu = \Carbon\Carbon::parse($date); - return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; -} + use Carbon\Carbon; + use Modules\Lpj\Models\HolidayCalendar; + use Modules\Lpj\Models\PenawaranDetailTender; + use Modules\Lpj\Models\PenawaranTender; -function formatRupiah($number) -{ - $number = (float) $number; - return 'Rp ' . number_format($number, 2, ',', '.'); -} + function formatTanggalIndonesia($date) + { + $carbonDate = Carbon::parse($date); + $indonesianMonths = [ + 'Januari', + 'Februari', + 'Maret', + 'April', + 'Mei', + 'Juni', + 'Juli', + 'Agustus', + 'September', + 'Oktober', + 'November', + 'Desember', + ]; + $month = $indonesianMonths[$carbonDate->month - 1]; + return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y'); + } + + function formatTanggalIndonesia2($date) + { + Carbon::setLocale('id'); + $waktu = Carbon::parse($date); + return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; + } -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 ?? ''); -} + function formatRupiah($number) + { + $number = (float)$number; + return 'Rp ' . number_format($number, 2, ',', '.'); + } -// 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()); + 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()); - $allow = true; - if ($todays_date >= $start_date && $todays_date <= $end_date) { - //Penawaran dibuka $allow = true; - } else { - if ($todays_date < $start_date) { - //Penawaran Belum dibuka + if ($todays_date >= $start_date && $todays_date <= $end_date) { + //Penawaran dibuka $allow = true; } else { - //Penawaran sudah ditutup + 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; } - return $allow; -} + // convert + function convertSlug($slug) + { + $words = explode('-', $slug); -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'); + foreach ($words as $index => $word) { + $words[$index] = strtoupper($word); + } - $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 implode(' ', $words); } - return $allow; -} + // andy add -// convert -function convertSlug($slug) -{ - $words = explode('-', $slug); + function hitungHariKerja($tanggalMulai, $tanggalSelesai) + { + $tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay(); + $tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay(); - foreach ($words as $index => $word) { - $words[$index] = strtoupper($word); + $hariKerja = 0; + $tanggalSekarang = $tanggalMulai->copy(); + + // Ambil semua tanggal libur dari tabel holiday calendar + $tanggalLibur = HolidayCalendar::whereBetween('date', [$tanggalMulai, $tanggalSelesai])->pluck('date')->map( + function ($item) { + return Carbon::parse($item)->format('Y-m-d'); + }, + )->toArray(); + + 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'), $tanggalLibur)) { + $hariKerja++; + } + $tanggalSekarang->addDay(); + } + + return $hariKerja; } - - return implode(' ', $words); -} -// andy add diff --git a/app/Models/HolidayCalendar.php b/app/Models/HolidayCalendar.php new file mode 100644 index 0000000..ec721d6 --- /dev/null +++ b/app/Models/HolidayCalendar.php @@ -0,0 +1,10 @@ +