From f91969f95a274db6a134cc9ccce6fe786d292c87 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 19 Dec 2024 15:25:31 +0700 Subject: [PATCH] Tambahkan fitur NOC - Buat migrasi untuk kolom `bukti_ksl` dan `catatan_noc` pada tabel `persetujuan_penawaran`. - Tambahkan halaman index dan form NOC untuk pengelolaan data. - Implementasikan controller dan request validation baru untuk NOC. - Ubah logika status penawaran pada `PersetujuanPenawaranController`. - Tambahkan route, breadcrumbs, dan menu modul untuk NOC. --- app/Http/Controllers/NocController.php | 201 ++++++++++++++++++ .../PersetujuanPenawaranController.php | 2 +- app/Http/Requests/NocRequest.php | 23 ++ ...209_update_persetujuan_penawaran_table.php | 31 +++ module.json | 12 ++ resources/views/noc/form.blade.php | 97 +++++++++ resources/views/noc/index.blade.php | 183 ++++++++++++++++ routes/breadcrumbs.php | 11 +- routes/web.php | 8 +- 9 files changed, 565 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/NocController.php create mode 100644 app/Http/Requests/NocRequest.php create mode 100644 database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php create mode 100644 resources/views/noc/form.blade.php create mode 100644 resources/views/noc/index.blade.php diff --git a/app/Http/Controllers/NocController.php b/app/Http/Controllers/NocController.php new file mode 100644 index 0000000..b4dd9cc --- /dev/null +++ b/app/Http/Controllers/NocController.php @@ -0,0 +1,201 @@ +validated(); + $validated['updated_by'] = Auth::id(); + if (request()->get('status_bayar') == "sudah_bayar") { + $validated['status'] = '1'; + $status = "spk"; + } else { + $status = "persetujuan-penawaran"; + } + + + $persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate( + ['penawaran_id' => $validated['penawaran_id']], + $validated, + ); + + $folderPath = 'noc/' . $validated['penawaran_id']; + + if ($request->hasFile('bukti_ksl')) { + $persetujuanPenawaran->bukti_ksl = $request->file('bukti_ksl')->store( + $folderPath, + 'public', + ); + } + + $persetujuanPenawaran->save(); + + // Update the status of the related permohonan to 'spk' + $permohonan = Permohonan::find(request()->get('permohonan_id')); + if ($permohonan) { + $permohonan->status_bayar = request()->get('status_bayar'); + $permohonan->status = $status; + $permohonan->save(); + + // andy add, update status penawaran.status='spk' + // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); + PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ + 'status' => $status, + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); + // andy add, update status penawaran.status='spk' + } + + return redirect() + ->route('noc.index')->with('success', 'Penyelesaian KSL berhasil disimpan.'); + } + + /** + * Update the specified resource in storage. + */ + public function update(NocRequest $request, PersetujuanPenawaran $persetujuanPenawaran) + { + $validated = $request->validated(); + $validated['updated_by'] = Auth::id(); + + $persetujuanPenawaran->update($validated); + + return redirect() + ->route('noc.index')->with('success', 'Persetujuan Penawaran updated successfully'); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('lpj::noc.create'); + } + + /** + * Display the specified resource. + */ + public function show($id) {} + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->with( + ['penawaran.detail', 'penawaran.permohonan.debiture'], + )->first(); + return view('lpj::noc.form', compact('persetujuanPenawaran')); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(PersetujuanPenawaran $persetujuanPenawaran) + { + $persetujuanPenawaran->delete(); + + return redirect() + ->route('noc.index')->with('success', 'Persetujuan Penawaran deleted successfully'); + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('noc.view')) { + //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); + } + + // Retrieve data from the database + $query = PersetujuanPenawaran::query(); + + // 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%"); + }); + } + + // 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( + [ + 'penawaran.permohonan.debiture', + 'penawaran.permohonan.branch', + 'penawaran.detail', + 'penawaran.persetujuan', + ], + )->get(); + + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = $request->get('page', 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, + ]); + } + } diff --git a/app/Http/Controllers/PersetujuanPenawaranController.php b/app/Http/Controllers/PersetujuanPenawaranController.php index ff60d75..6172030 100644 --- a/app/Http/Controllers/PersetujuanPenawaranController.php +++ b/app/Http/Controllers/PersetujuanPenawaranController.php @@ -77,7 +77,7 @@ // andy add, update status penawaran.status='spk' // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ - 'status' => 'spk', + 'status' => 'noc', 'updated_by' => Auth::id(), 'updated_at' => now(), ]); diff --git a/app/Http/Requests/NocRequest.php b/app/Http/Requests/NocRequest.php new file mode 100644 index 0000000..0cb7e66 --- /dev/null +++ b/app/Http/Requests/NocRequest.php @@ -0,0 +1,23 @@ + 'nullable|exists:penawaran,id', + 'nominal_bayar' => 'nullable|numeric|min:0', + 'bukti_ksl' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240', + 'status' => 'nullable|boolean', + ]; + } + } diff --git a/database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php b/database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..a11d8df --- /dev/null +++ b/database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php @@ -0,0 +1,31 @@ +string('bukti_ksl')->nullable()->after('nominal_bayar'); + $table->string('catatan_noc')->nullable()->after('bukti_ksl'); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->dropColumn('bukti_ksl'); + $table->dropColumn('catatan_noc'); + }); + } + }; diff --git a/module.json b/module.json index 54c85e1..f884f24 100644 --- a/module.json +++ b/module.json @@ -38,6 +38,18 @@ "pemohon-ao" ] }, + { + "title": "NOC", + "path": "noc", + "icon": "ki-filled ki-questionnaire-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "noc" + ] + }, { "title": "Registrasi", "path": "registrasi", diff --git a/resources/views/noc/form.blade.php b/resources/views/noc/form.blade.php new file mode 100644 index 0000000..0fc649e --- /dev/null +++ b/resources/views/noc/form.blade.php @@ -0,0 +1,97 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+
+
+
+ NOC +
+
+ Back +
+
+
+
+ @csrf + + + +
+ +
+ + @error('status_bayar') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('bukti_ksl') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('nominal_bayar') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('catatan') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('catatan_noc') + {{ $message }} + @enderror +
+
+ +
+ +
+
+
+
+
+@endsection diff --git a/resources/views/noc/index.blade.php b/resources/views/noc/index.blade.php new file mode 100644 index 0000000..3483629 --- /dev/null +++ b/resources/views/noc/index.blade.php @@ -0,0 +1,183 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('noc') }} +@endsection + +@section('content') +
+
+
+

