From c1f66b23c3b0735d9eb6595b8049bd79047b18bb Mon Sep 17 00:00:00 2001 From: rahmatrafli1 Date: Wed, 13 Nov 2024 18:07:57 +0700 Subject: [PATCH 01/11] membuat fitur download surat tender dalam bentuk pdf part 1 --- app/Helpers/Lpj.php | 13 +- app/Http/Controllers/TenderController.php | 88 ++++++++++- app/Models/PenawaranDetailTender.php | 5 + app/Models/PenawaranTender.php | 4 +- ...24_11_13_015203_update_penawaran_table.php | 28 ++++ database/seeders/LpjDatabaseSeeder.php | 54 +++---- resources/views/penawaran/edit.blade.php | 16 +- .../views/penawaran/surat_tender.blade.php | 112 ++++++++++--- .../penawaran/surat_tender_download.blade.php | 148 ++++++++++++++++++ routes/registrasi.php | 68 ++++---- routes/web.php | 1 + 11 files changed, 441 insertions(+), 96 deletions(-) create mode 100644 database/migrations/2024_11_13_015203_update_penawaran_table.php create mode 100644 resources/views/penawaran/surat_tender_download.blade.php diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index c51457b..f519025 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -25,6 +25,13 @@ function formatTanggalIndonesia($date) 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'; +} + function formatRupiah($number) { @@ -96,8 +103,9 @@ function checkKelengkapanDetailKJPP($id) } // convert -function convertSlug($slug) { - +function convertSlug($slug) +{ + $words = explode('-', $slug); foreach ($words as $index => $word) { @@ -107,4 +115,3 @@ function convertSlug($slug) { return implode(' ', $words); } // andy add - diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 6dd992f..f57a513 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -3,13 +3,20 @@ namespace Modules\Lpj\Http\Controllers; use Exception; +use Barryvdh\DomPDF\PDF; use Illuminate\Http\Request; use Modules\Lpj\Models\KJPP; +use Modules\Location\Models\City; use Illuminate\Support\Facades\DB; use Modules\Lpj\Models\Permohonan; use App\Http\Controllers\Controller; +use Illuminate\Support\Facades\Auth; use Maatwebsite\Excel\Facades\Excel; +use Modules\Location\Models\Village; use Modules\Lpj\Models\JenisLaporan; +use Modules\Location\Models\District; +use Modules\Location\Models\Province; +use Illuminate\Support\Facades\Storage; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\TujuanPenilaianKJPP; @@ -66,12 +73,14 @@ class TenderController extends Controller $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); // Add created_by/updated_by from the authenticated user - $userId = auth()->user()->id; + $userId = Auth::user()->id; $validated['nomor_registrasi'] = $permohonan->nomor_registrasi; $validated['status'] = $request->input('status') ?? 'tender'; $validated['updated_by'] = $userId; // Updating the record + $validated['end_date'] = $request->input('end_date') . ' 17:00:00'; + // dd($validated['end_date']); $permohonan->update($validated); // Adding created_by for the new PenawaranTender record @@ -117,6 +126,11 @@ class TenderController extends Controller $penawaranExists = PenawaranTender::where('nomor_registrasi', $noreg)->exists(); $penawaran1 = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran1->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + // dd($penawaran1->id); if ($penawaran1) { $penawaran = $penawaran1; @@ -143,6 +157,14 @@ class TenderController extends Controller $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + if (!$penawaran) { + return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!'); + } + + if ($penawaran->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); $jenis_laporan = JenisLaporan::all(); @@ -152,6 +174,8 @@ class TenderController extends Controller $kjpp = KJPP::all(); + // dd($penawaran); + return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg', 'kjpps', 'permohonan')); } @@ -171,13 +195,15 @@ class TenderController extends Controller $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); // Ambil ID user yang sedang login - $userId = auth()->user()->id; + $userId = Auth::user()->id; // Jangan ubah created_by untuk data yang sudah ada $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; $validated['status'] = $request->input('status') ?? 'tender'; $validated['created_by'] = $userId; $validated['updated_by'] = $userId; // Hanya update 'updated_by' + $validated['end_date'] = $request->input('end_date') . ' 17:00:00'; + // dd($validated['end_date']); // Update data penawaran dan permohonan $penawaran->update($validated); @@ -247,19 +273,46 @@ class TenderController extends Controller public function showSuratTender($noreg) { $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + + // Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan + if ($permohonan->debiture->documents->isEmpty()) { + return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) + ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); + } + + foreach ($permohonan->debiture->documents as $document) { + $village_permohonan = $document->village_code; + $district_permohonan = $document->district_code; + $city_permohonan = $document->city_code; + $province_permohonan = $document->province_code; + } + + $villages = Village::where('code', $village_permohonan)->get(); + $districts = District::where('code', $district_permohonan)->get(); + $cities = City::where('code', $city_permohonan)->get(); + $provinces = Province::where('code', $province_permohonan)->get(); // Kalau tidak ketemu nomor registrasi dengan tabel penawaran if (!$penawaran) { return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg]) ->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!'); } + + date_default_timezone_set('Asia/Jakarta'); + + $now = date('Y-m-d H:i:s'); // Jika batas tanggal penawaran sudah lewat - if ($penawaran->end_date < date('Y-m-d')) { + if ($penawaran->end_date < $now) { return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg]) ->with('error', 'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!'); } - return view('lpj::penawaran.surat_tender', compact('penawaran', 'noreg')); + return view('lpj::penawaran.surat_tender', compact('penawaran', 'noreg', 'permohonan', 'villages', 'districts', 'cities', 'provinces')); } public function datatablesPenawaran(Request $request) @@ -414,4 +467,31 @@ class TenderController extends Controller // Kembalikan hasil pengecekan sebagai JSON return response()->json(['exists' => $exists]); } + + public function downloadSuratTender($noreg) + { + $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + + foreach ($permohonan->debiture->documents as $document) { + $village_permohonan = $document->village_code; + $district_permohonan = $document->district_code; + $city_permohonan = $document->city_code; + $province_permohonan = $document->province_code; + } + + $villages = Village::where('code', $village_permohonan)->get(); + $districts = District::where('code', $district_permohonan)->get(); + $cities = City::where('code', $city_permohonan)->get(); + $provinces = Province::where('code', $province_permohonan)->get(); + + $pdf = app('dompdf.wrapper'); // create an instance of the PDF class + $pdf->loadView('lpj::penawaran.surat_tender_download', compact('penawaran', 'permohonan', 'villages', 'districts', 'cities', 'provinces')); + + return $pdf->download('surat_tender' . time() . '.pdf'); + } } diff --git a/app/Models/PenawaranDetailTender.php b/app/Models/PenawaranDetailTender.php index 8b65a91..619f9e2 100644 --- a/app/Models/PenawaranDetailTender.php +++ b/app/Models/PenawaranDetailTender.php @@ -22,4 +22,9 @@ class PenawaranDetailTender extends Model { return $this->belongsTo(PenawaranTender::class, 'penawaran_id', 'id'); } + + public function kjpp(): BelongsTo + { + return $this->belongsTo(KJPP::class, 'kjpp_rekanan_id', 'id'); + } } diff --git a/app/Models/PenawaranTender.php b/app/Models/PenawaranTender.php index c78d00e..f38d42e 100644 --- a/app/Models/PenawaranTender.php +++ b/app/Models/PenawaranTender.php @@ -34,7 +34,7 @@ class PenawaranTender extends Model // menambahkan relasi tujuan penilaian KJPP public function tujuanPenilaianKjpp() { - return $this->belongsTo(TujuanPenilaianKJPP::class, 'tujuan_penilaian_kjpp_id','id'); + return $this->belongsTo(TujuanPenilaianKJPP::class, 'tujuan_penilaian_kjpp_id', 'id'); } public function permohonan() @@ -46,6 +46,4 @@ class PenawaranTender extends Model { return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id'); } - - } diff --git a/database/migrations/2024_11_13_015203_update_penawaran_table.php b/database/migrations/2024_11_13_015203_update_penawaran_table.php new file mode 100644 index 0000000..545d623 --- /dev/null +++ b/database/migrations/2024_11_13_015203_update_penawaran_table.php @@ -0,0 +1,28 @@ +datetime('end_date')->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penawaran', function (Blueprint $table) { + $table->date('end_date')->change(); + }); + } +}; diff --git a/database/seeders/LpjDatabaseSeeder.php b/database/seeders/LpjDatabaseSeeder.php index 0377451..53a1b25 100644 --- a/database/seeders/LpjDatabaseSeeder.php +++ b/database/seeders/LpjDatabaseSeeder.php @@ -12,34 +12,34 @@ class LpjDatabaseSeeder extends Seeder public function run(): void { $this->call([ - BranchSeeder::class, - CurrencySeeder::class, - JenisFasilitasKreditSeeder::class, - JenisLegalitasJaminanSeeder::class, - JenisJaminanSeeder::class, - JenisDokumenSeeder::class, - TujuanPenilaianSeeder::class, - NilaiPlatformSeeder::class, - HubunganPemilikJaminanSeeder::class, - HubunganPenghuniJaminanSeeder::class, - ArahMataAnginSeeder::class, - StatusPermohonanSeeder::class, - RegionSeeder::class, - TeamsSeeder::class, - TeamUsersSeeder::class, - JenisPenilaianSeeder::class, - TujuanPenilaianKJPPSeeder::class, - IjinUsahaSeeder::class, - JenisLaporanSeeder::class, - DebitureSeeder::class, - PermohonanSeeder::class, + // BranchSeeder::class, + // CurrencySeeder::class, + // JenisFasilitasKreditSeeder::class, + // JenisLegalitasJaminanSeeder::class, + // JenisJaminanSeeder::class, + // JenisDokumenSeeder::class, + // TujuanPenilaianSeeder::class, + // NilaiPlatformSeeder::class, + // HubunganPemilikJaminanSeeder::class, + // HubunganPenghuniJaminanSeeder::class, + // ArahMataAnginSeeder::class, + // StatusPermohonanSeeder::class, + // RegionSeeder::class, + // TeamsSeeder::class, + // TeamUsersSeeder::class, + // JenisPenilaianSeeder::class, + // TujuanPenilaianKJPPSeeder::class, + // IjinUsahaSeeder::class, + // JenisLaporanSeeder::class, + // DebitureSeeder::class, + // PermohonanSeeder::class, PemilikJaminanSeeder::class, - DokumenJaminanSeeder::class, - DetailDokumenJaminanSeeder::class, - KJPPSeeder::class, - PenawaranSeeder::class, - DetailPenawaranSeeder::class, - PenilaianSeeder::class, + // DokumenJaminanSeeder::class, + // DetailDokumenJaminanSeeder::class, + // KJPPSeeder::class, + // PenawaranSeeder::class, + // DetailPenawaranSeeder::class, + // PenilaianSeeder::class, ]); } } diff --git a/resources/views/penawaran/edit.blade.php b/resources/views/penawaran/edit.blade.php index d49a6bd..a2d1c4e 100644 --- a/resources/views/penawaran/edit.blade.php +++ b/resources/views/penawaran/edit.blade.php @@ -39,8 +39,13 @@ Nama KJPP Sebelumnya
+ @php + $nama_kjpp = $penawaran->nama_kjpp_sebelumnya; + $nama = explode(' - ', $nama_kjpp)[1] ?? ''; + @endphp + + name="nama_kjpp_sebelumnya" readonly value="{{ $nama !== null ? $nama : '' }}">
@@ -49,7 +54,8 @@
+ name="biaya_kjpp_sebelumnya" readonly + value="{{ $penawaran->biaya_kjpp_sebelumnya !== null ? formatRupiah($penawaran->biaya_kjpp_sebelumnya) : '' }}">
@@ -132,8 +138,8 @@
-
- + @error('end_date') {{ $message }} @enderror diff --git a/resources/views/penawaran/surat_tender.blade.php b/resources/views/penawaran/surat_tender.blade.php index ee65e8c..0046877 100644 --- a/resources/views/penawaran/surat_tender.blade.php +++ b/resources/views/penawaran/surat_tender.blade.php @@ -12,39 +12,115 @@ Surat Tender
- @if (isset($penawaran->nomor_registrasi)) - Back - @else - Back - @endif + + pdfDownload + + @if (isset($penawaran->nomor_registrasi)) + Back + @else + Back + @endif

