diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index e302c08..d98f7e9 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -5,8 +5,6 @@ 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; @@ -36,8 +34,14 @@ class TenderController extends Controller */ public function penawaran_create($noreg) { - $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $penawaranExists = PenawaranTender::where('nomor_registrasi', '=', $noreg)->exists(); + // Jika nomor_registrasi sudah ada, kembalikan respon 403 Forbidden + if ($penawaranExists) { + abort(403, 'Penawaran dengan nomor registrasi ini sudah ada.'); + } + + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); @@ -45,7 +49,7 @@ class TenderController extends Controller $kjpp = KJPP::all(); - return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg')); + return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'noreg', 'permohonan')); } /** @@ -58,12 +62,19 @@ class TenderController extends Controller DB::beginTransaction(); try { - $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); - $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; + // Add created_by/updated_by from the authenticated user + $userId = auth()->user()->id; - $validated['status'] = $request->input('status') ?? 'Tender'; + $validated['nomor_registrasi'] = $permohonan->nomor_registrasi; + $validated['status'] = $request->input('status') ?? 'tender'; + $validated['updated_by'] = $userId; // Updating the record + $permohonan->update($validated); + + // Adding created_by for the new PenawaranTender record + $validated['created_by'] = $userId; $penawaranId = PenawaranTender::create($validated); $kjpps = $request->input('kjpp', []); @@ -71,7 +82,9 @@ class TenderController extends Controller foreach ($kjpps as $kjpp) { PenawaranDetailTender::create([ 'penawaran_id' => $penawaranId->id, - 'kjpp_rekanan_id' => $kjpp + 'kjpp_rekanan_id' => $kjpp, + 'created_by' => $userId, // Set created_by for details + 'updated_by' => $userId ]); } @@ -100,6 +113,8 @@ class TenderController extends Controller $tujuan_penilaian_kjpp = null; $jenis_laporan = null; + $penawaranExists = PenawaranTender::where('nomor_registrasi', $noreg)->exists(); + $penawaran1 = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); // dd($penawaran1->id); if ($penawaran1) { @@ -115,7 +130,7 @@ class TenderController extends Controller // dd($kjpps); - return view('lpj::penawaran.show', compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan')); + return view('lpj::penawaran.show', compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'penawaranExists')); } /** @@ -125,6 +140,7 @@ 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(); $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); @@ -135,7 +151,7 @@ class TenderController extends Controller $kjpp = KJPP::all(); - return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg', 'kjpps')); + return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg', 'kjpps', 'permohonan')); } @@ -151,9 +167,20 @@ class TenderController extends Controller try { // Ambil data penawaran berdasarkan nomor registrasi $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + + // Ambil ID user yang sedang login + $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' + + // Update data penawaran dan permohonan $penawaran->update($validated); + $permohonan->update($validated); $kjpps = $request->input('kjpp', []); @@ -162,6 +189,8 @@ class TenderController extends Controller if (!in_array($kjpp->kjpp_rekanan_id, $kjpps)) { // Ubah status KJPP lama menjadi 0 $kjpp->status = 0; + $kjpp->created_by = $userId; + $kjpp->updated_by = $userId; // Set updated_by $kjpp->save(); } } @@ -172,10 +201,14 @@ class TenderController extends Controller ->where('kjpp_rekanan_id', $kjpp) ->first(); + // dd($existingDetail); + if ($existingDetail) { // Jika KJPP sudah ada, pastikan statusnya aktif (1) if ($existingDetail->status == 0) { $existingDetail->status = 1; + $existingDetail->created_by = $userId; + $existingDetail->updated_by = $userId; // Set updated_by $existingDetail->save(); } } else { @@ -184,6 +217,8 @@ class TenderController extends Controller 'penawaran_id' => $penawaran->id, 'kjpp_rekanan_id' => $kjpp, 'status' => 1, // Default status untuk KJPP baru adalah 1 + 'created_by' => $userId, // Set created_by untuk data baru + 'updated_by' => $userId, // Set updated_by juga ]); } } @@ -207,6 +242,7 @@ class TenderController extends Controller + /** * Remove the specified resource from storage. */ diff --git a/app/Http/Requests/TenderPenawaranRequest.php b/app/Http/Requests/TenderPenawaranRequest.php index f05313f..6472638 100644 --- a/app/Http/Requests/TenderPenawaranRequest.php +++ b/app/Http/Requests/TenderPenawaranRequest.php @@ -61,16 +61,25 @@ class TenderPenawaranRequest extends FormRequest $validator->after(function ($validator) { $startDate = strtotime($this->input('start_date')); $endDate = strtotime($this->input('end_date')); + $today = strtotime(date('Y-m-d')); if ($endDate < $startDate) { $validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.'); } + if ($startDate < $today) { + $validator->errors()->add('start_date', 'Tanggal Awal tidak boleh sebelum hari ini.'); + } + // Validasi minimal 3 pilihan pada nama_kjpp $namaKjpp = $this->input('kjpp', []); + // jika nama KJPP itu kosong + if (empty($namaKjpp)) { + $validator->errors()->add('kjpp', 'Nama KJPP wajib diisi.'); + } // jika terisi kurang dari 3 item - if (is_array($namaKjpp) && count($namaKjpp) < 3) { + elseif (is_array($namaKjpp) && count($namaKjpp) < 3) { $validator->errors()->add('kjpp', 'Nama KJPP Sebelumnya harus memiliki minimal 3 pilihan jika diisi.'); } }); diff --git a/database/migrations/2024_10_08_075401_update_penawaran_table.php b/database/migrations/2024_10_08_075401_update_penawaran_table.php new file mode 100644 index 0000000..34e6978 --- /dev/null +++ b/database/migrations/2024_10_08_075401_update_penawaran_table.php @@ -0,0 +1,30 @@ +unsignedBigInteger('created_by')->nullable()->after('created_at'); + $table->unsignedBigInteger('updated_by')->nullable()->after('updated_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penawaran', function (Blueprint $table) { + $table->dropColumn('created_by'); + $table->dropColumn('updated_by'); + }); + } +}; diff --git a/database/migrations/2024_10_08_075434_update_detail_penawaran_table.php b/database/migrations/2024_10_08_075434_update_detail_penawaran_table.php new file mode 100644 index 0000000..f4ce896 --- /dev/null +++ b/database/migrations/2024_10_08_075434_update_detail_penawaran_table.php @@ -0,0 +1,30 @@ +unsignedBigInteger('created_by')->nullable()->after('created_at'); + $table->unsignedBigInteger('updated_by')->nullable()->after('updated_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('detail_penawaran', function (Blueprint $table) { + $table->dropColumn('created_by'); + $table->dropColumn('updated_by'); + }); + } +}; diff --git a/resources/views/penawaran/create.blade.php b/resources/views/penawaran/create.blade.php index 8f3161b..bc023e5 100644 --- a/resources/views/penawaran/create.blade.php +++ b/resources/views/penawaran/create.blade.php @@ -29,7 +29,7 @@