diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 4fca97d..7de57f0 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -2,19 +2,22 @@ namespace Modules\Lpj\Http\Controllers; +use Exception; use Illuminate\Http\Request; +use Modules\Lpj\Models\KJPP; use Illuminate\Http\Response; use Modules\Lpj\Models\Penawaran; +use Illuminate\Support\Facades\DB; +use Modules\Lpj\Models\Permohonan; use App\Http\Controllers\Controller; use Maatwebsite\Excel\Facades\Excel; -use Modules\Lpj\Models\PenawaranTender; -use Modules\Lpj\Exports\PenawaranTenderExport; -use Modules\Lpj\Http\Requests\TenderPenawaranRequest; use Modules\Lpj\Models\JenisLaporan; -use Modules\Lpj\Models\KJPP; -use Modules\Lpj\Models\Permohonan; +use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\TujuanPenilaianKJPP; +use Modules\Lpj\Models\PenawaranDetailTender; +use Modules\Lpj\Exports\PenawaranTenderExport; +use Modules\Lpj\Http\Requests\TenderPenawaranRequest; class TenderController extends Controller { @@ -38,6 +41,7 @@ class TenderController extends Controller $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); $jenis_laporan = JenisLaporan::all(); + $kjpp = KJPP::all(); return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'id')); @@ -50,27 +54,38 @@ class TenderController extends Controller { $validated = $request->validated(); - if ($validated) { + DB::beginTransaction(); + + try { $penawaran = PenawaranTender::find($id); $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; - // Mengatasi null untuk nama_kjpp_sebelumnya, biaya_kjpp_sebelumnya, dan tanggal_penilaian_sebelumnya - $validated['nama_kjpp_sebelumnya'] = json_encode($request->input('nama_kjpp_sebelumnya') ?? []); - $validated['biaya_kjpp_sebelumnya'] = $request->input('biaya_kjpp_sebelumnya') ?? ''; - $validated['tanggal_penilaian_sebelumnya'] = $request->input('tanggal_penilaian_sebelumnya') ?? ''; + $validated['status'] = $request->input('status') ?? 'Tender'; - // dd($validated); + $penawaranId = PenawaranTender::create($validated); - PenawaranTender::create($validated); + $kjpps = $request->input('kjpp', []); + + foreach ($kjpps as $kjpp) { + PenawaranDetailTender::create([ + 'penawaran_id' => $penawaranId->id, + 'kjpp_rekanan_id' => $kjpp + ]); + } + + // Commit the transaction + DB::commit(); return redirect() ->route('tender.penawaran.index') ->with('success', 'Data Penawaran created successfully'); - } else { + } catch (Exception $e) { + DB::rollBack(); + return redirect() ->route('tender.penawaran.createPenawaran', $id) - ->with('error', 'Validation failed'); + ->with('error', 'Validation failed: ' . $e); } } @@ -80,27 +95,86 @@ class TenderController extends Controller public function penawaran_show($id) { $penawaran = PenawaranTender::find($id); - $kjpps = KJPP::find($id); + $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray(); + $kjpps = KJPP::whereIn('id', $detail_penawaran)->get(); + $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::where('id', $penawaran->tujuan_penilaian_kjpp_id)->get(); + $jenis_laporan = JenisLaporan::where('id', $penawaran->jenis_laporan_id)->get(); - return view('lpj::penawaran.show', compact('id', 'penawaran', 'kjpps')); + // dd($kjpps); + + return view('lpj::penawaran.show', compact('id', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan')); } /** * Show the form for editing the specified resource. */ - public function edit($id) + public function penawaran_edit($id) { - return view('lpj::edit'); + // Find the specific penawaran by its ID + $penawaran = PenawaranTender::find($id); + + $status = StatusPermohonan::all(); + $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); + $jenis_laporan = JenisLaporan::all(); + + $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray(); + $kjpps = KJPP::whereIn('id', $detail_penawaran)->pluck('id')->toArray(); + + $kjpp = KJPP::all(); + + return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'id', 'kjpps')); } + /** * Update the specified resource in storage. */ - public function update(Request $request, $id) + public function penawaran_update(TenderPenawaranRequest $request, $id) { - // + $validated = $request->validated(); + + // dd($validated); + + DB::beginTransaction(); + + try { + $penawaran = PenawaranTender::find($id); + + $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; + + $validated['status'] = $request->input('status') ?? 'Tender'; + + $penawaran->update($validated); + + $kjpps = $request->input('kjpp', []); + + foreach ($penawaran->penawaranKjpp as $kjpp) { + $kjpp->delete(); // Assuming penawaranKjpp is a relationship on the PenawaranTender model + } + + foreach ($kjpps as $kjpp) { + PenawaranDetailTender::create([ + 'penawaran_id' => $penawaran->id, + 'kjpp_rekanan_id' => $kjpp + ]); + } + + // Commit the transaction + DB::commit(); + + return redirect() + ->route('tender.penawaran.index') + ->with('success', 'Data Penawaran created successfully'); + } catch (Exception $e) { + DB::rollBack(); + + return redirect() + ->route('tender.penawaran.createPenawaran', $id) + ->with('error', 'Validation failed: ' . $e); + } } + /** * Remove the specified resource from storage. */ diff --git a/app/Http/Requests/TenderPenawaranRequest.php b/app/Http/Requests/TenderPenawaranRequest.php index 63e0b8b..3ea1309 100644 --- a/app/Http/Requests/TenderPenawaranRequest.php +++ b/app/Http/Requests/TenderPenawaranRequest.php @@ -12,17 +12,17 @@ class TenderPenawaranRequest extends FormRequest public function rules(): array { $rules = [ - 'nama_kjpp_sebelumnya' => 'nullable|array', - 'nama_kjpp_sebelumnya.*' => 'exists:kjpp,name', + 'nama_kjpp_sebelumnya' => 'nullable', 'biaya_kjpp_sebelumnya' => 'nullable|numeric', 'tanggal_penilaian_sebelumnya' => 'nullable', 'nomor_registrasi' => 'required', + 'kjpp.*' => 'exists:kjpp,id', 'tujuan_penilaian_kjpp_id' => 'required', 'jenis_laporan_id' => 'required', 'start_date' => 'required', 'end_date' => 'required', 'catatan' => 'nullable', - 'status' => 'required' + 'status' => 'nullable' ]; if ($this->method() == 'PUT') { @@ -53,7 +53,6 @@ class TenderPenawaranRequest extends FormRequest 'jenis_laporan_id.required' => 'Jenis Laporan Wajib diisi!', 'start_date.required' => 'Tanggal Awal Wajib diisi!', 'end_date.required' => 'Tanggal Akhir Wajib diisi!', - 'status.required' => 'Status Wajib diisi!' ]; } @@ -67,12 +66,12 @@ class TenderPenawaranRequest extends FormRequest $validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.'); } - // Validasi minimal 3 pilihan pada nama_kjpp_sebelumnya - $namaKjppSebelumnya = $this->input('nama_kjpp_sebelumnya', []); + // Validasi minimal 3 pilihan pada nama_kjpp + $namaKjpp = $this->input('kjpp', []); - // Abaikan jika array kosong, tetapi validasi jika terisi kurang dari 3 item - if (!empty($namaKjppSebelumnya) && is_array($namaKjppSebelumnya) && count($namaKjppSebelumnya) < 3) { - $validator->errors()->add('nama_kjpp_sebelumnya', 'Nama KJPP Sebelumnya harus memiliki minimal 3 pilihan jika diisi.'); + // jika terisi kurang dari 3 item + if (is_array($namaKjpp) && count($namaKjpp) < 3) { + $validator->errors()->add('kjpp', 'Nama KJPP Sebelumnya harus memiliki minimal 3 pilihan jika diisi.'); } }); } diff --git a/app/Models/PenawaranDetailTender.php b/app/Models/PenawaranDetailTender.php new file mode 100644 index 0000000..85b2532 --- /dev/null +++ b/app/Models/PenawaranDetailTender.php @@ -0,0 +1,19 @@ +hasMany(PenawaranDetailTender::class, 'penawaran_id'); + } } diff --git a/database/migrations/2024_10_04_072406_update_penawaran_table.php b/database/migrations/2024_10_04_072406_update_penawaran_table.php new file mode 100644 index 0000000..543406b --- /dev/null +++ b/database/migrations/2024_10_04_072406_update_penawaran_table.php @@ -0,0 +1,28 @@ +string('status')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penawaran', function (Blueprint $table) { + $table->string('status')->change(); + }); + } +}; diff --git a/database/migrations/2024_10_04_080210_update_detail_penawaran_table.php b/database/migrations/2024_10_04_080210_update_detail_penawaran_table.php new file mode 100644 index 0000000..25e6d73 --- /dev/null +++ b/database/migrations/2024_10_04_080210_update_detail_penawaran_table.php @@ -0,0 +1,32 @@ +string('biaya_penawaran')->nullable()->change(); + $table->string('attachment')->nullable()->change(); + $table->string('dokumen_persetujuan')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('detail_penawaran', function (Blueprint $table) { + $table->string('biaya_penawaran')->change(); + $table->string('attachment')->change(); + $table->string('dokumen_persetujuan')->change(); + }); + } +}; diff --git a/resources/views/penawaran/create.blade.php b/resources/views/penawaran/create.blade.php index 7f41fd6..7891851 100644 --- a/resources/views/penawaran/create.blade.php +++ b/resources/views/penawaran/create.blade.php @@ -28,11 +28,34 @@ Nomor Registrasi
- - @error('nomor_registrasi') - {{ $message }} - @enderror + +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+
@@ -49,44 +72,22 @@
- + @foreach ($kjpp as $row) - + @if (isset($kjpp)) + + @endif @endforeach - @error('nama_kjpp_sebelumnya') - {{ $message }} - @enderror -
-
-
- -
- - @error('biaya_kjpp_sebelumnya') - {{ $message }} - @enderror -
- -
- - @error('tanggal_penilaian_sebelumnya') + @error('kjpp') {{ $message }} @enderror
@@ -113,6 +114,39 @@ {{ $message }} @enderror
+ +
+ +
+ + @error('start_date') + {{ $message }} + @enderror +
+ - +
+ + @error('end_date') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('catatan') + {{ $message }} + @enderror +
+
+
@@ -137,39 +171,8 @@
-
- - @error('start_date') - {{ $message }} - @enderror -
- -
- - @error('end_date') - {{ $message }} - @enderror -
-
-
- -
- - @error('catatan') - {{ $message }} - @enderror -
-
-
-
+
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + + @error('kjpp') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('tujuan_penilaian_kjpp_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('start_date') + {{ $message }} + @enderror +
+ - +
+ + @error('end_date') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('catatan') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('jenis_laporan_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('status') + {{ $message }} + @enderror +
+
+ +
+ +
+ + + + +@endsection + +@push('styles') + +@endpush diff --git a/resources/views/penawaran/index.blade.php b/resources/views/penawaran/index.blade.php index 31b95cc..946ce70 100644 --- a/resources/views/penawaran/index.blade.php +++ b/resources/views/penawaran/index.blade.php @@ -115,14 +115,12 @@ nama_kjpp_sebelumnya: { title: 'Nama KJPP Sebelumnya', render: (item, data) => { - let nama = data.nama_kjpp_sebelumnya; - if (typeof nama === 'string') { - nama = JSON.parse(nama); + const nama = data.nama_kjpp_sebelumnya; + if (nama === null || nama === '') { + return 'Tidak Ada' + } else { + return nama; } - if (nama.length === 0) { - return `Tidak Ada`; - } - return nama.map(n => `${n}`).join(' '); } }, tanggal_penilaian_sebelumnya: { diff --git a/resources/views/penawaran/show.blade.php b/resources/views/penawaran/show.blade.php index df95605..9716e4f 100644 --- a/resources/views/penawaran/show.blade.php +++ b/resources/views/penawaran/show.blade.php @@ -1,3 +1,35 @@ +@php + function formatTanggalIndonesia($date) + { + $carbonDate = \Carbon\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 formatRupiah($number) + { + // Convert to float if the input is a string + $number = (float) $number; + + return 'Rp ' . number_format($number, 2, ',', '.'); + } +@endphp + + @extends('layouts.main') @section('breadcrumbs') @@ -12,6 +44,8 @@ Detail Penawaran
+ Penawaran Ulang Penawaran

- {{ $penawaran->nomor_registrasi }} + {{ $penawaran->nomor_registrasi ?? '' }}

- {{ $penawaran->code }} + {{ $penawaran->code ?? '' }}

@@ -42,19 +76,9 @@ Nama KJPP Sebelumnya
- @if (isset($penawaran->nama_kjpp_sebelumnya) && !empty(json_decode($penawaran->nama_kjpp_sebelumnya, true))) -
- @foreach (json_decode($penawaran->nama_kjpp_sebelumnya, true) as $penawaran_code) - @php - $kjpp = $kjpps->firstWhere('name', $penawaran_code); - @endphp - @if ($kjpp) -
- {{ $kjpp->name }} -
- @endif - @endforeach + @if (isset($penawaran->nama_kjpp_sebelumnya) && !empty($penawaran->nama_kjpp_sebelumnya)) +
+ {{ $penawaran->nama_kjpp_sebelumnya }}
@else
@@ -66,15 +90,6 @@ Biaya KJPP Sebelumnya

- @php - function formatRupiah($number) - { - // Convert to float if the input is a string - $number = (float) $number; - - return 'Rp ' . number_format($number, 2, ',', '.'); - } - @endphp @if (isset($penawaran->biaya_kjpp_sebelumnya)) {{ formatRupiah($penawaran->biaya_kjpp_sebelumnya) }} @else @@ -82,7 +97,100 @@ @endif

+
+ + @if (isset($penawaran->tanggal_penilaian_sebelumnya) && !empty($penawaran->tanggal_penilaian_sebelumnya)) +

+ {{ formatTanggalIndonesia($penawaran->tanggal_penilaian_sebelumnya) }} +

+ @else +

+ Tidak Ada +

+ @endif +
+
+ +

+ @if (isset($tujuan_penilaian_kjpp)) + @foreach ($tujuan_penilaian_kjpp as $tpk) + {{ $tpk->name }} + @endforeach + @else + Tidak Ada + @endif +

+ +

+ @if (isset($jenis_laporan)) + @foreach ($jenis_laporan as $jl) + {{ $jl->name }} + @endforeach + @else + Tidak Ada + @endif +

+
+
+ +

+ {{ formatTanggalIndonesia($penawaran->start_date) }} - + {{ formatTanggalIndonesia($penawaran->end_date) }} +

+
+
+ + @if (isset($penawaran->catatan)) +

+ {{ $penawaran->catatan }} +

+ @else +

+ Tidak Ada +

+ @endif +
+
+ +
+ @if (isset($kjpps) && !empty(json_decode($kjpps, true))) + @foreach ($kjpps as $kjpp) + @if (isset($kjpp)) +
+ {{ $kjpp->name }}
+ @endif + @endforeach + @else +
Tidak Ada
+ @endif +
+
+
+ + @if (isset($penawaran->status)) +

+ {{ $penawaran->status }} +

+ @else +

+ Tidak Ada +

+ @endif +
-
- -@endsection + @endsection diff --git a/routes/web.php b/routes/web.php index 258152b..6072efc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -417,7 +417,10 @@ Route::middleware(['auth'])->group(function () { Route::post('penawaran/{id}/store', [TenderController::class, 'penawaran_store'])->name( 'penawaran.storePenawaran', ); - Route::post('penawaran/{id}/update', [TenderController::class, 'penawaran_store'])->name( + Route::get('penawaran/{id}/edit', [TenderController::class, 'penawaran_edit'])->name( + 'penawaran.editPenawaran', + ); + Route::put('penawaran/{id}/update', [TenderController::class, 'penawaran_update'])->name( 'penawaran.updatePenawaran', ); Route::get('penawaran/exportPenawaran', [TenderController::class, 'exportPenawaran'])->name(