diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 7de57f0..e302c08 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -34,9 +34,10 @@ class TenderController extends Controller /** * Show the form for creating a new resource. */ - public function penawaran_create($id) + public function penawaran_create($noreg) { - $penawaran = PenawaranTender::find($id); + $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); @@ -44,20 +45,20 @@ class TenderController extends Controller $kjpp = KJPP::all(); - return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'id')); + return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg')); } /** * Store a newly created resource in storage. */ - public function penawaran_store(TenderPenawaranRequest $request, $id) + public function penawaran_store(TenderPenawaranRequest $request, $noreg) { $validated = $request->validated(); DB::beginTransaction(); try { - $penawaran = PenawaranTender::find($id); + $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; @@ -84,7 +85,7 @@ class TenderController extends Controller DB::rollBack(); return redirect() - ->route('tender.penawaran.createPenawaran', $id) + ->route('tender.penawaran.createPenawaran', $noreg) ->with('error', 'Validation failed: ' . $e); } } @@ -92,89 +93,120 @@ class TenderController extends Controller /** * Show the specified resource. */ - public function penawaran_show($id) + public function penawaran_show($noreg) { - $penawaran = PenawaranTender::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(); + $penawaran = null; + $kjpps = null; + $tujuan_penilaian_kjpp = null; + $jenis_laporan = null; + + $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('id', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan')); + return view('lpj::penawaran.show', compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan')); } /** * Show the form for editing the specified resource. */ - public function penawaran_edit($id) + public function penawaran_edit($noreg) { // Find the specific penawaran by its ID - $penawaran = PenawaranTender::find($id); + $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); $jenis_laporan = JenisLaporan::all(); - $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray(); + $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', 'id', 'kjpps')); + return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg', 'kjpps')); } /** * Update the specified resource in storage. */ - public function penawaran_update(TenderPenawaranRequest $request, $id) + public function penawaran_update(TenderPenawaranRequest $request, $noreg) { $validated = $request->validated(); - // dd($validated); - DB::beginTransaction(); try { - $penawaran = PenawaranTender::find($id); - + // Ambil data penawaran berdasarkan nomor registrasi + $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; - - $validated['status'] = $request->input('status') ?? 'Tender'; - + $validated['status'] = $request->input('status') ?? 'tender'; $penawaran->update($validated); $kjpps = $request->input('kjpp', []); + // Ubah status KJPP lama menjadi 0 jika tidak ada dalam request foreach ($penawaran->penawaranKjpp as $kjpp) { - $kjpp->delete(); // Assuming penawaranKjpp is a relationship on the PenawaranTender model + if (!in_array($kjpp->kjpp_rekanan_id, $kjpps)) { + // Ubah status KJPP lama menjadi 0 + $kjpp->status = 0; + $kjpp->save(); + } } + // Tangani penambahan atau perubahan KJPP baru foreach ($kjpps as $kjpp) { - PenawaranDetailTender::create([ - 'penawaran_id' => $penawaran->id, - 'kjpp_rekanan_id' => $kjpp - ]); + $existingDetail = PenawaranDetailTender::where('penawaran_id', $penawaran->id) + ->where('kjpp_rekanan_id', $kjpp) + ->first(); + + if ($existingDetail) { + // Jika KJPP sudah ada, pastikan statusnya aktif (1) + if ($existingDetail->status == 0) { + $existingDetail->status = 1; + $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 + ]); + } } - // Commit the transaction + // Commit transaksi DB::commit(); return redirect() ->route('tender.penawaran.index') - ->with('success', 'Data Penawaran created successfully'); + ->with('success', 'Data Penawaran updated successfully'); } catch (Exception $e) { + // Rollback jika ada kesalahan DB::rollBack(); return redirect() - ->route('tender.penawaran.createPenawaran', $id) - ->with('error', 'Validation failed: ' . $e); + ->route('tender.penawaran.createPenawaran', $noreg) + ->with('error', 'Validation failed: ' . $e->getMessage()); } } + + /** * Remove the specified resource from storage. */ @@ -190,15 +222,19 @@ class TenderController extends Controller } // Retrieve data from the database - $query = PenawaranTender::query()->where('status', '=', 'Registered'); + $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('code', 'LIKE', "%$search%"); - $q->orWhere('nama_kjpp_sebelumnya', 'LIKE', "%$search%"); - $q->orWhere('tanggal_penilaian_sebelumnya', 'LIKE', "%$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 . '%'); }); } @@ -225,7 +261,7 @@ class TenderController extends Controller $filteredRecords = $query->count(); // Get the data for the current page - $data = $query->get(); + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); @@ -247,16 +283,108 @@ class TenderController extends Controller public function exportPenawaran() { - return Excel::download(new PenawaranTenderExport, 'kjpp.xlsx'); + 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 penawaran_ulang_show($noreg) + { + $penawaran = null; + $kjpps = null; + $tujuan_penilaian_kjpp = null; + $jenis_laporan = null; + + $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_ulang.show', compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan')); } public function proses_penawaran_index() { return view('lpj::proses_penawaran/index'); } - - public function penawaran_ulang_index() - { - return view('lpj::penawaran_ulang/index'); - } } diff --git a/app/Http/Requests/TenderPenawaranRequest.php b/app/Http/Requests/TenderPenawaranRequest.php index 3ea1309..f05313f 100644 --- a/app/Http/Requests/TenderPenawaranRequest.php +++ b/app/Http/Requests/TenderPenawaranRequest.php @@ -26,7 +26,7 @@ class TenderPenawaranRequest extends FormRequest ]; if ($this->method() == 'PUT') { - $rules['code'] = 'required|max:50|unique:penawaran,code,' . $this->id; + $rules['code'] = 'required|max:50'; } else { $rules['code'] = 'required|max:50|unique:penawaran,code'; } diff --git a/resources/views/penawaran/create.blade.php b/resources/views/penawaran/create.blade.php index 7891851..8f3161b 100644 --- a/resources/views/penawaran/create.blade.php +++ b/resources/views/penawaran/create.blade.php @@ -1,12 +1,12 @@ @extends('layouts.main') @section('breadcrumbs') - {{ Breadcrumbs::render(request()->route()->getName(), request()->route('id')) }} + {{ Breadcrumbs::render(request()->route()->getName(), request()->route('noreg')) }} @endsection @section('content')