Dear - {{ ucwords(auth()->user()->name) ?? 'Tidak Ada' }} + + @php + $allPeople = []; + + foreach ($penawaran->penawaranKjpp as $kjpp) { + if ($kjpp->kjpp->nama_pic_admin) { + $allPeople[] = ucwords($kjpp->kjpp->nama_pic_admin); + } + + if ($kjpp->kjpp->detail_nama_pic_admin) { + try { + $decoded = json_decode($kjpp->kjpp->detail_nama_pic_admin); + if ($decoded) { + foreach ($decoded as $admin) { + if (isset($admin->nama_pic_admin)) { + $allPeople[] = ucwords($admin->nama_pic_admin); + } + } + } + } catch (\Exception $e) { + // Handle invalid JSON silently + } + } + } + + $allPeople = array_filter($allPeople); + $totalPeople = count($allPeople); + @endphp + @if ($totalPeople > 0) + @foreach ($allPeople as $index => $person) + {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} + @endforeach + @else + Tidak Ada + @endif +

Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ ucwords($penawaran->permohonan->user->name) }}, tujuan penilaian + class="font-bold">{{ ucwords($permohonan->user->name) }}, tujuan penilaian untuk - @foreach ($penawaran->tujuanPenilaianKJPP as $tujuanPenilaianKJPP) - {{ $tujuanPenilaianKJPP->name }} - @endforeach + {{ $penawaran->tujuanPenilaianKJPP->name }} , laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut :

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

Mohon proposal dapat saya terima segera, sebelum - {{ formatTanggalIndonesia($penawaran->end_date) }} pukul 17.00 WIB + {{ formatTanggalIndonesia2($penawaran->end_date) }}

Best Regards, - [otomasi dari nama dan tanda tangan user penginput] - Sub Direktorat Appraisal +

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

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

+
+ Sub Direktorat Appraisal

PT. Bank Artha Graha Internasional, Tbk.
Gedung Bank Artha Graha, Lantai 3
diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php new file mode 100644 index 0000000..af28ad7 --- /dev/null +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -0,0 +1,148 @@ + + + + + + + + Surat Tender | {{ formatTanggalIndonesia(now()) }} + + + + +

+ Dear + @php + $allPeople = []; + + foreach ($penawaran->penawaranKjpp as $kjpp) { + if ($kjpp->kjpp->nama_pic_admin) { + $allPeople[] = ucwords($kjpp->kjpp->nama_pic_admin); + } + + if ($kjpp->kjpp->detail_nama_pic_admin) { + try { + $decoded = json_decode($kjpp->kjpp->detail_nama_pic_admin); + if ($decoded) { + foreach ($decoded as $admin) { + if (isset($admin->nama_pic_admin)) { + $allPeople[] = ucwords($admin->nama_pic_admin); + } + } + } + } catch (\Exception $e) { + // Handle invalid JSON silently + } + } + } + + $allPeople = array_filter($allPeople); + $totalPeople = count($allPeople); + @endphp + @if ($totalPeople > 0) + @foreach ($allPeople as $index => $person) + {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} + @endforeach + @else + Tidak Ada + @endif + + +
+ Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ ucwords($permohonan->user->name) }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut: +
+ +
+ Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->jenisJaminan->name }} + @endforeach + Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->address }}, Kel. @foreach ($villages as $village) + {{ $village->name }} + @endforeach, Kec. @foreach ($districts as $district) + {{ $district->name }} + @endforeach,@foreach ($cities as $city) + {{ ucwords(strtolower($city->name)) }} + @endforeach,@foreach ($provinces as $province) + {{ $province->name }} + @endforeach + @endforeach + + + LT / LB: ... / ... +
+ +
+ Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi. Mohon proposal + dapat saya terima segera, sebelum {{ formatTanggalIndonesia2($penawaran->end_date) }} +
+ +
+ Best Regards,
+ {{ $permohonan->user->name }} +

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

