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 +

+
+
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+ + + 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);