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 $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 $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(); 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; $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(); 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(); $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(); // dd($penawaran); 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' $validated['end_date'] = $request->input('end_date') . ' 17:00:00'; // dd($validated['end_date']); // 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()); } } /** * Tampilkan Surat Tender */ 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 < $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', 'permohonan', 'villages', 'districts', 'cities', 'provinces')); } 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, ]); } // 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]); } 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'); } }