From 2708dead538cee64c8a4133dbff22143db8761f4 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 22 May 2025 11:25:08 +0700 Subject: [PATCH 1/2] fix: save penilai dan so, perbaikan print sederhana dan standar --- app/Http/Controllers/PenilaiController.php | 3 +- .../components/print-out-sederhana.blade.php | 29 +++++++++---------- .../components/print-out-standar.blade.php | 29 ++++++++++--------- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 6a148cc..a3588f2 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -1125,8 +1125,7 @@ class PenilaiController extends Controller $penilai = Penilai::updateOrCreate( [ 'permohonan_id' => $request->permohonanId, - 'dokument_id' => $request->documentId, - + 'dokument_id' => $request->input('dokument_id'), ], [ 'lpj' => json_encode($data), diff --git a/resources/views/penilai/components/print-out-sederhana.blade.php b/resources/views/penilai/components/print-out-sederhana.blade.php index f9f6cb0..67b6e05 100644 --- a/resources/views/penilai/components/print-out-sederhana.blade.php +++ b/resources/views/penilai/components/print-out-sederhana.blade.php @@ -22,7 +22,7 @@ Nama Debitur : - {{ u $permohonan->debiture->name ?? '' }} + {{ $permohonan->debiture->name ?? '' }} Alamat dan Telpon @@ -58,7 +58,7 @@ Tanggal Survey : - {{ formatTanggalIndonesia($permohonan->penilaian->updated_at) }} + {{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }} User @@ -116,7 +116,7 @@ Waktu Penyelesaian : - {{ hitungHariKerja($permohonan->penilaian->updated_at, $tanggalLaporan) }} + {{ hitungHariKerja($permohonan->penilaian->tanggal_kunjungan, $tanggalLaporan) }} @@ -204,19 +204,18 @@ @php + $cekHubDebitur = isset($forminspeksi['asset']['hub_cadeb']) && + $forminspeksi['asset']['hub_cadeb'] === 'sesuai' + ? 'sesuai' + : 'tidak sesuai'; - $cekHub = - isset($forminspeksi['asset']['hub_cadeb']) && $forminspeksi['asset']['hub_cadeb'] === 'sesuai' - ? 'sesuai' - : 'tidak sesuai'; - - $hubCadeb = $cekHub === 'sesuai' - ? ($forminspeksi['asset']['hub_cadeb']['sesuai'] ?? null) - : ($forminspeksi['asset']['hub_cadeb']['tidak sesuai'] ?? null); - @endphp - - - + $hubCadebDebitur = isset($forminspeksi['asset']['hub_cadeb'][$cekHubDebitur]) + ? $forminspeksi['asset']['hub_cadeb']['tidak sesuai'] + : $forminspeksi['asset']['hub_cadeb']['sesuai']; + @endphp + + + @php diff --git a/resources/views/penilai/components/print-out-standar.blade.php b/resources/views/penilai/components/print-out-standar.blade.php index 791fdf8..3c35cb3 100644 --- a/resources/views/penilai/components/print-out-standar.blade.php +++ b/resources/views/penilai/components/print-out-standar.blade.php @@ -106,8 +106,13 @@ - + @if (isset($forminspeksi['asset']['debitur_perwakilan'])) + + @endif @@ -179,20 +184,18 @@
Hubungan Pemilik Jaminan dengan Debitur:{{ $hubCadeb ?? '' }}Hubungan Pemilik Jaminan dengan Debitur:{{ $hubCadebDebitur ?? '' }}
Debitur / Wakil Debitur :{{ $permohonan->debiture->name ?? '' }} - + @foreach ($forminspeksi['asset']['debitur_perwakilan'] as $item) + {{ $item ?? $permohonan->debiture->name ?? '' }}
+ @endforeach +
Pihak Bank selain Appraisal
@php + $cekHubDebitur = isset($forminspeksi['asset']['hub_cadeb']) && + $forminspeksi['asset']['hub_cadeb'] === 'sesuai' + ? 'sesuai' + : 'tidak sesuai'; - $cekHub = - isset($forminspeksi['asset']['hub_cadeb']) && $forminspeksi['asset']['hub_cadeb'] === 'sesuai' - ? 'sesuai' - : 'tidak sesuai'; - - - $hubCadeb = $cekHub === 'sesuai' - ? ($forminspeksi['asset']['hub_cadeb']['sesuai'] ?? null) - : ($forminspeksi['asset']['hub_cadeb']['tidak sesuai'] ?? null); - @endphp + $hubCadebDebitur = isset($forminspeksi['asset']['hub_cadeb'][$cekHubDebitur]) + ? $forminspeksi['asset']['hub_cadeb']['tidak sesuai'] + : $forminspeksi['asset']['hub_cadeb']['sesuai']; + @endphp - + @php From 4bb808b341aa8c49b25157ef781a66d801eb3c7d Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 12 Jun 2025 11:59:50 +0700 Subject: [PATCH 2/2] feat(noc): tambahkan fitur baru untuk pengelolaan NOC pembayaran dan penyelesaian - Menambahkan metode baru pada `NocController` untuk mendukung pengelolaan NOC pembayaran dan penyelesaian. - `pembayaran()` untuk menampilkan daftar NOC Pembayaran. - `penyelesaian()` untuk menampilkan daftar NOC Penyelesaian. - Menambahkan fitur baru datatables untuk pembayaran dan penyelesaian: - `dataForDatatablesPembayaran()` untuk filter pembayaran tanpa memo penyelesaian. - `dataForDatatablesPenyelesaian()` untuk filter penyelesaian dengan memo penyelesaian. - Memperbarui routing untuk mendukung fitur baru: - `noc/pembayaran` untuk daftar pembayaran. - `noc/penyelesaian` untuk daftar penyelesaian. - Tambah endpoint datatables baru: `/noc/datatables/pembayaran` dan `/noc/datatables/penyelesaian`. - Menambahkan file blade baru untuk menampilkan daftar NOC pembayaran dan penyelesaian: - `pembayaran.blade.php`. - `penyelesaian.blade.php`. - Menambahkan breadcrumbs untuk fitur pembayaran dan penyelesaian: - `noc.pembayaran` dan `noc.penyelesaian`. - Update `module.json` untuk mendukung UI navigasi baru pada NOC: - Tambahkan submenu "Pembayaran" dan "Penyelesaian". - Ubah ikon menu NOC dari `ki-two-credit-cart` menjadi `ki-briefcase`. - Menambahkan validasi, filter, dan sorting baru untuk datatables pembayaran dan penyelesaian. - Mengoptimalkan tabel datatables sehingga mendukung input pencarian, sorting, dan download file terkait bukti pembayaran atau memo penyelesaian. Signed-off-by: Daeng Deni Mardaeni --- app/Http/Controllers/NocController.php | 115 +++++++++- module.json | 30 ++- resources/views/noc/pembayaran.blade.php | 198 +++++++++++++++++ resources/views/noc/penyelesaian.blade.php | 244 +++++++++++++++++++++ routes/breadcrumbs.php | 13 +- routes/web.php | 9 +- 6 files changed, 597 insertions(+), 12 deletions(-) create mode 100644 resources/views/noc/pembayaran.blade.php create mode 100644 resources/views/noc/penyelesaian.blade.php diff --git a/app/Http/Controllers/NocController.php b/app/Http/Controllers/NocController.php index 48f685b..1f24819 100644 --- a/app/Http/Controllers/NocController.php +++ b/app/Http/Controllers/NocController.php @@ -19,9 +19,20 @@ * Display a listing of the resource. */ public function index() + { + return redirect()->route('noc.pembayaran'); + } + + public function pembayaran() { $persetujuanPenawarans = PersetujuanPenawaran::all(); - return view('lpj::noc.index', compact('persetujuanPenawarans')); + return view('lpj::noc.pembayaran', compact('persetujuanPenawarans')); + } + + public function penyelesaian() + { + $persetujuanPenawarans = PersetujuanPenawaran::all(); + return view('lpj::noc.penyelesaian', compact('persetujuanPenawarans')); } /** @@ -131,6 +142,7 @@ $noc = Noc::updateOrCreate( [ + 'permohonan_id' => $validated['permohonan_id'], 'permohonan_id' => $validated['permohonan_id'], 'persetujuan_penawaran_id' => $validated['persetujuan_penawaran_id'], ], @@ -190,6 +202,12 @@ } public function dataForDatatables(Request $request) + { + // Redirect to pembayaran datatables by default + return $this->dataForDatatablesPembayaran($request); + } + + public function dataForDatatablesPembayaran(Request $request) { if (is_null($this->user) || !$this->user->can('noc.view')) { //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); @@ -198,6 +216,11 @@ // Retrieve data from the database $query = PersetujuanPenawaran::query(); + // Filter for pembayaran (where memo_penyelesaian is null) + $query->whereDoesntHave('noc', function($q) { + $q->whereNotNull('memo_penyelesaian'); + }); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); @@ -243,11 +266,97 @@ ), 'nominal_bayar' => currencyFormat($persetujuanPenawaran->nominal_bayar ?? 0, ), - 'nominal_diterima' => currencyFormat( + 'nominal_diterima' => currencyFormat( $persetujuanPenawaran->noc->nominal_bayar ?? 0, ), 'bukti_ksl' => $persetujuanPenawaran->noc->bukti_ksl ?? $persetujuanPenawaran->bukti_ksl ?? null, - 'bukti_bayar' => $persetujuanPenawaran->bukti_bayar ?? null, + 'bukti_bayar' => $persetujuanPenawaran->bukti_bayar ?? null, + 'updated_at' => dateFormat($persetujuanPenawaran->updated_at, true), + ]; + })->sortBy('updated_at', 1); + + // 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, + ]); + } + + public function dataForDatatablesPenyelesaian(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(); + + // Filter for penyelesaian (where memo_penyelesaian is not null) + $query->whereHas('noc', function($q) { + $q->whereNotNull('memo_penyelesaian'); + }); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->orWhereRelation('penawaran', '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->get(); + + $data = $data->map(function ($persetujuanPenawaran) { + return [ + 'id' => $persetujuanPenawaran->id, + 'nomor_registrasi' => $persetujuanPenawaran->permohonan->nomor_registrasi ?? $persetujuanPenawaran->penawaran->nomor_registrasi, + 'nama_debitur' => $persetujuanPenawaran->permohonan->debiture->name ?? $persetujuanPenawaran->penawaran->permohonan->debiture->name, + 'cabang' => $persetujuanPenawaran->permohonan->branch->name ?? $persetujuanPenawaran->penawaran->permohonan->branch->name, + 'tanggal_pembayaran' => dateFormat( + $persetujuanPenawaran->noc->tanggal_pembayaran ?? $persetujuanPenawaran->noc?->created_at, + true, + ), + 'nominal_bayar' => currencyFormat($persetujuanPenawaran->nominal_bayar ?? 0, + ), + 'nominal_diterima' => currencyFormat( + $persetujuanPenawaran->noc->nominal_bayar ?? 0, + ), + 'bukti_ksl' => $persetujuanPenawaran->noc->bukti_ksl ?? $persetujuanPenawaran->bukti_ksl ?? null, + 'bukti_bayar' => $persetujuanPenawaran->bukti_bayar ?? null, 'memo_penyelesaian' => $persetujuanPenawaran->noc->memo_penyelesaian ?? $persetujuanPenawaran->memo_penyelesaian ?? null, 'nominal_penyelesaian' => currencyFormat( $persetujuanPenawaran->noc->nominal_penyelesaian ?? $persetujuanPenawaran->nominal_penyelesaian ?? 0, diff --git a/module.json b/module.json index bf9626d..7b1f5f6 100644 --- a/module.json +++ b/module.json @@ -265,13 +265,39 @@ { "title": "NOC", "path": "noc", - "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "icon": "ki-filled ki-briefcase text-lg text-primary", "classes": "", "attributes": [], "permission": "", "roles": [ "administrator", - "noc" + "admin" + ], + "sub": [ + { + "title": "Pembayaran", + "path": "noc.pembayaran", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "noc" + ] + }, + { + "title": "Penyelesaian", + "path": "noc.penyelesaian", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "noc" + ] + } ] }, { diff --git a/resources/views/noc/pembayaran.blade.php b/resources/views/noc/pembayaran.blade.php new file mode 100644 index 0000000..aca056b --- /dev/null +++ b/resources/views/noc/pembayaran.blade.php @@ -0,0 +1,198 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('noc.pembayaran') }} +@endsection + +@section('content') +
+
+
+

+ Daftar NOC Pembayaran +

+
+
+ +
+ +
+
+ + +
+
+
Hubungan Pemilik Jaminan dengan Debitur :{{ $hubCadeb ?? '' }}{{ $cekHubDebitur ?? '' }}
+ + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Nama Debitur + + + Cabang + + + Tanggal KSL + + + Nominal bayar + + + Bukti Bayar + + + Nominal Diterima + + + Bukti KSL + + + Tanggal Pembayaran + + Action
+ + + + + @endsection + + @push('scripts') + + + + @endpush diff --git a/resources/views/noc/penyelesaian.blade.php b/resources/views/noc/penyelesaian.blade.php new file mode 100644 index 0000000..3b6b9e5 --- /dev/null +++ b/resources/views/noc/penyelesaian.blade.php @@ -0,0 +1,244 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('noc.penyelesaian') }} +@endsection + +@section('content') +
+
+
+

+ Daftar NOC Penyelesaian +

+
+
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Nama Debitur + + + Cabang + + + Tanggal KSL + + + Nominal bayar + + + Bukti Bayar + + + Nominal Diterima + + + Bukti KSL + + + Tanggal Pembayaran + + + Memo Penyelesaian + + + Bukti Penyelesaian + + + Nominal Penyelesaian + + + Tanggal Penyelesaian + + Action
+
+ +
+
+ @endsection + + @push('scripts') + + + + @endpush diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 2e9f08c..fc822e6 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -673,16 +673,19 @@ Breadcrumbs::for('noc', function (BreadcrumbTrail $trail) { $trail->push('NOC', route('noc.index')); }); +Breadcrumbs::for('noc.pembayaran', function (BreadcrumbTrail $trail) { + $trail->push('NOC Pembayaran', route('noc.pembayaran.index')); +}); + +Breadcrumbs::for('noc.penyelesaian', function (BreadcrumbTrail $trail) { + $trail->push('NOC Penyelesaian', route('noc.penyelesaian.index')); +}); + Breadcrumbs::for('noc.edit', function (BreadcrumbTrail $trail) { $trail->parent('noc'); $trail->push('Proses NOC'); }); - Breadcrumbs::for('noc.penyelesaian', function (BreadcrumbTrail $trail) { - $trail->parent('noc'); - $trail->push('Proses Memo Penyelesaian NOC'); - }); - Breadcrumbs::for('laporan-external', function (BreadcrumbTrail $trail) { $trail->push('Laporan External', route('laporan-external.index')); }); diff --git a/routes/web.php b/routes/web.php index d04fe9a..14fd007 100644 --- a/routes/web.php +++ b/routes/web.php @@ -654,9 +654,14 @@ Route::middleware(['auth'])->group(function () { Route::get('noc/datatables', [NocController::class, 'dataForDatatables']) ->name('noc.datatables'); - Route::get('noc/penyelesaian',[NocController::class, 'show'])->name('noc.penyelesaian'); - Route::post('noc/penyelesaian',[NocController::class, 'penyelesaian'])->name('noc.store.penyelesaian'); + Route::get('noc/datatables/pembayaran', [NocController::class, 'dataForDatatablesPembayaran']) + ->name('noc.datatables.pembayaran'); + Route::get('noc/datatables/penyelesaian', [NocController::class, 'dataForDatatablesPenyelesaian']) + ->name('noc.datatables.penyelesaian'); + Route::get('noc/pembayaran', [NocController::class, 'pembayaran'])->name('noc.pembayaran.index'); + Route::get('noc/penyelesaian', [NocController::class, 'penyelesaian'])->name('noc.penyelesaian.index'); + Route::post('noc/penyelesaian',[NocController::class, 'penyelesaian'])->name('noc.store.penyelesaian'); Route::resource('noc', NocController::class);