diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index ec2aaf3..ed09be5 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -107,24 +107,141 @@ function onLastnumberCodePenawaran() : string { - // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC + // 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 = ''; - $noUrutAkhirString = sprintf("%04s", 1); - if ($penawaran) { - $code_penawaran_last = substr($maxCode, -4); + $penawaran = PenawaranTender::where('code','=',$maxCode)->first(); + $code_penawaran_last=''; + + // nomor di set 0001 + $noUrutAkhirString = sprintf("%04s", 1); + if($penawaran) + { + $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; } + // 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 diff --git a/app/Http/Controllers/RegistrasiController.php b/app/Http/Controllers/RegistrasiController.php index 6b69cd0..c6e80b2 100644 --- a/app/Http/Controllers/RegistrasiController.php +++ b/app/Http/Controllers/RegistrasiController.php @@ -120,7 +120,7 @@ } } else { $data['status'] = 'error'; - $data['message'] ['message_ajax'] = ["no ajax request"]; + $data['message']['message_ajax'] = ["no ajax request"]; } return response()->json($data); @@ -149,6 +149,7 @@ if ($tindakan == 0) { $dataku['jenis_penilaian_id'] = $request->jenis_penilaian; $dataku['region_id'] = $request->region; + $dataku['sla'] = $request->sla; $dataku['status'] = 'registered'; if ($request->catatan2) { $dataku['registrasi_catatan'] = $request->catatan2; @@ -205,6 +206,12 @@ $validateIt['region'] = ['required']; $messageIt ['region.required'] = 'Silahkan pilih Region'; } + else + { + $validateIt['sla'] = ['required']; + $messageIt ['sla.required'] = 'Silahkan isi SLA'; + } + } elseif ($tindakan == 1) { $validateIt['catatan'] = ['required']; $messageIt ['catatan.required'] = 'Silahkan isi Catatan'; diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index d5ce566..9074567 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -84,7 +84,7 @@ use Illuminate\Support\Facades\Auth; if ($obj->tanggal_permohonan) { $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); } - + if($obj->penawaran->tanggal_penilaian_sebelumnya) { $data[$i]->penawaran->tanggal_penilaian_sebelumnya = Carbon::parse($obj->penawaran->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); @@ -104,12 +104,11 @@ use Illuminate\Support\Facades\Auth; } - // data dokumen_spk - if($obj->dokumen) + // data spk_dokumen_path + if($obj->penawaran->spk_dokumen_path) { - $spkpenawaran_path = Storage::url($obj->dokumen); - // dd($spkpenawaran_path); - $data[$i]->dokumen = $spkpenawaran_path; + $spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path); + $data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path; } $i++; @@ -148,9 +147,13 @@ use Illuminate\Support\Facades\Auth; public function edit($id) { + // dd(Carbon::now()->addDays(1)->format('d F Y')); + // dd(Carbon::now()->subDays(1)->format('d F Y')); jenis_laporan_name $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') + ->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi') ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', @@ -159,7 +162,10 @@ use Illuminate\Support\Facades\Auth; 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'kjpp.name as kjpp_name', 'kjpp.address as kjpp_address', - 'jenis_laporan.name as jenis_laporan_name' + 'jenis_laporan.name as jenis_laporan_name', + 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name', + 'jenis_laporan.code as jenis_laporan_code', + 'penilaian.waktu_penilaian as penilaian_waktu_penilain' )->first(); $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) @@ -168,24 +174,77 @@ use Illuminate\Support\Facades\Auth; ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', 'dokumen_jaminan.address as dokumen_jaminan_address'); - $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first(); if($penawaran->detail_penawaran_tgl_proposal) $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); - return view('lpj::spk.edit', compact('data', 'penawaran')); + // generate no spk + $spk_no_last=$penawaran->spk_no; + if(!$spk_no_last) + { + $spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code); + $penawaran->spk_no = $spk_no_last; + } + + // pengecekan perubahan jenis report + $array_no_last = explode("/",$spk_no_last); + $jenis_report_old=trim($array_no_last[4]); + if($jenis_report_old!=$penawaran->jenis_laporan_code) + { + $penawaran->spk_no=str_replace($jenis_report_old,$penawaran->jenis_laporan_code,$spk_no_last); + } + // pengecekan perubahan jenis report + // generate no spk + + // Jangka Waktu + // date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final) + $jangka_waktu=''; + // Jangka Waktu + $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 = $penawaran->persetujuan->sla_resume; + $sla_final_text = $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.')'; + + if($penawaran->penilaian_waktu_penilain) + { + $jangka_waktu_date_start=Carbon::parse($penawaran->penilaian_waktu_penilain)->addDays(1)->format('d F Y'); + $jangka_waktu_date_end=Carbon::parse($penawaran->persetujuan->sla_final)->format('d F Y'); + // Jangka Waktu + // date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final) + $jangka_waktu=$jangka_waktu_date_start.' - '.$jangka_waktu_date_end; + // Jangka Waktu + + } + } + + return view('lpj::spk.edit', compact('data', 'penawaran', 'persetujuan_no_proposal', 'persetujuan_tgl_proposal', 'persetujuan_sla_resume', 'persetujuan_sla_final', 'jangka_waktu')); } public function update(Request $request, $id): JsonResponse { // init - $data1 = array(); - $dataPermohonan = array(); + $data1 = []; + // $dataPermohonan = array(); + $dataPenawaran = []; // data $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi') ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', @@ -194,7 +253,9 @@ use Illuminate\Support\Facades\Auth; 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'kjpp.name as kjpp_name', 'kjpp.address as kjpp_address', - 'jenis_laporan.name as jenis_laporan_name' + 'jenis_laporan.name as jenis_laporan_name', + 'jenis_laporan.code as jenis_laporan_code', + 'penilaian.waktu_penilaian as penilaian_waktu_penilain' )->first(); $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) @@ -202,8 +263,13 @@ use Illuminate\Support\Facades\Auth; ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); - $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); - + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first(); + + // Jangka Waktu + // date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final) + $jangka_waktu=''; + // Jangka Waktu + if($penawaran->detail_penawaran_tgl_proposal) $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); @@ -213,15 +279,78 @@ use Illuminate\Support\Facades\Auth; $newFileNameWithPath = $folderPath . $newFileName; // update table permohonan - $dataPermohonan=['dokumen' => $newFileNameWithPath]; - $data->update($dataPermohonan); + // $dataPermohonan=['dokumen' => $newFileNameWithPath]; + // $data->update($dataPermohonan); // update table permohonan + // update table penawaran + $dataPenawaran['spk_dokumen_path'] = $newFileNameWithPath; + // $spk_no_last=$penawaran->spk_no; + if(!$penawaran->spk_no) + { + $spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code); + // $penawaran->no_spk = $no_spk_last; + $date_now = Carbon::now()->format('Ymd');// 20240124 + $spk_number = substr ($spk_no_last, 0, 3); + $dataPenawaran['spk_no'] = $spk_no_last; + $dataPenawaran['spk_no_core'] = $date_now.'_'.$spk_number; + + $penawaran->spk_no = $spk_no_last; + + } + + // pengecekan perubahan jenis report + $spk_no_old=$penawaran->spk_no; + $array_no_last = explode("/",$spk_no_old); + $jenis_report_old=trim($array_no_last[4]); + if($jenis_report_old!=$penawaran->jenis_laporan_code) + { + $penawaran_spk_no_new=str_replace($jenis_report_old,$penawaran->jenis_laporan_code,$spk_no_old); + $penawaran->spk_no=$penawaran_spk_no_new; + $dataPenawaran['spk_no'] = $penawaran_spk_no_new; + } + // pengecekan perubahan jenis report + + $penawaranM = PenawaranTender::find($penawaran->id); + $penawaranM->update($dataPenawaran); + // update table penawaran + // 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 = $penawaran->persetujuan->sla_resume; + $sla_final_text = $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.')'; + + if($penawaran->penilaian_waktu_penilain) + { + $jangka_waktu_date_start=Carbon::parse($penawaran->penilaian_waktu_penilain)->addDays(1)->format('d F Y'); + $jangka_waktu_date_end=Carbon::parse($penawaran->persetujuan->sla_final)->format('d F Y'); + // Jangka Waktu + // date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final) + $jangka_waktu=$jangka_waktu_date_start.' - '.$jangka_waktu_date_end; + // Jangka Waktu + + } + + + } + + $pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran', 'persetujuan_no_proposal', 'persetujuan_tgl_proposal', 'persetujuan_sla_resume', 'persetujuan_sla_final', 'jangka_waktu')); + $pdf->setPaper('A4', 'portrait'); $content = $pdf->download()->getOriginalContent(); Storage::put('public/'.$newFileNameWithPath,$content); @@ -260,8 +389,10 @@ use Illuminate\Support\Facades\Auth; } public function download($id) { - $document = Permohonan::find($id); + // dokumen pdf diambil dari penawaran.spk_dokumen_path + $permohonan = Permohonan::find($id); + $document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); - return response()->download(storage_path('app/public/' .$document->dokumen)); + return response()->download(storage_path('app/public/' .$document->spk_dokumen_path)); } } diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 9a2e05e..b72f80e 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -684,7 +684,12 @@ class TenderController extends Controller ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); } - $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)->where('status', '=', 1)->pluck('kjpp_rekanan_id')->toArray(); + $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id) + ->where('status', '=', 1) + ->pluck('kjpp_rekanan_id') + ->toArray(); + + $kjpps = KJPP::whereIn('id', $detail_penawaran) ->get() ->map(function ($item) { @@ -702,10 +707,11 @@ class TenderController extends Controller } } - return array_filter($emails); - }) - ->flatten() - ->toArray(); + return [ + 'kjpp' => $item, + 'emails' => array_filter($emails) + ]; + }); foreach ($permohonan->debiture->documents as $document) { $village_permohonan = $document->village_code; @@ -719,9 +725,21 @@ class TenderController extends Controller $cities = City::where('code', $city_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get(); + $subject = 'Send Penawaran Email'; + $body_pdf = view('lpj::penawaran.kirimEmail', [ + 'penawaran' => $penawaran, + 'permohonan' => $permohonan, + 'kjpps' => $kjpps->pluck('emails')->flatten()->toArray(), + 'villages' => $villages, + 'districts' => $districts, + 'cities' => $cities, + 'provinces' => $provinces + ])->render(); + + // Dispatch job untuk mengirim email SendPenawaranTenderJob::dispatch( - $kjpps, + $kjpps->pluck('emails')->flatten()->toArray(), $penawaran, $permohonan, $villages, @@ -730,7 +748,119 @@ class TenderController extends Controller $provinces ); - return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!'); + try { + // Proses log email untuk setiap KJPP + foreach ($kjpps as $kjppData) { + foreach ($kjppData['emails'] as $email) { + // Cek log yang sudah ada + $log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'failed') + ->first(); + + $log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'success') + ->first(); + + if ($log) { + // Update log failed menjadi success + $log->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'success', + 'error_message' => null, + 'updated_at' => now(), + ]); + } else if ($log1) { + // Update timestamp jika sudah success + $log1->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'updated_at' => now(), + ]); + } else { + // Buat log baru + PenawaranEmailTenderLog::create([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'success', + 'error_message' => null, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } + } + + return redirect()->route('tender.penawaran.ulang.index') + ->with('success', 'Email Penawaran Berhasil Terkirim!'); + } catch (\Exception $e) { + // Log email gagal untuk setiap KJPP + foreach ($kjpps as $kjppData) { + foreach ($kjppData['emails'] as $email) { + $log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'success') + ->first(); + + $log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'failed') + ->first(); + + if ($log) { + // Update log success menjadi failed + $log->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'failed', + 'error_message' => $e->getMessage(), + 'updated_at' => now(), + ]); + } else if ($log1) { + // Update error message jika sudah failed + $log1->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'error_message' => $e->getMessage(), + 'updated_at' => now(), + ]); + } else { + // Buat log baru dengan status failed + PenawaranEmailTenderLog::create([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'failed', + 'error_message' => $e->getMessage(), + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } + } + + return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg]) + ->with('error', 'Email Penawaran Gagal Terkirim!'); + } } public function kirimEmailKJPP($noreg, $id) @@ -830,13 +960,23 @@ class TenderController extends Controller if ($log) { // Jika log ditemukan dan statusnya 'failed', update status menjadi 'success' $log->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, 'status' => 'success', 'error_message' => null, // Reset error_message saat status diubah menjadi success 'updated_at' => now(), ]); } else if ($log1) { // Jika log ditemukan dan statusnya 'success' biarkan saja - $log1->update([ // Reset error_message saat status diubah menjadi success + $log1->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, 'updated_at' => now(), ]); } else { @@ -859,18 +999,54 @@ class TenderController extends Controller } catch (\Exception $e) { // Log email gagal foreach ($kjpps as $email) { - PenawaranEmailTenderLog::create([ - 'penawaran_id' => $penawaran->id, - 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, - 'to_email' => $email, - 'subject' => $subject, - 'body_pdf' => $body_pdf, - 'status' => 'failed', - 'error_message' => $e->getMessage(), - 'created_at' => now(), - 'updated_at' => now(), - ]); + $log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'success') + ->first(); + + $log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'failed') + ->first(); + + if ($log) { + // Jika log ditemukan dan statusnya 'success', update status menjadi 'failed' + $log->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'failed', + 'error_message' => $e->getMessage(), + 'updated_at' => now(), + ]); + } else if ($log1) { + // Jika log ditemukan dan statusnya 'failed' biarkan saja + $log1->update([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'error_message' => $e->getMessage(), + 'updated_at' => now(), + ]); + } else { + PenawaranEmailTenderLog::create([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'failed', + 'error_message' => $e->getMessage(), + 'created_at' => now(), + 'updated_at' => now(), + ]); + } } + return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with('error', 'Email Penawaran Gagal Terkirim!'); } } diff --git a/app/Http/Requests/JenisJaminanRequest.php b/app/Http/Requests/JenisJaminanRequest.php index 96d9653..9f4d076 100644 --- a/app/Http/Requests/JenisJaminanRequest.php +++ b/app/Http/Requests/JenisJaminanRequest.php @@ -19,7 +19,7 @@ 'name' => 'required|max:255', 'slug' => 'required|max:255', 'jenis_legalitas_jaminan_id' => 'nullable', - 'form_kategori.*' => 'required', + 'form_kategori' => 'required', ]; } @@ -39,13 +39,14 @@ $this->merge([ 'code' => IdGenerator::generate( ['table' => 'jenis_jaminan', 'length' => 5, 'prefix' => 'JJ', 'field' => 'code'], - ) + ), ]); } $this->merge([ 'jenis_legalitas_jaminan_id' => json_encode($this->jenis_legalitas_jaminan_id), - 'slug' => Str::slug($this->name), + 'form_kategori' => json_encode($this->form_kategori), + 'slug' => Str::slug($this->name), ]); } } diff --git a/app/Http/Requests/PersetujuanPenawaranRequest.php b/app/Http/Requests/PersetujuanPenawaranRequest.php index 53315db..5f85f6e 100644 --- a/app/Http/Requests/PersetujuanPenawaranRequest.php +++ b/app/Http/Requests/PersetujuanPenawaranRequest.php @@ -18,8 +18,8 @@ 'nomor_proposal_penawaran' => 'nullable|string|max:255', 'tanggal_proposal_penawaran' => 'nullable|date', 'biaya_final' => 'nullable|numeric|min:0', - 'sla_resume' => 'nullable|date', - 'sla_final' => 'nullable|date|after_or_equal:sla_resume', + 'sla_resume' => 'nullable|numeric|min:0', + 'sla_final' => 'nullable|numeric|min:0', 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240', @@ -43,10 +43,7 @@ 'biaya_final.numeric' => 'Biaya final harus berupa angka.', 'biaya_final.min' => 'Biaya final tidak boleh kurang dari 0.', 'sla_resume.required' => 'SLA Resume wajib diisi.', - 'sla_resume.date' => 'SLA Resume harus berupa tanggal yang valid.', 'sla_final.required' => 'SLA Final wajib diisi.', - 'sla_final.date' => 'SLA Final harus berupa tanggal yang valid.', - 'sla_final.after_or_equal' => 'SLA Final harus sama dengan atau setelah SLA Resume.', 'file_persetujuan_penawaran.file' => 'File Persetujuan Penawaran harus berupa file.', 'file_persetujuan_penawaran.mimes' => 'File Persetujuan Penawaran harus berupa file PDF, DOC, atau DOCX.', 'file_persetujuan_penawaran.max' => 'Ukuran File Persetujuan Penawaran tidak boleh lebih dari 10MB.', diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index 81b94b7..f8d57da 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -40,6 +40,7 @@ 'registrasi_at', 'jenis_penilaian_id', 'region_id', + 'sla' ]; protected static function boot() @@ -153,4 +154,9 @@ { return $this->hasMany(PermohonanHistory::class, 'permohonan_id', 'id')->orderBy('created_at', 'desc'); } + + public function dokumenjaminan() + { + return $this->hasMany(DokumenJaminan::class); + } } diff --git a/app/Models/PersetujuanPenawaran.php b/app/Models/PersetujuanPenawaran.php index 15176de..6a58bc2 100644 --- a/app/Models/PersetujuanPenawaran.php +++ b/app/Models/PersetujuanPenawaran.php @@ -29,8 +29,6 @@ protected $casts = [ 'tanggal_proposal_penawaran' => 'date', - 'sla_resume' => 'date', - 'sla_final' => 'date', 'biaya_final' => 'decimal:2', 'status' => 'boolean', 'authorized_status' => 'boolean', diff --git a/database/migrations/2024_11_21_114000_update_permohonan_table.php b/database/migrations/2024_11_21_114000_update_permohonan_table.php new file mode 100644 index 0000000..587fb4e --- /dev/null +++ b/database/migrations/2024_11_21_114000_update_permohonan_table.php @@ -0,0 +1,28 @@ +integer('sla')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('permohonan', function (Blueprint $table) { + $table->dropColumn('sla'); + }); + } +}; diff --git a/database/migrations/2024_11_24_024345_update_penawaran_table.php b/database/migrations/2024_11_24_024345_update_penawaran_table.php new file mode 100644 index 0000000..90b2809 --- /dev/null +++ b/database/migrations/2024_11_24_024345_update_penawaran_table.php @@ -0,0 +1,32 @@ +string('spk_no')->nullable()->after('status'); + $table->string('spk_no_core')->nullable()->after('spk_no'); + $table->string('spk_dokumen_path')->nullable()->after('spk_no_core'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penawaran', function (Blueprint $table) { + $table->dropColumn('spk_no'); + $table->dropColumn('spk_no_core'); + $table->dropColumn('spk_dokumen_path'); + }); + } +}; diff --git a/database/migrations/2024_12_03_021006_update_persetujuan_penawaran_table.php b/database/migrations/2024_12_03_021006_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..c48ca41 --- /dev/null +++ b/database/migrations/2024_12_03_021006_update_persetujuan_penawaran_table.php @@ -0,0 +1,30 @@ +string('sla_resume')->nullable()->change(); + $table->string('sla_final')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->datetime('sls_resume')->nullable(false)->change(); + $table->datetime('sla_final')->nullable(false)->change(); + }); + } +}; diff --git a/resources/views/penawaran/kirimEmail.blade.php b/resources/views/penawaran/kirimEmail.blade.php index 3c6efac..dd41a5f 100644 --- a/resources/views/penawaran/kirimEmail.blade.php +++ b/resources/views/penawaran/kirimEmail.blade.php @@ -131,12 +131,22 @@ @endphp @if (is_object($details)) - @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) - @php $luas_tanah = $details->luas_tanah; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' && + isset($details->{'Luas Tanah'}) && + is_numeric($details->{'Luas Tanah'})) + @php + $luas_tanah = $details->{'Luas Tanah'}; + @endphp @endif - @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) - @php $luas_bangunan = $details->luas_bangunan; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' && + isset($details->{'Luas Bangunan'}) && + is_numeric($details->{'Luas Bangunan'})) + @php + $luas_bangunan = $details->{'Luas Bangunan'}; + @endphp @endif @endif @endforeach diff --git a/resources/views/penawaran/kirimEmailKJPP.blade.php b/resources/views/penawaran/kirimEmailKJPP.blade.php index fd4745a..be9b98b 100644 --- a/resources/views/penawaran/kirimEmailKJPP.blade.php +++ b/resources/views/penawaran/kirimEmailKJPP.blade.php @@ -133,12 +133,22 @@ @endphp @if (is_object($details)) - @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) - @php $luas_tanah = $details->luas_tanah; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' && + isset($details->{'Luas Tanah'}) && + is_numeric($details->{'Luas Tanah'})) + @php + $luas_tanah = $details->{'Luas Tanah'}; + @endphp @endif - @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) - @php $luas_bangunan = $details->luas_bangunan; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' && + isset($details->{'Luas Bangunan'}) && + is_numeric($details->{'Luas Bangunan'})) + @php + $luas_bangunan = $details->{'Luas Bangunan'}; + @endphp @endif @endif @endforeach diff --git a/resources/views/penawaran/showKirimEmail.blade.php b/resources/views/penawaran/showKirimEmail.blade.php index 5063254..6743770 100644 --- a/resources/views/penawaran/showKirimEmail.blade.php +++ b/resources/views/penawaran/showKirimEmail.blade.php @@ -68,18 +68,10 @@ - - - Email Kantor - - + Email Kantor - - - Status Kirim - - + Status Kirim Action diff --git a/resources/views/penawaran/surat_tender.blade.php b/resources/views/penawaran/surat_tender.blade.php index 06996a2..cc90fdd 100644 --- a/resources/views/penawaran/surat_tender.blade.php +++ b/resources/views/penawaran/surat_tender.blade.php @@ -13,7 +13,7 @@
- pdfDownload + pdfDownload @if (isset($penawaran->nomor_registrasi))
-
+

Dear @php @@ -116,12 +116,22 @@ @endphp @if (is_object($details)) - @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) - @php $luas_tanah = $details->luas_tanah; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' && + isset($details->{'Luas Tanah'}) && + is_numeric($details->{'Luas Tanah'})) + @php + $luas_tanah = $details->{'Luas Tanah'}; + @endphp @endif - @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) - @php $luas_bangunan = $details->luas_bangunan; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' && + isset($details->{'Luas Bangunan'}) && + is_numeric($details->{'Luas Bangunan'})) + @php + $luas_bangunan = $details->{'Luas Bangunan'}; + @endphp @endif @endif @endforeach @@ -139,12 +149,12 @@

Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.