+
+ + +
+ + + diff --git a/routes/registrasi.php b/routes/registrasi.php index 5c36e38..4ec3178 100644 --- a/routes/registrasi.php +++ b/routes/registrasi.php @@ -1,21 +1,22 @@ group(function () { - + // andy add // Route::name('registrasi.')->prefix('registrasi')->group(function () { - Route::controller(RegistrasiController::class)->group(function(){ + Route::controller(RegistrasiController::class)->group(function () { // Route::get('/', [RegistrasiController::class, 'index'])->name('registrasi.index'); Route::get('/registrasi', 'index')->name('registrasi.index'); Route::get('/registrasi/datatables', 'dataForDatatables')->name('registrasi.datatables'); - + // show data Route::get('/registrasi/{registrasi}', 'show')->name('registrasi.show'); Route::post('registrasi/showData', 'setData')->name('registrasi.showData'); @@ -23,37 +24,35 @@ Route::middleware(['auth'])->group(function () { Route::post('registrasi/setData', 'setData')->name('registrasi.setData'); Route::get('/registrasi/{registrasi}/edit', 'edit')->name('registrasi.edit'); Route::put('/registrasi/{registrasi}', 'update')->name('registrasi.update'); - }); // andy add Route::name('tender.')->prefix('tender')->group(function () { - // Proses Penawaran - Route::controller(ProsesPenawaranController::class)->group(function(){ - + // Proses Penawaran + Route::controller(ProsesPenawaranController::class)->group(function () { + Route::get('prosespenawaran', 'index')->name('prosespenawaran.index'); Route::get('prosespenawaran/datatables', 'dataForDatatables')->name('prosespenawaran.datatables'); Route::get('prosespenawaran/datatableskjppList_1', 'dataForDatatablesKJPPList_1')->name('prosespenawaran.datatableskjppList_1'); - - // show data - Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show'); - Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData'); - - Route::get('prosespenawaran/{prosespenawaran}/edit', 'edit')->name('prosespenawaran.edit'); - // update one - Route::put('/prosespenawaran/{prosespenawaran}', 'update')->name('prosespenawaran.update'); - // update all - Route::put('/prosespenawaranAll/{prosespenawaranAll}', 'updateAll')->name('prosespenawaran.updateAll'); - // delete KJPP, status set = 0 - Route::put('/prosespenawaranKJPPStatus/{prosespenawaranKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaran.updateKJPPStatus'); - + // show data + Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show'); + Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData'); + + Route::get('prosespenawaran/{prosespenawaran}/edit', 'edit')->name('prosespenawaran.edit'); + + // update one + Route::put('/prosespenawaran/{prosespenawaran}', 'update')->name('prosespenawaran.update'); + // update all + Route::put('/prosespenawaranAll/{prosespenawaranAll}', 'updateAll')->name('prosespenawaran.updateAll'); + // delete KJPP, status set = 0 + Route::put('/prosespenawaranKJPPStatus/{prosespenawaranKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaran.updateKJPPStatus'); }); // Proses Penawaran Ulang - Route::controller(ProsesPenawaranUlangController::class)->group(function(){ + Route::controller(ProsesPenawaranUlangController::class)->group(function () { Route::get('prosespenawaranulang', 'index')->name('prosespenawaranulang.index'); Route::get('prosespenawaranulang/datatables', 'dataForDatatables')->name('prosespenawaranulang.datatables'); Route::get('prosespenawaranulang/{prosespenawaranulang}/edit', 'edit')->name('prosespenawaranulang.edit'); @@ -64,14 +63,13 @@ Route::middleware(['auth'])->group(function () { // update KJPP data, detail penawaran Route::put('/prosespenawaranulang/{prosespenawaranulang}', 'update')->name('prosespenawaranulang.update'); - // delete KJPP, status set = 0 + // delete KJPP, status set = 0 Route::put('/prosespenawaranulangKJPPStatus/{prosespenawaranulangKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaranulang.updateKJPPStatus'); - }); - }); - + }); + Route::name('otorisasitender.')->prefix('otorisasitender')->group(function () { - Route::controller(OtorisasiPenawaranController::class)->group(function(){ + Route::controller(OtorisasiPenawaranController::class)->group(function () { Route::get('penawaran', 'index')->name('penawaran.index'); Route::get('penawaran/datatables', 'dataForDatatables')->name('penawaran.datatables'); Route::get('penawaran/{penawaran}/edit', 'edit')->name('penawaran.edit'); @@ -82,23 +80,22 @@ Route::middleware(['auth'])->group(function () { // update KJPP data, detail penawaran Route::put('/otorisasiPenawaranKJPP/{penawaran}', 'otorisasiPenawaranKJPP')->name('penawaran.otorisasiPenawaranKJPP'); - }); }); - Route::controller(SpkController::class)->group(function(){ + Route::controller(SpkController::class)->group(function () { Route::get('/spk/dokumennya', 'dokumennya')->name('spk.dokumennya'); - + Route::get('/spk', 'index')->name('spk.index'); Route::get('/spk/datatables', 'dataForDatatables')->name('spk.datatables'); Route::get('/spk/{spk}', 'show')->name('spk.show'); Route::get('/spk/{spk}/edit', 'edit')->name('spk.edit'); - Route::put('/spk/{spk}', 'update')->name('spk.update'); - + Route::put('/spk/{spk}', 'update')->name('spk.update'); + Route::get('spk/{spk}/download', 'download')->name('spk.download'); }); - Route::controller(RegistrasiFinalController::class)->group(function(){ + Route::controller(RegistrasiFinalController::class)->group(function () { Route::get('/registrasifinal', 'index')->name('registrasifinal.index'); Route::get('/registrasifinal/datatables', 'dataForDatatables')->name('registrasifinal.datatables'); Route::get('/registrasifinal/{registrasifinal}', 'show')->name('registrasifinal.show'); @@ -109,4 +106,3 @@ Route::middleware(['auth'])->group(function () { Route::put('/registrasifinal/{registrasifinal}', 'update')->name('registrasifinal.update'); }); }); - diff --git a/routes/web.php b/routes/web.php index 97e53a4..1d55fc7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -392,6 +392,7 @@ Route::middleware(['auth'])->group(function () { Route::get('penawaran/{noreg}/suratTender', [TenderController::class, 'showSuratTender'])->name( 'penawaran.showSuratTender' ); + Route::get('penawaran/{noreg}/suratTender/downloadpdf', [TenderController::class, 'downloadSuratTender'])->name('penawaran.downloadSuratTender'); // Penawaran Ulang Route::get('penawaran/ulang', [TenderController::class, 'penawaran_ulang_index'])->name( From 65b92d8e4d575fb7f977f8f96bba5aa37b7438a2 Mon Sep 17 00:00:00 2001 From: rahmatrafli1 Date: Thu, 14 Nov 2024 10:52:13 +0700 Subject: [PATCH 02/11] membuat fitur download surat tender dalam bentuk pdf selesai --- app/Http/Controllers/TenderController.php | 14 +++---- resources/views/penawaran/edit.blade.php | 2 +- resources/views/penawaran/show.blade.php | 10 ++++- .../views/penawaran/surat_tender.blade.php | 37 ++++++++++++++++-- .../penawaran/surat_tender_download.blade.php | 38 +++++++++++++++++-- 5 files changed, 83 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index f57a513..f52ab80 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -254,7 +254,7 @@ class TenderController extends Controller DB::commit(); return redirect() - ->route('tender.penawaran.index') + ->route('tender.penawaran.ulang.index') ->with('success', 'Data Penawaran updated successfully'); } catch (Exception $e) { // Rollback jika ada kesalahan @@ -275,6 +275,12 @@ class TenderController extends Controller $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + // Kalau tidak ketemu nomor registrasi dengan tabel penawaran + if (!$penawaran) { + return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg]) + ->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!'); + } + if ($penawaran->status != 'tender') { return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); } @@ -297,12 +303,6 @@ class TenderController extends Controller $cities = City::where('code', $city_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get(); - // Kalau tidak ketemu nomor registrasi dengan tabel penawaran - if (!$penawaran) { - return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg]) - ->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!'); - } - date_default_timezone_set('Asia/Jakarta'); $now = date('Y-m-d H:i:s'); diff --git a/resources/views/penawaran/edit.blade.php b/resources/views/penawaran/edit.blade.php index a2d1c4e..9d5603a 100644 --- a/resources/views/penawaran/edit.blade.php +++ b/resources/views/penawaran/edit.blade.php @@ -19,7 +19,7 @@ Detail - + Back
diff --git a/resources/views/penawaran/show.blade.php b/resources/views/penawaran/show.blade.php index 1e7b935..f2f9938 100644 --- a/resources/views/penawaran/show.blade.php +++ b/resources/views/penawaran/show.blade.php @@ -20,8 +20,14 @@ Tambah Penawaran @endif - Back + @if ($penawaranExists) + Back + @endif + @if (!$penawaranExists) + Back + @endif
diff --git a/resources/views/penawaran/surat_tender.blade.php b/resources/views/penawaran/surat_tender.blade.php index 0046877..7db7b5c 100644 --- a/resources/views/penawaran/surat_tender.blade.php +++ b/resources/views/penawaran/surat_tender.blade.php @@ -64,7 +64,7 @@

Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ ucwords($permohonan->user->name) }}, tujuan penilaian + class="font-bold">{{ ucwords($permohonan->debiture->name) }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }} , laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, @@ -102,9 +102,38 @@ @endforeach -

  • LT / LB: +
  • Luas Tanah / Luas Bangunan: - ... / ... + @php + $luas_tanah = null; + $luas_bangunan = null; + @endphp + + @foreach ($permohonan->debiture->documents as $document) + @foreach ($document->detail as $detail) + @php + $details = json_decode($detail->details); + @endphp + + @if (is_object($details)) + @if (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 + @endif + @endif + @endforeach + @endforeach + + @if ($luas_tanah !== null && $luas_bangunan !== null) + {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 + @elseif ($luas_tanah !== null) + {{ $luas_tanah }} m2 + @elseif ($luas_bangunan !== null) + {{ $luas_bangunan }} m2 + @endif
  • @@ -124,7 +153,7 @@

    PT. Bank Artha Graha Internasional, Tbk.
    Gedung Bank Artha Graha, Lantai 3
    - Jl. Kwiitang Raya No 24-26, Jakarta Pusat - 10420.
    + Jl. Kwitang Raya No 24-26, Jakarta Pusat - 10420.
    Telp. 021 - 3903040 (H)

    diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php index af28ad7..ef6b219 100644 --- a/resources/views/penawaran/surat_tender_download.blade.php +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -96,7 +96,7 @@
    Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ ucwords($permohonan->user->name) }}, tujuan penilaian untuk {{ $permohonan->debiture->name }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut:
    @@ -118,7 +118,37 @@ @endforeach - LT / LB: ... / ... + Luas Tanah / Luas Bangunan: + @php + $luas_tanah = null; + $luas_bangunan = null; + @endphp + + @foreach ($permohonan->debiture->documents as $document) + @foreach ($document->detail as $detail) + @php + $details = json_decode($detail->details); + @endphp + + @if (is_object($details)) + @if (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 + @endif + @endif + @endforeach + @endforeach + + @if ($luas_tanah !== null && $luas_bangunan !== null) + {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 + @elseif ($luas_tanah !== null) + {{ $luas_tanah }} m2 + @elseif ($luas_bangunan !== null) + {{ $luas_bangunan }} m2 + @endif
    @@ -129,7 +159,7 @@
    Best Regards,
    - {{ $permohonan->user->name }}

    {{ $permohonan->user->name }} @@ -139,7 +169,7 @@

    From e11743f3feb18d32b28dda2c9618e210c57f7230 Mon Sep 17 00:00:00 2001 From: rahmatrafli1 Date: Thu, 14 Nov 2024 11:32:47 +0700 Subject: [PATCH 03/11] Menambahkan route yang hilang pada show proses penawaran, set data proses penawaran, edit proses penawaran --- routes/registrasi.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/routes/registrasi.php b/routes/registrasi.php index 49ba044..f07265c 100644 --- a/routes/registrasi.php +++ b/routes/registrasi.php @@ -36,6 +36,10 @@ Route::middleware(['auth'])->group(function () { Route::get('prosespenawaran', 'index')->name('prosespenawaran.index'); Route::get('prosespenawaran/datatables', 'dataForDatatables')->name('prosespenawaran.datatables'); Route::get('prosespenawaran/datatableskjppList_1', 'dataForDatatablesKJPPList_1')->name('prosespenawaran.datatableskjppList_1'); + Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show'); + Route::get('prosespenawaran/{prosespenawaran}/edit', 'edit')->name('prosespenawaran.edit'); + + Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData'); // update one Route::put('/prosespenawaran/{prosespenawaran}', 'update')->name('prosespenawaran.update'); From e11b01f0aabc5226b60c26947660ff6066106b09 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 14 Nov 2024 15:16:38 +0700 Subject: [PATCH 04/11] Perbarui roles pada module.json Tambahkan "EO Appraisal" dan "DD Appraisal" ke roles untuk otorisasi terkait. Hal ini memungkinkan user dengan roles tersebut untuk mengakses fitur-fitur yang sebelumnya hanya bisa diakses oleh "administrator" dan "admin". Menghapus whitespace yang tidak diperlukan untuk menjaga konsistensi. --- module.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module.json b/module.json index 406f42d..4f82cdf 100644 --- a/module.json +++ b/module.json @@ -59,7 +59,7 @@ "attributes": [], "permission": "", "roles": ["administrator", "admin"] - } + } ] }, { @@ -69,7 +69,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["administrator", "admin"], + "roles": ["administrator", "admin","EO Appraisal","DD Appraisal"], "sub": [ { "title": "Otorisasi Penawaran", @@ -77,7 +77,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["administrator", "admin"] + "roles": ["administrator", "admin","EO Appraisal","DD Appraisal"] } ] }, From e239381dfe2e5cad3336a6b4360d83339d0cf9a4 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 14 Nov 2024 15:33:29 +0700 Subject: [PATCH 05/11] Perbaiki pengecekan unggah file revisi Tambahkan kondisi pengecekan apakah tombol "revisi" ditekan saat memvalidasi pengunggahan file revisi. Ini memastikan pesan kesalahan muncul hanya jika pengguna mencoba mengirimkan tanpa mengunggah file revisi ketika tombol "revisi" ditekan. --- resources/views/permohonan/authorization/show.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/permohonan/authorization/show.blade.php b/resources/views/permohonan/authorization/show.blade.php index c5d1d56..bd40825 100644 --- a/resources/views/permohonan/authorization/show.blade.php +++ b/resources/views/permohonan/authorization/show.blade.php @@ -65,7 +65,7 @@ keteranganMessage.textContent = ''; } - if (!revisionFile.files.length) { + if (event.submitter === revisiBtn && !revisionFile.files.length) { event.preventDefault(); fileMessage.textContent = 'File revisi harus diunggah.'; fileMessage.classList.remove('hidden'); From 6f5c886f74533eaabc66b1373869275f46df4b66 Mon Sep 17 00:00:00 2001 From: rahmatrafli1 Date: Thu, 14 Nov 2024 15:46:32 +0700 Subject: [PATCH 06/11] Memperbaiki kontroller tender untuk memeriksa apakah nomor registrasi itu ada di tabel penawaran kalau tidak maka kembali ke halaman create --- app/Http/Controllers/TenderController.php | 8 +++++++- resources/views/penawaran/index.blade.php | 3 --- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index f52ab80..8f2c7d2 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -127,6 +127,10 @@ class TenderController extends Controller $penawaran1 = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + if (!$penawaran1) { + return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!'); + } + if ($penawaran1->status != 'tender') { return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); } @@ -155,12 +159,14 @@ class TenderController extends Controller { // Find the specific penawaran by its ID $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); - $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); if (!$penawaran) { return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!'); } + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran->status != 'tender') { return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); } diff --git a/resources/views/penawaran/index.blade.php b/resources/views/penawaran/index.blade.php index 405332a..a8f1d64 100644 --- a/resources/views/penawaran/index.blade.php +++ b/resources/views/penawaran/index.blade.php @@ -134,9 +134,6 @@ } else { // Jika tidak ada, tampilkan tombol "Tambah Penawaran" actionDiv.innerHTML = ` - - - From 318ccb6f7983dba16ca6e8a53543921f3b580c38 Mon Sep 17 00:00:00 2001 From: rahmatrafli1 Date: Thu, 14 Nov 2024 15:49:07 +0700 Subject: [PATCH 07/11] menghapus tombol detail pada tambah penawaran tender --- resources/views/penawaran/create.blade.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/views/penawaran/create.blade.php b/resources/views/penawaran/create.blade.php index d8b2b5c..225c174 100644 --- a/resources/views/penawaran/create.blade.php +++ b/resources/views/penawaran/create.blade.php @@ -15,8 +15,6 @@ Tambah Data Penawaran
    - Detail Back From 60a0d5468bfb09584a7f63d0e5047152b895c09c Mon Sep 17 00:00:00 2001 From: rahmatrafli1 Date: Thu, 14 Nov 2024 15:52:58 +0700 Subject: [PATCH 08/11] memperbaiki style pada download pdf surat tender --- resources/views/penawaran/surat_tender_download.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php index ef6b219..0f058bc 100644 --- a/resources/views/penawaran/surat_tender_download.blade.php +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -152,8 +152,8 @@
    - Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi. Mohon proposal - dapat saya terima segera, sebelum + Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia2($penawaran->end_date) }}
    From 38a8fb2d7d65cec483904abe32cad3bb7266485b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 15 Nov 2024 13:48:49 +0700 Subject: [PATCH 09/11] 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 @@ + Date: Fri, 15 Nov 2024 15:16:59 +0700 Subject: [PATCH 10/11] memperbaiki show permohonan yang typo --- resources/views/permohonan/show.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/permohonan/show.blade.php b/resources/views/permohonan/show.blade.php index 3ccb967..69b2018 100644 --- a/resources/views/permohonan/show.blade.php +++ b/resources/views/permohonan/show.blade.php @@ -6,7 +6,7 @@ @section('content')
    - @include('lpj::component.detail-jaminan',['backLink' => 'prmohonan.index']) + @include('lpj::component.detail-jaminan', ['backLink' => 'permohonan.index'])
    From 9af9c343d1d962123c395051735ee2cb7d2a5421 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 18 Nov 2024 14:17:19 +0700 Subject: [PATCH 11/11] Perbaiki pengelolaan dokumen pada History Permohonan Mengganti field 'attachment' menjadi 'dokumen' pada model Permohonan dan mengupdate referensi terkait di view dan service. Juga menambahkan dukungan multipart/form-data pada form. Perubahan ini memperbaiki manajemen file yang diunggah dan memastikan integritas data terlindungi saat memperbarui permohonan. --- app/Models/Permohonan.php | 11 +++-------- app/Services/PermohonanHistoryService.php | 9 +-------- .../views/permohonan/authorization/show.blade.php | 4 ++-- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index 60c9303..a3b35c1 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -2,6 +2,7 @@ namespace Modules\Lpj\Models; +use Illuminate\Support\Facades\Storage; use Modules\Lpj\Database\Factories\PermohonanFactory; use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Usermanagement\Models\User; @@ -39,7 +40,6 @@ class Permohonan extends Base 'registrasi_at', 'jenis_penilaian_id', 'region_id', - 'attachment' ]; protected static function boot() @@ -70,12 +70,7 @@ class Permohonan extends Base $fileName = time() . '_' . $file->getClientOriginalName(); $filePath = $file->storeAs('permohonan_attachments', $fileName, 'public'); - // Delete old file if it exists - if ($permohonan->attachment) { - Storage::disk('public')->delete($permohonan->attachment); - } - - $permohonan->attachment = $filePath; + $permohonan->dokumen = $filePath; } } @@ -87,7 +82,7 @@ class Permohonan extends Base $keterangan = request()->input('keterangan'); // Get keterangan from request $beforeRequest = $action === 'updated' ? $permohonan->getOriginal() : []; $afterRequest = $permohonan->toArray(); - $file = $permohonan->attachment ? Storage::disk('public')->path($permohonan->attachment) : null; + $file = $permohonan->dokumen ? Storage::disk('public')->path($permohonan->dokumen) : null; $historyService->createHistory( $permohonan, diff --git a/app/Services/PermohonanHistoryService.php b/app/Services/PermohonanHistoryService.php index 783d41b..3b9e60c 100644 --- a/app/Services/PermohonanHistoryService.php +++ b/app/Services/PermohonanHistoryService.php @@ -7,15 +7,8 @@ use Modules\Lpj\Models\PermohonanHistory; class PermohonanHistoryService { - public function createHistory(Permohonan $permohonan, string $status, ?string $keterangan, array $beforeRequest, array $afterRequest, ?string $file = null) + public function createHistory(Permohonan $permohonan, string $status, ?string $keterangan, array $beforeRequest, array $afterRequest, ?string $filePath = null) { - - $filePath = null; - if ($file) { - $filePath = $file->store('permohonan_history_files', 'public'); - } - - try { $history = PermohonanHistory::create([ 'permohonan_id' => $permohonan->id, diff --git a/resources/views/permohonan/authorization/show.blade.php b/resources/views/permohonan/authorization/show.blade.php index bd40825..193999a 100644 --- a/resources/views/permohonan/authorization/show.blade.php +++ b/resources/views/permohonan/authorization/show.blade.php @@ -9,7 +9,7 @@ @include('lpj::component.detail-jaminan',['backLink' => 'authorization.index'])
    - + @csrf
    @@ -27,7 +27,7 @@ Upload File Revisi
    - +