+ Daftar NOC +

+
+
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Nama Debitur + + + Cabang + + + Tanggal KSL + + + Nominal bayar + + + Bukti KSL + + + Tanggal Penyelesaian + + Action
+
+
+
+ @endsection + + @push('scripts') + + + + @endpush diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index f66acb4..bb7a968 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -532,7 +532,7 @@ Breadcrumbs::for('otorisator.show', function (BreadcrumbTrail $trail, $id, $type) { $trail->push("Detail $type", route('otorisator.show', ['id' => $id, 'type' => $type])); }); - + Breadcrumbs::for('laporan', function (BreadcrumbTrail $trail) { $trail->push('Laporan', route('laporan.sederhana.index')); @@ -587,5 +587,14 @@ $trail->push('Proses Persetujuan Penawaran'); }); + Breadcrumbs::for('noc', function (BreadcrumbTrail $trail) { + $trail->push('NOC', route('noc.index')); + }); + + Breadcrumbs::for('noc.edit', function (BreadcrumbTrail $trail) { + $trail->parent('noc'); + $trail->push('Proses NOC'); + }); + // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index 28880a9..2d43763 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,7 +17,8 @@ use Modules\Lpj\Http\Controllers\JenisPenilaianController; use Modules\Lpj\Http\Controllers\KJPPController; use Modules\Lpj\Http\Controllers\LaporanController; use Modules\Lpj\Http\Controllers\NilaiPlafondController; -use Modules\Lpj\Http\Controllers\PemilikJaminanController; + use Modules\Lpj\Http\Controllers\NocController; + use Modules\Lpj\Http\Controllers\PemilikJaminanController; use Modules\Lpj\Http\Controllers\PenilaianController; use Modules\Lpj\Http\Controllers\PenilaiController; use Modules\Lpj\Http\Controllers\PermohonanController; @@ -564,6 +565,11 @@ Route::middleware(['auth'])->group(function () { ->name('persetujuan-penawaran.datatables'); Route::resource('persetujuan-penawaran', PersetujuanPenawaranController::class); + + Route::get('noc/datatables', [NocController::class, 'dataForDatatables']) + ->name('noc.datatables'); + + Route::resource('noc', NocController::class); }); require __DIR__ . '/registrasi.php';