Mohon proposal dapat saya terima segera, sebelum - {{ formatTanggalIndonesia($penawaran->end_date,true) }} + {{ formatTanggalIndonesia($penawaran->end_date, true) }}

Best Regards,

{{ $permohonan->user->name }} + alt="{{ $permohonan->user->name }}" width="200" class="signature">

{{ $permohonan->user->name }}

@@ -159,3 +169,16 @@
@endsection + +@push('styles') + +@endpush diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php index a5b269a..e0ae1d7 100644 --- a/resources/views/penawaran/surat_tender_download.blade.php +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -131,12 +131,22 @@ @endphp @if (is_object($details)) - @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) - @php $luas_tanah = $details->luas_tanah; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' && + isset($details->{'Luas Tanah'}) && + is_numeric($details->{'Luas Tanah'})) + @php + $luas_tanah = $details->{'Luas Tanah'}; + @endphp @endif - @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) - @php $luas_bangunan = $details->luas_bangunan; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' && + isset($details->{'Luas Bangunan'}) && + is_numeric($details->{'Luas Bangunan'})) + @php + $luas_bangunan = $details->{'Luas Bangunan'}; + @endphp @endif @endif @endforeach @@ -154,7 +164,7 @@
Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia($penawaran->end_date,true) }} + class="important">{{ formatTanggalIndonesia($penawaran->end_date, true) }}
-
+

