diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index c5c2eb7..ed09be5 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -1,16 +1,16 @@ translatedFormat('d F Y'); } return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; @@ -19,7 +19,7 @@ use Modules\Lpj\Models\HolidayCalendar; function formatRupiah($number) { - $number = (float)$number; + $number = (float) $number; return 'Rp ' . number_format($number, 2, ',', '.'); } @@ -34,8 +34,8 @@ use Modules\Lpj\Models\HolidayCalendar; { $penawaran = PenawaranTender::find($id); - $start_date = strtotime($penawaran->start_date); - $end_date = strtotime($penawaran->end_date); + $start_date = strtotime($penawaran->start_date); + $end_date = strtotime($penawaran->end_date); // $todays_date = strtotime(now()); $todays_date = strtotime("+1 day", strtotime(now())); @@ -62,25 +62,25 @@ use Modules\Lpj\Models\HolidayCalendar; // 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'); + function ($query) { + // no_proposal + $query->orWhere('no_proposal', '', ""); + $query->orWhereNull('no_proposal'); - // tgl_proposal - $query->orWhere('tgl_proposal', '', ""); - $query->orWhereNull('tgl_proposal'); + // tgl_proposal + $query->orWhere('tgl_proposal', '', ""); + $query->orWhereNull('tgl_proposal'); - $query->orWhere('biaya_penawaran', '', ""); - $query->orWhereNull('biaya_penawaran'); + $query->orWhere('biaya_penawaran', '', ""); + $query->orWhereNull('biaya_penawaran'); - $query->orWhere('attachment', '', ""); - $query->orWhereNull('attachment'); + $query->orWhere('attachment', '', ""); + $query->orWhereNull('attachment'); - $query->orWhere('dokumen_persetujuan', '', ""); - $query->orWhereNull('dokumen_persetujuan'); - }, - )->get(); + $query->orWhere('dokumen_persetujuan', '', ""); + $query->orWhereNull('dokumen_persetujuan'); + }, + )->get(); // $sql = DB::getQueryLog(); @@ -103,8 +103,9 @@ use Modules\Lpj\Models\HolidayCalendar; return implode(' ', $words); } - // generate last penawaran.code - function onLastnumberCodePenawaran(): string + // generate last penawaran.code + function onLastnumberCodePenawaran() + : string { // ambil code terakhir $maxCode = PenawaranTender::max('code'); @@ -119,15 +120,14 @@ use Modules\Lpj\Models\HolidayCalendar; { $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)); + $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; + + return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString; } // generate last penawaran.no_spk @@ -253,16 +253,9 @@ use Modules\Lpj\Models\HolidayCalendar; $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)) { + if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), holidays())) { $hariKerja++; } $tanggalSekarang->addDay(); @@ -270,3 +263,12 @@ use Modules\Lpj\Models\HolidayCalendar; return $hariKerja; } + + function holidays() + { + return HolidayCalendar::pluck('date')->map( + function ($item) { + return Carbon::parse($item)->format('Y-m-d'); + }, + )->toArray(); + } diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index 8f2b521..9ca234d 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -182,10 +182,29 @@ use Illuminate\Support\Facades\Auth; $spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code); $penawaran->spk_no = $spk_no_last; } - // generate no spk - return view('lpj::spk.edit', compact('data', 'penawaran')); + $persetujuan_no_proposal = $penawaran->detail_penawaran_no_proposal; + $persetujuan_tgl_proposal = $penawaran->detail_penawaran_tgl_proposal; + $persetujuan_sla_resume = '...'; + $persetujuan_sla_final = '...'; + if(null !==$penawaran->persetujuan) + { + $sla_resume_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_resume); + $sla_final_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_final); + + $sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text)); + $sla_final_text_terbilang = ucfirst(terbilang($sla_final_text)); + + $persetujuan_no_proposal = $penawaran->persetujuan->nomor_proposal_penawaran; + $persetujuan_tgl_proposal = Carbon::parse($penawaran->persetujuan->tanggal_proposal_penawaran)->format('d F Y'); + $persetujuan_sla_resume = $sla_resume_text.' ('.$sla_resume_text_terbilang.')'; + $persetujuan_sla_final = $sla_final_text.' ('.$sla_final_text_terbilang.')'; + + + } + + return view('lpj::spk.edit', compact('data', 'penawaran', 'persetujuan_no_proposal', 'persetujuan_tgl_proposal', 'persetujuan_sla_resume', 'persetujuan_sla_final')); } public function update(Request $request, $id): JsonResponse @@ -252,7 +271,27 @@ use Illuminate\Support\Facades\Auth; // pdf path $spkpenawaran_path = Storage::url($newFileNameWithPath); - $pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran')); + $persetujuan_no_proposal = $penawaran->detail_penawaran_no_proposal; + $persetujuan_tgl_proposal = $penawaran->detail_penawaran_tgl_proposal; + $persetujuan_sla_resume = '...'; + $persetujuan_sla_final = '...'; + if(null !==$penawaran->persetujuan) + { + $sla_resume_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_resume); + $sla_final_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_final); + + $sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text)); + $sla_final_text_terbilang = ucfirst(terbilang($sla_final_text)); + + $persetujuan_no_proposal = $penawaran->persetujuan->nomor_proposal_penawaran; + $persetujuan_tgl_proposal = Carbon::parse($penawaran->persetujuan->tanggal_proposal_penawaran)->format('d F Y'); + $persetujuan_sla_resume = $sla_resume_text.' ('.$sla_resume_text_terbilang.')'; + $persetujuan_sla_final = $sla_final_text.' ('.$sla_final_text_terbilang.')'; + + + } + + $pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran', 'persetujuan_no_proposal', 'persetujuan_tgl_proposal', 'persetujuan_sla_resume', 'persetujuan_sla_final')); $pdf->setPaper('A4', 'portrait'); $content = $pdf->download()->getOriginalContent(); Storage::put('public/'.$newFileNameWithPath,$content); diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index e69de29..c095698 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -0,0 +1,35 @@ +function hitungHariKerja(tanggalMulai, tanggalSelesai) { + tanggalMulai = new Date(tanggalMulai); + tanggalMulai.setHours(0, 0, 0, 0); + tanggalSelesai = new Date(tanggalSelesai); + tanggalSelesai.setHours(23, 59, 59, 999); + + let hariKerja = 0; + let tanggalSekarang = new Date(tanggalMulai); + + // You'll need to implement a way to get holiday dates from your server + // For this example, we'll assume you have a global variable holidayDates + // that contains an array of holiday date strings in 'YYYY-MM-DD' format + const tanggalLibur = window.holidayDates || []; + + while (tanggalSekarang <= tanggalSelesai) { + const dayOfWeek = tanggalSekarang.getDay(); + const dateString = tanggalSekarang.toISOString().split("T")[0]; + + // Check if it's not Saturday (6) or Sunday (0) and not a holiday + if ( + dayOfWeek !== 0 && + dayOfWeek !== 6 && + !tanggalLibur.includes(dateString) + ) { + hariKerja++; + } + + tanggalSekarang.setDate(tanggalSekarang.getDate() + 1); + } + + return hariKerja; +} + +// Make the function available globally +window.hitungHariKerja = hitungHariKerja; diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index 8c95b61..0cae77e 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -193,15 +193,18 @@ @if($detail->details) - @php $custom_field = json_decode($detail->details,true) @endphp -
- Berdasarkan surat penawaran Saudara {{ $penawaran->detail_penawaran_no_proposal }} tanggal {{ $penawaran->detail_penawaran_tgl_proposal }} atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini. + Berdasarkan surat penawaran Saudara {{ $persetujuan_no_proposal }} tanggal {{ $persetujuan_tgl_proposal }} atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini.
- Berdasarkan surat penawaran Saudara [No proposal penawaran sesuai data pemeriksaan persetujuan penawaran] tanggal [Tgl proposal penawaran sesuai data pemeriksaan persetujuan penawaran] atas nama [Nama Debitur sesuai data register], dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini. + Berdasarkan surat penawaran Saudara + [No proposal penawaran sesuai data pemeriksaan persetujuan penawaran] tanggal [Tgl proposal penawaran sesuai data pemeriksaan persetujuan penawaran] atas nama [Nama Debitur sesuai data register], dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini.
+
No. {{ $penawaran->spk_no }}
@@ -81,7 +81,7 @@- Berdasarkan surat penawaran Saudara {{ $penawaran->detail_penawaran_no_proposal }} tanggal {{ $penawaran->detail_penawaran_tgl_proposal }} atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini. + Berdasarkan surat penawaran Saudara {{ $persetujuan_no_proposal }} tanggal {{ $persetujuan_tgl_proposal }} atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini.