From 5aaecb5c4fc0e323686f80161d22ae2107d0abac Mon Sep 17 00:00:00 2001 From: Andy Chaerudin Date: Wed, 20 Nov 2024 14:49:48 +0700 Subject: [PATCH] penggabungan feature Data Penawaran ke dalam feature Proses Penawaran. Dan merapihkan tampilan index --- app/Helpers/Lpj.php | 25 +- .../OtorisasiPenawaranController.php | 35 ++- .../Controllers/ProsesPenawaranController.php | 148 +++++++++++- app/Http/Requests/ProsesPenawaranRequest.php | 85 +++++++ module.json | 8 - .../views/otorisasipenawaran/edit.blade.php | 12 +- .../views/otorisasipenawaran/index.blade.php | 62 ++++- .../otorisasipenawaran/js/editjs.blade.php | 8 + .../views/otorisasipenawaran/show.blade.php | 2 +- .../prosespenawaran/createPenawaran.blade.php | 222 ++++++++++++++++++ .../views/prosespenawaran/edit.blade.php | 4 +- .../views/prosespenawaran/editulang.blade.php | 4 +- .../views/prosespenawaran/index.blade.php | 103 +++++--- .../views/prosespenawaran/show.blade.php | 2 +- .../prosespenawaran/showPermohonan.blade.php | 50 ++++ routes/breadcrumbs_registrasi.php | 24 +- routes/registrasi.php | 6 + 17 files changed, 726 insertions(+), 74 deletions(-) create mode 100644 app/Http/Requests/ProsesPenawaranRequest.php create mode 100644 resources/views/prosespenawaran/createPenawaran.blade.php create mode 100644 resources/views/prosespenawaran/showPermohonan.blade.php diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 044c3f6..69bb2c2 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -1,7 +1,8 @@ mengurutkan data berdasarkan kolom `created_at` secara DESC + $maxCode = PenawaranTender::max('code'); + // $penawaran = PenawaranTender::latest()->first(); + $penawaran = PenawaranTender::where('code','=',$maxCode)->first(); + $code_penawaran_last=''; + $noUrutAkhirString = sprintf("%04s", 1); + if($penawaran) + { + $code_penawaran_last = substr ($maxCode, -4); + $year_penawaran_last = Carbon::parse($penawaran->created_at)->year; + $year_now = Carbon::now()->year; + if($year_now == $year_penawaran_last) + { + $noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1)); + } + } + + return 'NP'.Carbon::now()->format('y').$noUrutAkhirString; + } // andy add diff --git a/app/Http/Controllers/OtorisasiPenawaranController.php b/app/Http/Controllers/OtorisasiPenawaranController.php index 66180ed..82f6fff 100644 --- a/app/Http/Controllers/OtorisasiPenawaranController.php +++ b/app/Http/Controllers/OtorisasiPenawaranController.php @@ -5,6 +5,7 @@ namespace Modules\Lpj\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use App\Http\Controllers\Controller; +use Carbon\Carbon; use Exception; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\JsonResponse; @@ -40,7 +41,18 @@ class OtorisasiPenawaranController extends Controller // Retrieve data from the database $query =PenawaranTender::query() - ->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') + ->select('penawaran.*', + 'debitures.name as debitures_name', + 'permohonan.tanggal_permohonan', + 'users.name as user_pemohon', + 'branches.name as branches_name', + 'tujuan_penilaian.name as tujuan_penilaian_name', + 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') + ->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi') + ->leftJoin('debitures', 'debitures.id', '=', 'permohonan.debiture_id') + ->leftJoin('users', 'users.id', '=', 'permohonan.user_id') + ->leftJoin('branches', 'branches.id', '=', 'permohonan.branch_id') + ->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') ->where('penawaran.status','=','proposal-tender') ->withCount('penawarandetails'); @@ -82,6 +94,27 @@ class OtorisasiPenawaranController extends Controller //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); $data = $query->get(); + // format date + $i = 0; + foreach ($data as $obj) { + + // tanggal_permohonan + if ($obj->tanggal_permohonan) { + $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); + } + + // date_range + $data[$i]->date_range = "-"; + if ($obj->start_date && $obj->end_date) + { + $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . + Carbon::parse($obj->end_date)->format('d M Y'); + } + + $i++; + } + // format date + // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); diff --git a/app/Http/Controllers/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index 05b199c..f457660 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -13,12 +13,16 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\DB; +use Modules\Lpj\Http\Requests\ProsesPenawaranRequest; +use Modules\Lpj\Models\JenisLaporan; use Modules\Lpj\Models\KJPP; use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTenderLog; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Permohonan; +use Modules\Lpj\Models\StatusPermohonan; +use Modules\Lpj\Models\TujuanPenilaianKJPP; class ProsesPenawaranController extends Controller { @@ -40,7 +44,51 @@ class ProsesPenawaranController extends Controller } // Retrieve data from the database - $query = PenawaranTender::query()->whereIn('status', ['tender', 'proposal-tender'])->withCount('penawarandetails'); + // $query = PenawaranTender::query()->whereIn('status', ['tender', 'proposal-tender'])->withCount('penawarandetails'); + + // penawaran need union with permohonan + $query = PenawaranTender::query()->whereIn('penawaran.status', ['tender', 'proposal-tender']) + ->select('penawaran.id', + 'penawaran.nomor_registrasi', + 'penawaran.code as penawaran_code', + 'penawaran.start_date', + 'penawaran.end_date', + 'penawaran.status as statusnya', + 'debitures.name as debitures_name', + 'permohonan.tanggal_permohonan', + 'users.name as user_pemohon', + 'branches.name as branches_name', + 'tujuan_penilaian.name as tujuan_penilaian_name', + 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name' + ) + ->withCount('penawarandetails') + ->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi') + ->leftJoin('users', 'users.id', '=', 'permohonan.user_id') + ->leftJoin('branches', 'branches.id', '=', 'permohonan.branch_id') + ->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id') + ->leftJoin('debitures', 'debitures.id', '=', 'permohonan.debiture_id') + ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id', '=', 'penawaran.tujuan_penilaian_kjpp_id'); + + $permohonanQuery = Permohonan::whereIn('permohonan.status', ['registered'])->where('permohonan.jenis_penilaian_id', '=', 2) + ->select('permohonan.id', + 'permohonan.nomor_registrasi', + DB::raw('"" as penawaran_code'), + DB::raw('"" as start_date'), + DB::raw('"" as end_date'), + 'permohonan.status as statusnya', + 'debitures.name as debitures_name', + 'permohonan.tanggal_permohonan', + 'users.name as user_pemohon', + 'branches.name as branches_name', + 'tujuan_penilaian.name as tujuan_penilaian_name', + DB::raw('"" as tujuan_penilaian_kjpp_name'), + DB::raw('"-" as penawarandetails_count')) + ->leftJoin('users', 'users.id', '=', 'permohonan.user_id') + ->leftJoin('branches', 'branches.id', '=', 'permohonan.branch_id') + ->leftJoin('debitures', 'debitures.id', '=', 'permohonan.debiture_id') + ->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id'); + $query->union($permohonanQuery); + // penawaran need union with permohonan // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { @@ -76,8 +124,29 @@ class ProsesPenawaranController extends Controller $filteredRecords = $query->count(); // Get the data for the current page - //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - $data = $query->with(['tujuanPenilaianKjpp','permohonan','permohonan.debiture'])->get(); + // $data = $query->with(['tujuanPenilaianKjpp','permohonan','permohonan.debiture'])->get(); + $data = $query->get(); + + // format date + $i = 0; + foreach ($data as $obj) { + + // tanggal_permohonan + if ($obj->tanggal_permohonan) { + $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); + } + + // date_range + $data[$i]->date_range = "-"; + if ($obj->start_date && $obj->end_date) + { + $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . + Carbon::parse($obj->end_date)->format('d M Y'); + } + + $i++; + } + // format date // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); @@ -826,4 +895,77 @@ class ProsesPenawaranController extends Controller return response()->json($data); } + + // merger permohonan + /** + * Show the form for creating a new resource. + */ + public function createPenawaran($id) + { + // id ==> permohonan.id + $permohonan = Permohonan::find($id); + // dd($permohonan); + $status = StatusPermohonan::all(); + $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); + $jenis_laporan = JenisLaporan::all(); + $kjpp = KJPP::all(); + + return view('lpj::prosespenawaran.createPenawaran', compact('id', 'status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'permohonan')); + } + + public function storePenawaran(ProsesPenawaranRequest $request, $id) + { + $validated = $request->validated(); + + DB::beginTransaction(); + + try { + + $permohonan = Permohonan::find($id); + + $userId = Auth::user()->id; + $validated['nomor_registrasi'] = $permohonan->nomor_registrasi; + $validated['status'] = 'tender'; + $validated['updated_by'] = $userId; // Updating the record + $validated['end_date'] = $request->input('end_date') . ' 23:59:59'; + + $permohonan->update($validated); + + // Adding created_by for the new penawaran record + $validated['created_by'] = $userId; + $validated['code'] = onLastnumberCodePenawaran(); + $penawaran = PenawaranTender::create($validated); + + $kjpps = $request->input('kjpp', []); + + foreach ($kjpps as $kjpp) { + PenawaranDetailTender::create([ + 'penawaran_id' => $penawaran->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.prosespenawaran.index') + ->with('success', 'Data Penawaran created successfully'); + } catch (Exception $e) { + DB::rollBack(); + + return redirect() + ->route('tender.prosespenawaran.createPenawaran', $id) + ->with('error', 'Validation failed: ' . $e); + } + } + + public function showPermohonan($id) + { + $permohonan = Permohonan::find($id); + return view('lpj::prosespenawaran.showPermohonan', compact('id', 'permohonan')); + } + // merger permohonan } diff --git a/app/Http/Requests/ProsesPenawaranRequest.php b/app/Http/Requests/ProsesPenawaranRequest.php new file mode 100644 index 0000000..9b31000 --- /dev/null +++ b/app/Http/Requests/ProsesPenawaranRequest.php @@ -0,0 +1,85 @@ + 'exists:kjpp,id', + 'tujuan_penilaian_kjpp_id' => 'required', + 'jenis_laporan_id' => 'required', + 'start_date' => 'required', + 'end_date' => 'required', + 'catatan' => 'nullable' + ]; + + // if ($this->method() == 'PUT') { + // $rules['code'] = 'required|max:50'; + // } else { + // $rules['code'] = 'required|max:50|unique:penawaran,code'; + // } + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + public function messages(): array + { + return [ + 'code.required' => 'Kode Penawaran Wajib diisi!', + 'code.max' => 'Kode Penawaran maksimal 255 huruf!', + 'code.unique' => 'Kode Penawaran tidak boleh sama!', + 'tujuan_penilaian_kjpp_id.required' => 'Tujuan Penilaian KJPP Wajib diisi!', + 'jenis_laporan_id.required' => 'Jenis Laporan Wajib diisi!', + 'start_date.required' => 'Tanggal Awal Wajib diisi!', + 'end_date.required' => 'Tanggal Akhir Wajib diisi!', + ]; + } + + public function withValidator($validator) + { + $validator->after(function ($validator) { + $startDate = strtotime($this->input('start_date')); + $endDate = strtotime($this->input('end_date')); + $today = strtotime(date('Y-m-d')); + + // Jika dalam keadaan tambah penawaran maka munculkan pesan ini + // if ($this->method() !== 'PUT') { + // if ($startDate < $today) { + // $validator->errors()->add('start_date', 'Tanggal Awal tidak boleh sebelum hari ini.'); + // } + // } + + if ($endDate < $startDate) { + $validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.'); + } + + + // 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 + elseif (is_array($namaKjpp) && count($namaKjpp) < 3) { + $validator->errors()->add('kjpp', 'Nama KJPP minimal 3 pilihan.'); + } + }); + } +} diff --git a/module.json b/module.json index 4f82cdf..126b921 100644 --- a/module.json +++ b/module.json @@ -36,14 +36,6 @@ "permission": "", "roles": ["administrator", "admin"], "sub": [ - { - "title": "Data Penawaran", - "path": "tender.penawaran", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, { "title": "Data Proses Penawaran", "path": "tender.prosespenawaran", diff --git a/resources/views/otorisasipenawaran/edit.blade.php b/resources/views/otorisasipenawaran/edit.blade.php index 2940e0c..e1de931 100644 --- a/resources/views/otorisasipenawaran/edit.blade.php +++ b/resources/views/otorisasipenawaran/edit.blade.php @@ -36,11 +36,11 @@

- Kode Penawaran: + Nomor Penawaran:

@@ -69,7 +69,9 @@ No - KJPP + KJPP + No Proposal + Tanggal Proposal Biaya Penawaran Dokumen Penawaran Action @@ -98,7 +100,9 @@ No - KJPP + KJPP + No Proposal + Tanggal Proposal Biaya Penawaran Dokumen Penawaran created_at diff --git a/resources/views/otorisasipenawaran/index.blade.php b/resources/views/otorisasipenawaran/index.blade.php index 5156678..41b1ccd 100644 --- a/resources/views/otorisasipenawaran/index.blade.php +++ b/resources/views/otorisasipenawaran/index.blade.php @@ -36,17 +36,37 @@ - Kode Penawaran + Nomor Penawaran - + + Tanggal Permohonan + + + + User Pemohon + + + + Cabang Pemohon + + + + Nama Debitur + + + Tanggal Penawaran - + Tujuan Penilaian + + Tujuan Penilaian KJPP + + Total KJPP @@ -107,13 +127,40 @@ title: 'Nomor Registrasi', }, code: { - title: 'Kode Penawaran', + title: 'Nomor Penawaran', + }, + tanggal_permohonan: { + title: 'Tanggal Permohonan', + }, + user_pemohon: { + title: 'User Pemohon', + }, + branches_name: { + title: 'Cabang Pemohon', + }, + debiture: { + title: 'Nama Debitur', + render: (item, data) => { + if(data.debitures_name) { + return `${data.debitures_name}`; + } + return "-"; + } }, date_range: { title: 'Tanggal Penawaran', }, - tujuan_penilaian_kjpp_name: { + tujuan_penilaian_name: { title: 'Tujuan Penilaian', + render: (item, data) => { + return data.tujuan_penilaian_name + } + }, + tujuan_penilaian_kjpp: { + title: 'Tujuan Penilaian KJPP', + render: (item, data) => { + return data.tujuan_penilaian_kjpp_name + } }, penawarandetails_count: { title: 'Total KJPP', @@ -122,7 +169,10 @@ }, }, status: { - title: 'Status' + title: 'Status', + render: (item, data) => { + return data.status.toUpperCase() + } }, actions: { title: 'Status', diff --git a/resources/views/otorisasipenawaran/js/editjs.blade.php b/resources/views/otorisasipenawaran/js/editjs.blade.php index cc67d20..409037d 100644 --- a/resources/views/otorisasipenawaran/js/editjs.blade.php +++ b/resources/views/otorisasipenawaran/js/editjs.blade.php @@ -63,6 +63,8 @@ $.each(datas, function(key, value){ var kjppName = value.kjpp_code+' - '+value.kjpp_name; + var no_proposal = (value.no_proposal)??'';// alert(no_proposal); + var tgl_proposal = (value.tgl_proposal)??'';// alert(tgl_proposal); var biaya_penawaran = value.biaya_penawaran;// alert(biaya_penawaran); var htmlDokumenPersetujuanDownload=''; var dokumenPersetujuanDownload = value.dokumen_persetujuan; @@ -79,6 +81,8 @@ var markup = ''; markup +=''+i+''; markup +=''; + markup +=''+no_proposal+''; + markup +=''+tgl_proposal+''; markup +='Rp.'+biaya_penawaran_format+''; markup +=''+htmlDokumenPersetujuanDownload+''; markup +='
'; @@ -113,6 +117,8 @@ $.each(datas, function(key, value){ var kjppName = value.kjpp_code+' - '+value.kjpp_name; + var no_proposal = (value.no_proposal)??'';// alert(no_proposal); + var tgl_proposal = (value.tgl_proposal)??'';// alert(tgl_proposal); var biaya_penawaran = value.biaya_penawaran;// alert(biaya_penawaran); var htmlDokumenPersetujuanDownload=''; var dokumenPersetujuanDownload = value.dokumen_persetujuan; @@ -129,6 +135,8 @@ var markup = ''; markup +=''+i+''; markup +=''; + markup +=''+no_proposal+''; + markup +=''+tgl_proposal+''; markup +='Rp.'+biaya_penawaran_format+''; markup +=''+htmlDokumenPersetujuanDownload+''; markup +=''; diff --git a/resources/views/otorisasipenawaran/show.blade.php b/resources/views/otorisasipenawaran/show.blade.php index 0e6d2e1..8a1f7e1 100644 --- a/resources/views/otorisasipenawaran/show.blade.php +++ b/resources/views/otorisasipenawaran/show.blade.php @@ -29,7 +29,7 @@

- Kode Penawaran: + Nomor Penawaran:

{{ $prosespenawaran->code }} diff --git a/resources/views/prosespenawaran/createPenawaran.blade.php b/resources/views/prosespenawaran/createPenawaran.blade.php new file mode 100644 index 0000000..df7b497 --- /dev/null +++ b/resources/views/prosespenawaran/createPenawaran.blade.php @@ -0,0 +1,222 @@ +@extends('layouts.main') +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection +@php + // $route = Route::currentRouteName(); + // dd($route); tender.prosespenawaran.create + $route = explode('.', Route::currentRouteName()); +@endphp + +@section('content') +
+ +
+
+

+ Tambah Data Penawaran +

+ +
+
+ @csrf +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ - +
+
+
+ +
+ + @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 +
+
+
+ @if (isset($penawaran->nomor_registrasi)) + + Surat Tender + + @endif + +
+
+
+
+
+@endsection +@push('styles') + +@endpush \ No newline at end of file diff --git a/resources/views/prosespenawaran/edit.blade.php b/resources/views/prosespenawaran/edit.blade.php index e757972..124e9aa 100644 --- a/resources/views/prosespenawaran/edit.blade.php +++ b/resources/views/prosespenawaran/edit.blade.php @@ -38,11 +38,11 @@
diff --git a/resources/views/prosespenawaran/editulang.blade.php b/resources/views/prosespenawaran/editulang.blade.php index 66f2125..e3b25b8 100644 --- a/resources/views/prosespenawaran/editulang.blade.php +++ b/resources/views/prosespenawaran/editulang.blade.php @@ -37,11 +37,11 @@

- Kode Penawaran: + Nomor Penawaran:

diff --git a/resources/views/prosespenawaran/index.blade.php b/resources/views/prosespenawaran/index.blade.php index ca0f017..8f353df 100644 --- a/resources/views/prosespenawaran/index.blade.php +++ b/resources/views/prosespenawaran/index.blade.php @@ -38,6 +38,23 @@ Nomor Registrasi + + Nomor Penawaran + + + + + Tanggal Permohonan + + + + User Pemohon + + + + Cabang Pemohon + + Nama Debitur @@ -46,6 +63,10 @@ Tanggal Penawaran + + Tujuan Penilaian + + Tujuan Penilaian KJPP @@ -82,29 +103,11 @@ @push('scripts')