Dear @php @@ -114,12 +114,22 @@ @endphp @if (is_object($details)) - @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) - @php $luas_tanah = $details->luas_tanah; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' && + isset($details->{'Luas Tanah'}) && + is_numeric($details->{'Luas Tanah'})) + @php + $luas_tanah = $details->{'Luas Tanah'}; + @endphp @endif - @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) - @php $luas_bangunan = $details->luas_bangunan; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' && + isset($details->{'Luas Bangunan'}) && + is_numeric($details->{'Luas Bangunan'})) + @php + $luas_bangunan = $details->{'Luas Bangunan'}; + @endphp @endif @endif @endforeach @@ -142,7 +152,7 @@

Best Regards,

{{ $permohonan->user->name }} + alt="{{ $permohonan->user->name }}" width="200" class="signature">

{{ $permohonan->user->name }}

@@ -157,3 +167,16 @@
@endsection + +@push('styles') + +@endpush diff --git a/resources/views/penawaran/surat_tender_kjpp_download.blade.php b/resources/views/penawaran/surat_tender_kjpp_download.blade.php index 183e4a6..9f837d9 100644 --- a/resources/views/penawaran/surat_tender_kjpp_download.blade.php +++ b/resources/views/penawaran/surat_tender_kjpp_download.blade.php @@ -133,12 +133,22 @@ @endphp @if (is_object($details)) - @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) - @php $luas_tanah = $details->luas_tanah; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' && + isset($details->{'Luas Tanah'}) && + is_numeric($details->{'Luas Tanah'})) + @php + $luas_tanah = $details->{'Luas Tanah'}; + @endphp @endif - @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) - @php $luas_bangunan = $details->luas_bangunan; @endphp + @if ( + $detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' && + isset($details->{'Luas Bangunan'}) && + is_numeric($details->{'Luas Bangunan'})) + @php + $luas_bangunan = $details->{'Luas Bangunan'}; + @endphp @endif @endif @endforeach diff --git a/resources/views/persetujuan_penawaran/form.blade.php b/resources/views/persetujuan_penawaran/form.blade.php index 5506a39..6d56cb2 100644 --- a/resources/views/persetujuan_penawaran/form.blade.php +++ b/resources/views/persetujuan_penawaran/form.blade.php @@ -46,7 +46,7 @@ SLA Resume
- + @error('sla_resume') {{ $message }} @enderror @@ -58,7 +58,7 @@ SLA Final
- + @error('sla_final') {{ $message }} @enderror diff --git a/resources/views/persetujuan_penawaran/index.blade.php b/resources/views/persetujuan_penawaran/index.blade.php index 6a31257..c2e6c49 100644 --- a/resources/views/persetujuan_penawaran/index.blade.php +++ b/resources/views/persetujuan_penawaran/index.blade.php @@ -176,26 +176,10 @@ }, }, sla_resume: { - title: 'SLA Resume', - render: (item, data) => { - if(data.penawaran_tender.persetujuan) { - if (data.penawaran_tender.persetujuan.sla_resume) { - return window.formatTanggalIndonesia(`${data.penawaran_tender.persetujuan.sla_resume}`); - } - } - return '-'; - }, + title: 'SLA Resume' }, sla_final: { - title: 'SLA Final', - render: (item, data) => { - if(data.penawaran_tender.persetujuan) { - if (data.penawaran_tender.persetujuan.sla_final) { - return window.formatTanggalIndonesia(`${data.penawaran_tender.persetujuan.sla_final}`); - } - } - return '-'; - } + title: 'SLA Final' }, catatan: { title: 'Catatan', diff --git a/resources/views/registrasi/edit.blade.php b/resources/views/registrasi/edit.blade.php index c606451..be2b136 100644 --- a/resources/views/registrasi/edit.blade.php +++ b/resources/views/registrasi/edit.blade.php @@ -72,6 +72,15 @@
+
+ +
+ + +
+
+
+ +
+ + +
+