exists(); // Jika nomor_registrasi sudah ada, kembalikan respon 403 Forbidden if ($penawaranExists) { return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg]) ->with('error', 'Penawaran dengan nomor registrasi ini sudah ada, Anda akan diarahkan ke halaman edit.'); } $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); $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', 'noreg', 'permohonan')); } /** * Store a newly created resource in storage. */ public function penawaran_store(TenderPenawaranRequest $request, $noreg) { $validated = $request->validated(); DB::beginTransaction(); try { $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); // Add created_by/updated_by from the authenticated user $userId = auth()->user()->id; $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', []); foreach ($kjpps as $kjpp) { PenawaranDetailTender::create([ 'penawaran_id' => $penawaranId->id, 'kjpp_rekanan_id' => $kjpp, 'created_by' => $userId, // Set created_by for details 'updated_by' => $userId ]); } // 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', $noreg) ->with('error', 'Validation failed: ' . $e); } } /** * Show the specified resource. */ public function penawaran_show($noreg) { $penawaran = null; $kjpps = null; $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) { $penawaran = $penawaran1; $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran1->id)->where('status', '=', 1)->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(); } else { $penawaran2 = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); $penawaran = $penawaran2; } // dd($kjpps); return view('lpj::penawaran.show', compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'penawaranExists')); } /** * Show the form for editing the specified resource. */ public function penawaran_edit($noreg) { // 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(); $jenis_laporan = JenisLaporan::all(); $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)->where('status', '=', 1)->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', 'noreg', 'kjpps', 'permohonan')); } /** * Update the specified resource in storage. */ public function penawaran_update(TenderPenawaranRequest $request, $noreg) { $validated = $request->validated(); DB::beginTransaction(); 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', []); // Ubah status KJPP lama menjadi 0 jika tidak ada dalam request foreach ($penawaran->penawaranKjpp as $kjpp) { 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(); } } // Tangani penambahan atau perubahan KJPP baru foreach ($kjpps as $kjpp) { $existingDetail = PenawaranDetailTender::where('penawaran_id', $penawaran->id) ->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 { // Buat data baru jika tidak ada dalam database PenawaranDetailTender::create([ '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 ]); } } // Commit transaksi DB::commit(); return redirect() ->route('tender.penawaran.index') ->with('success', 'Data Penawaran updated successfully'); } catch (Exception $e) { // Rollback jika ada kesalahan DB::rollBack(); return redirect() ->route('tender.penawaran.createPenawaran', $noreg) ->with('error', 'Validation failed: ' . $e->getMessage()); } } /** * Remove the specified resource from storage. */ public function destroy($id) { // } public function datatablesPenawaran(Request $request) { if (is_null($this->user) || !$this->user->can('penawaran.view')) { //abort(403, 'Sorry! You are not allowed to view users.'); } // Retrieve data from the database $query = Permohonan::query()->where('status', '=', 'registered')->where('jenis_penilaian_id', '=', 2); // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } // Apply sorting if provided if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); $query->orderBy($column, $order); } // Get the total count of records $totalRecords = $query->count(); // Apply pagination if provided if ($request->has('page') && $request->has('size')) { $page = $request->get('page'); $size = $request->get('size'); $offset = ($page - 1) * $size; // Calculate the offset $query->skip($offset)->take($size); } // Get the filtered count of records $filteredRecords = $query->count(); // Get the data for the current page $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); // Calculate the current page number $currentPage = 0 + 1; // Return the response data as a JSON object return response()->json([ 'draw' => $request->get('draw'), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'pageCount' => $pageCount, 'page' => $currentPage, 'totalCount' => $totalRecords, 'data' => $data, ]); } public function exportPenawaran() { return Excel::download(new PenawaranTenderExport, 'penawarantender.xlsx'); } // penawaran ulang public function penawaran_ulang_index() { return view('lpj::penawaran_ulang/index'); } public function datatablesPenawaranUlang(Request $request) { if (is_null($this->user) || !$this->user->can('penawaran_ulang.view')) { //abort(403, 'Sorry! You are not allowed to view users.'); } // Retrieve data from the database $query = Permohonan::query()->where('status', '=', 'tender')->where('jenis_penilaian_id', '=', 2); // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } // Apply sorting if provided if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); $query->orderBy($column, $order); } // Get the total count of records $totalRecords = $query->count(); // Apply pagination if provided if ($request->has('page') && $request->has('size')) { $page = $request->get('page'); $size = $request->get('size'); $offset = ($page - 1) * $size; // Calculate the offset $query->skip($offset)->take($size); } // Get the filtered count of records $filteredRecords = $query->count(); // Get the data for the current page $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); // Calculate the current page number $currentPage = 0 + 1; // Return the response data as a JSON object return response()->json([ 'draw' => $request->get('draw'), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'pageCount' => $pageCount, 'page' => $currentPage, 'totalCount' => $totalRecords, 'data' => $data, ]); } public function proses_penawaran_index() { return view('lpj::proses_penawaran/index'); } // Tambahkan method untuk API di controller public function checkPenawaranExistence($nomor_registrasi) { // Cek apakah nomor_registrasi ada dalam tabel penawaran $exists = PenawaranTender::where('nomor_registrasi', $nomor_registrasi)->exists(); // Kembalikan hasil pengecekan sebagai JSON return response()->json(['exists' => $exists]); } }