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 -
- -
- + @if($detail->jenisLegalitasJaminan->custom_field) + @php $custom_field = json_decode($detail->details,true) @endphp +
+ +
+ +
-
+ @endif + @else @if($detail->jenisLegalitasJaminan->custom_field)
@@ -583,7 +586,7 @@
`; - }else if (typeof dokumenJaminan === 'string' && dokumenNomor === null) { + } else if (typeof dokumenJaminan === 'string' && dokumenNomor === null) { return `
Nomor Dokumen : -- diff --git a/resources/views/spk/documentSPK.blade.php b/resources/views/spk/documentSPK.blade.php index 4c026a0..da87c48 100644 --- a/resources/views/spk/documentSPK.blade.php +++ b/resources/views/spk/documentSPK.blade.php @@ -65,7 +65,7 @@

Perihal: Penunjukan sebagai Penyedia Jasa Penilaian Agunan


- 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.


Rincian Penilaian

@@ -100,8 +100,9 @@ @foreach ($data->dokumenjaminan as $dokumen_jaminans) @if ($dokumen->id== $dokumen_jaminans->id) - @foreach ($dokumen_jaminans->detail as $detailku) - {{ $detailku->name.', ' }} + @php $details = $dokumen_jaminans->detail; @endphp + @foreach ($details as $index => $detailku) + {{ $detailku->name }}{{ $index === count($details) - 1 ? '' : ', ' }} @endforeach @endif @endforeach @@ -125,13 +126,13 @@ i - Resume akan disampaikan dalam {{ round(($data->sla)/2) }} ({{ ucfirst(terbilang(round(($data->sla)/2))) }}) hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. + Resume akan disampaikan dalam {{ $persetujuan_sla_resume }} hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. ii - Laporan penilaian lengkap akan disampaikan dalam {{ $data->sla }} ({{ ucfirst(terbilang($data->sla)) }}) hari kerja sesuai proposal penawaran. + Laporan penilaian lengkap akan disampaikan dalam {{ $persetujuan_sla_final }} hari kerja sesuai proposal penawaran. diff --git a/resources/views/spk/dokumennya.blade.php b/resources/views/spk/dokumennya.blade.php index 3bfbd22..aa3dddc 100644 --- a/resources/views/spk/dokumennya.blade.php +++ b/resources/views/spk/dokumennya.blade.php @@ -43,7 +43,8 @@

Perihal: Penunjukan sebagai Penyedia Jasa Penilaian Agunan


- 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.


Rincian Penilaian

@@ -87,13 +88,15 @@ i - Resume akan disampaikan dalam [SLA Resume - Data Pemeriksaan Persetujuan Penawaran] hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. + Resume akan disampaikan dalam + [SLA Resume - Data Pemeriksaan Persetujuan Penawaran] hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. ii - Laporan penilaian lengkap akan disampaikan dalam [SLA Final - Data Pemeriksaan Persetujuan Penawaran] hari kerja sesuai proposal penawaran. + Laporan penilaian lengkap akan disampaikan dalam + [SLA Final - Data Pemeriksaan Persetujuan Penawaran] hari kerja sesuai proposal penawaran. diff --git a/resources/views/spk/edit.blade.php b/resources/views/spk/edit.blade.php index da43f13..a5ffa92 100644 --- a/resources/views/spk/edit.blade.php +++ b/resources/views/spk/edit.blade.php @@ -66,7 +66,7 @@

SURAT PERINTAH KERJA

-

+

No. {{ $penawaran->spk_no }}

@@ -81,7 +81,7 @@

Perihal: Penunjukan sebagai Penyedia Jasa Penilaian Agunan


- 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.


Rincian Penilaian

@@ -116,8 +116,9 @@ @foreach ($data->dokumenjaminan as $dokumen_jaminans) @if ($dokumen->id== $dokumen_jaminans->id) - @foreach ($dokumen_jaminans->detail as $detailku) - {{ $detailku->name.', ' }} + @php $details = $dokumen_jaminans->detail; @endphp + @foreach ($details as $index => $detailku) + {{ $detailku->name }}{{ $index === count($details) - 1 ? '' : ', ' }} @endforeach @endif @endforeach @@ -142,13 +143,13 @@ i - Resume akan disampaikan dalam {{ round(($data->sla)/2) }} ({{ ucfirst(terbilang(round(($data->sla)/2))) }}) hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. + Resume akan disampaikan dalam {{ $persetujuan_sla_resume }} hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. ii - Laporan penilaian lengkap akan disampaikan dalam {{ $data->sla }} ({{ ucfirst(terbilang($data->sla)) }}) hari kerja sesuai proposal penawaran. + Laporan penilaian lengkap akan disampaikan dalam {{ $persetujuan_sla_final }} hari kerja sesuai proposal penawaran. diff --git a/vite.config.js b/vite.config.js index 14ef44d..93e2ba5 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,26 +1,4 @@ -import {defineConfig} from 'vite'; -import laravel from 'laravel-vite-plugin'; - -export default defineConfig({ - build: { - outDir: '../../public/build-lpj', - emptyOutDir: true, - manifest: true, - }, - plugins: [ - laravel({ - publicDirectory: '../../public', - buildDirectory: 'build-lpj', - input: [ - __dirname + '/resources/assets/sass/app.scss', - __dirname + '/resources/assets/js/app.js' - ], - refresh: true, - }), - ], -}); - -//export const paths = [ -// 'Modules/Lpj/resources/assets/sass/app.scss', -// 'Modules/Lpj/resources/assets/js/app.js', -//]; +export const paths = [ + "Modules/Lpj/resources/assets/sass/app.scss", + "Modules/Lpj/resources/assets/js/app.js", +];