From e32c73cdb280ddf6c6be9fd09147093eba08d520 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 22 May 2025 11:25:08 +0700 Subject: [PATCH 1/8] 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 3f979aef05a8903a5fee3cad843fc04e419419fa Mon Sep 17 00:00:00 2001 From: majid Date: Fri, 20 Jun 2025 09:12:50 +0700 Subject: [PATCH 2/8] feat(dashboard/rekap-so): penambahan dashboard, rekap so --- app/Http/Controllers/DashboardController.php | 36 ++ .../Controllers/RekapHarianSoController.php | 67 ++++ app/Services/DashboardService.php | 134 +++++++ module.json | 12 + resources/views/dashboard/index.blade.php | 369 ++++++++++++++++++ .../views/rekap-harian-so/index.blade.php | 58 +++ routes/breadcrumbs.php | 48 +-- routes/web.php | 23 +- 8 files changed, 715 insertions(+), 32 deletions(-) create mode 100644 app/Http/Controllers/DashboardController.php create mode 100644 app/Http/Controllers/RekapHarianSoController.php create mode 100644 app/Services/DashboardService.php create mode 100644 resources/views/dashboard/index.blade.php create mode 100644 resources/views/rekap-harian-so/index.blade.php diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..9d6e39a --- /dev/null +++ b/app/Http/Controllers/DashboardController.php @@ -0,0 +1,36 @@ +dashboardService = $dashboardService; + } + /** + * Display a listing of the resource. + */ + public function index(Request $request) + { + // nilai default + $start_date = $request->input('start_date', now()->startOfYear()->format('Y-m-d')); + $end_date = $request->input('end_date', now()->format('Y-m-d')); + + $validate = $request->validate([ + 'start_date' => 'nullable|date_format:Y-m-d', + 'end_date' => 'nullable|date_format:Y-m-d', + ]); + + $dashboard = $this->dashboardService->getDashboardData($start_date, $end_date); + + // dd($dashboard); + return view('lpj::dashboard.index', compact('dashboard')); + } + +} diff --git a/app/Http/Controllers/RekapHarianSoController.php b/app/Http/Controllers/RekapHarianSoController.php new file mode 100644 index 0000000..8d1a7ed --- /dev/null +++ b/app/Http/Controllers/RekapHarianSoController.php @@ -0,0 +1,67 @@ +getTotalLpjInternal($start_date, $end_date); + $countLpjExternal = $this->getTotalLpjEksternal($start_date, $end_date); + $countResume = $this->getResumeCabang($start_date, $end_date); + + return [ + 'count_lpj_internal' => $countLpjInternal, + 'count_lpj_eksternal' => $countLpjExternal, + 'count_resume' => $countResume + ]; + + } + + + + public function getTotalLpjInternal($start_date, $end_date) + { + $months = $this->getMonthly(); + $regions = $this->getRegion(); + $data = []; + + foreach ($months as $index => $month) { + $monthNumber = $index + 1; + $data[$month] = []; + + foreach ($regions as $region) { + if ($monthNumber > now()->month) { + + $data[$month][$region] = [ + 'total_laporan' => 0, + 'total_debiture' => 0, + ]; + } else { + + $totalLaporan = Laporan::whereBetween('created_at', [$start_date, $end_date]) + ->count(); + + + + $data[$month][$region] = [ + 'total_laporan' => $totalLaporan, + 'total_debiture' => 20, + ]; + } + } + } + return $data; + } + + + + public function getPendapatanAppraisal() + { + + } + + public function getResumeCabang($start_date, $end_date) + { + $regions = $this->getRegion(); + $status = ['batal', 'done']; + $data = []; + + foreach ($status as $item) { + $data[$item] = []; + foreach ($regions as $region) { + $totalLaporan = Laporan::where('created_at', '>=', $start_date)->where('created_at', '<=', $end_date)->count(); + $data[$item][$region] = [ + 'count_report' => $totalLaporan, + ]; + } + } + + return $data; + + } + public function getTotalLpjEksternal($start_date, $end_date) + { + $months = $this->getMonthly(); + $data = []; + foreach ($months as $index => $month) { + $monthNumber = $index + 1; + if ($monthNumber > now()->month) { + $data[$month] = [ + 'total_laporan' => 0, + 'total_debiture' => 0, + ]; + } else { + $totalLaporan = Laporan::where('created_at', '>=', $start_date)->where('created_at', '<=', $end_date)->count(); + $data[$month] = [ + 'total_laporan' => $totalLaporan, + 'total_debiture' => 20, + ]; + } + } + return $data; + + + } + + private function getMonthly() + { + return [ + 'januari', + 'februari', + 'maret', + 'april', + 'mei', + 'juni', + 'juli', + 'agustus', + 'september', + 'oktober', + 'november', + 'desember', + ]; + } + + private function getRegion() + { + return [ + 'jabodetabek', + 'non-jabodetabek', + ]; + } +} diff --git a/module.json b/module.json index bf9626d..221879c 100644 --- a/module.json +++ b/module.json @@ -115,6 +115,18 @@ "EO Appraisal", "senior-officer" ] + }, + { + "title": "Rekap Harian So", + "path": "rekap-harian-so", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] } ], "otorisator": [ diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php new file mode 100644 index 0000000..8fb0a68 --- /dev/null +++ b/resources/views/dashboard/index.blade.php @@ -0,0 +1,369 @@ +@extends('layouts.main') + +@section('content') +
+ +
+
+

+ Dashboard +

+
+ + Selamat datang, {{ auth()->user()->name }} +
+
+
+
+ + +
+ +
+
+ + +
+ + @foreach ($dashboard['count_resume'] as $status => $count) + @php + + $gradientFrom = $status === 'batal' ? 'from-red-50' : 'from-amber-50'; + $gradientTo = $status === 'batal' ? 'to-red-100' : 'to-amber-100'; + $borderColor = $status === 'batal' ? 'border-red-200' : 'border-amber-200'; + $iconBg = $status === 'batal' ? 'bg-red-500' : 'bg-amber-500'; + $iconColor = $status === 'batal' ? 'text-red-500' : 'text-amber-500'; + $textColor = $status === 'batal' ? 'text-red-800' : 'text-amber-800'; + $cardTitle = $status === 'batal' ? 'Batal dari Cabang' : 'Menunggu Keputusan Cabang'; + @endphp + +
+
+
+
+ +
+

{{ $cardTitle }}

+
+
+
+
+
+
+
+

Jabodetabek

+ + {{ $count['jabodetabek']['count_report'] ?? 0 }} + +
+
+ +
+
+
+
+
+
+

Luar Jabodetabek

+ + {{ $count['non-jabodetabek']['count_report'] ?? 0 }} + +
+
+ +
+
+
+
+
+
+ @endforeach + +
+ +
+
+
+
+
+ +
+

Pendapatan Appraisal

+
+ +
+
+
+
+ +
+
+
+ + +
+ +
+
+
+
+ +
+

Laporan Internal

+
+
+
+
+
Hubungan Pemilik Jaminan dengan Debitur :{{ $hubCadeb ?? '' }}{{ $cekHubDebitur ?? '' }}
+ + + + + + + + + + + + + + + @foreach ($dashboard['count_lpj_internal'] as $month => $regions) + + + + + + + + @endforeach + + +
+ Bulan + + Jabodetabek + + Luar Jabodetabek +
+ Laporan + + Debitur + + Laporan + + Debitur +
+ {{ ucfirst($month) }} + + {{ $regions['jabodetabek']['total_laporan'] ?? '-' }} + + {{ $regions['jabodetabek']['total_debiture'] ?? '-' }} + + {{ $regions['non-jabodetabek']['total_laporan'] ?? '-' }} + + {{ $regions['non-jabodetabek']['total_debiture'] ?? '-' }} +
+ + + + + +
+
+
+
+ +
+

Laporan Eksternal

+
+
+
+
+ + + + + + + + + + @foreach ($dashboard['count_lpj_eksternal'] as $month => $data) + + + + + + + + + + + @endforeach + + +
+ Bulan + + Laporan + + Debitur +
+ {{ ucfirst($month) }} + + {{ $data['total_laporan'] ?? '-' }} + + {{ $data['total_debiture'] ?? '-' }} +
+
+
+
+ + + + + + + + + +@endsection diff --git a/resources/views/rekap-harian-so/index.blade.php b/resources/views/rekap-harian-so/index.blade.php new file mode 100644 index 0000000..85f0930 --- /dev/null +++ b/resources/views/rekap-harian-so/index.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('rekap-harian-so') }} +@endsection +@section('content') +
+
+
+

+ Rekap Harian {{ date('Y-m-d') }} +

+
+
+
+ + + + + + + + + + + + + + + @foreach ($tujuan_penilaian as $jenis) + + + + + + + + @endforeach + + + + + + + + + + + + +
JenisLaporan (Debitur)KunjunganPipeline (Proses/Debitur)
DebiturLokasi
{{ $jenis->name }}{{ $jenis->laporan_debitur ?? '' }}{{ $jenis->kunjungan_debitur ?? '' }}{{ $jenis->kunjungan_lokasi ?? '' }}{{ $jenis->pipeline ?? '' }}
Lokasi
TOTAL{{ $totals['laporan_debitur'] ?? '' }}{{ $totals['kunjungan_debitur'] ?? '' }}{{ $totals['kunjungan_lokasi'] ?? '' }}{{ $totals['pipeline'] ?? '' }}
+
+
+
+
+@endsection diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 2e9f08c..00b40c4 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -572,7 +572,7 @@ Breadcrumbs::for('otorisator.show', function (BreadcrumbTrail $trail, $id, $type Breadcrumbs::for('laporan', function (BreadcrumbTrail $trail) { - $trail->push('Laporan',''); + $trail->push('Laporan', ''); }); Breadcrumbs::for('laporan.sederhana.index', function (BreadcrumbTrail $trail) { @@ -678,10 +678,10 @@ Breadcrumbs::for('noc.edit', function (BreadcrumbTrail $trail) { $trail->push('Proses NOC'); }); - Breadcrumbs::for('noc.penyelesaian', function (BreadcrumbTrail $trail) { - $trail->parent('noc'); - $trail->push('Proses Memo Penyelesaian 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')); @@ -724,11 +724,11 @@ Breadcrumbs::for('laporan-admin-kredit', function ($trail) { $trail->push('Laporan Admin Kredit', route('laporan-admin-kredit.index')); }); - // Laporan Admin Kredit Edit - Breadcrumbs::for('laporan-admin-kredit-edit', function (BreadcrumbTrail $trail, $laporanAdminKredit) { - $trail->parent('laporan-admin-kredit'); - $trail->push('Edit', route('laporan-admin-kredit.edit', $laporanAdminKredit->id)); - }); +// Laporan Admin Kredit Edit +Breadcrumbs::for('laporan-admin-kredit-edit', function (BreadcrumbTrail $trail, $laporanAdminKredit) { + $trail->parent('laporan-admin-kredit'); + $trail->push('Edit', route('laporan-admin-kredit.edit', $laporanAdminKredit->id)); +}); Breadcrumbs::for('bank-data', function ($trail) { $trail->push('Bank Data', route('bank-data.index')); @@ -739,20 +739,24 @@ Breadcrumbs::for('laporan-penilai-jaminan', function ($trail) { $trail->push('Laporan Penilai Jaminan', route('laporan-penilai-jaminan.index')); }); - Breadcrumbs::for('laporan-permohonan', function ($trail) { - $trail->parent('laporan'); - $trail->push('Laporan Permohnan', route('laporan-permohonan.index')); - }); +Breadcrumbs::for('laporan-permohonan', function ($trail) { + $trail->parent('laporan'); + $trail->push('Laporan Permohnan', route('laporan-permohonan.index')); +}); - Breadcrumbs::for('laporan-penilaian-jaminan', function ($trail) { - $trail->parent('laporan'); - $trail->push('Laporan Penilaian Jaminan', route('laporan-penilaian-jaminan.index')); - }); +Breadcrumbs::for('laporan-penilaian-jaminan', function ($trail) { + $trail->parent('laporan'); + $trail->push('Laporan Penilaian Jaminan', route('laporan-penilaian-jaminan.index')); +}); - Breadcrumbs::for('laporan-hasil-penilaian-jaminan-internal-external', function ($trail) { - $trail->parent('laporan'); - $trail->push('Laporan Hasil Penilaian Jaminan Internal External', route('laporan-hasil-penilaian-jaminan-internal-external.index')); - }); +Breadcrumbs::for('laporan-hasil-penilaian-jaminan-internal-external', function ($trail) { + $trail->parent('laporan'); + $trail->push('Laporan Hasil Penilaian Jaminan Internal External', route('laporan-hasil-penilaian-jaminan-internal-external.index')); +}); + +Breadcrumbs::for('rekap-harian-so', function ($trail) { + $trail->push('Rekap Harian'); +}); // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index d04fe9a..4dfbe61 100644 --- a/routes/web.php +++ b/routes/web.php @@ -22,11 +22,11 @@ use Modules\Lpj\Http\Controllers\LampiranDokumenController; use Modules\Lpj\Http\Controllers\LaporanAdminKreditController; use Modules\Lpj\Http\Controllers\LaporanController; use Modules\Lpj\Http\Controllers\LaporanExternalController; - use Modules\Lpj\Http\Controllers\LaporanHasilPenilaianJaminanInternalExternalController; - use Modules\Lpj\Http\Controllers\LaporanPembatalanController; - use Modules\Lpj\Http\Controllers\LaporanPenilaianJaminanController; - use Modules\Lpj\Http\Controllers\LaporanPermohonanController; - use Modules\Lpj\Http\Controllers\NilaiPlafondController; +use Modules\Lpj\Http\Controllers\LaporanHasilPenilaianJaminanInternalExternalController; +use Modules\Lpj\Http\Controllers\LaporanPembatalanController; +use Modules\Lpj\Http\Controllers\LaporanPenilaianJaminanController; +use Modules\Lpj\Http\Controllers\LaporanPermohonanController; +use Modules\Lpj\Http\Controllers\NilaiPlafondController; use Modules\Lpj\Http\Controllers\NocController; use Modules\Lpj\Http\Controllers\PembatalanController; use Modules\Lpj\Http\Controllers\PemilikJaminanController; @@ -44,6 +44,7 @@ use Modules\Lpj\Http\Controllers\TenderController; use Modules\Lpj\Http\Controllers\TujuanPenilaianController; use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController; use Modules\Lpj\Http\Controllers\LaporanPenilaiJaminanController; +use Modules\Lpj\Http\Controllers\RekapHarianSoController; // use Modules\Lpj\Http\Controllers\ActivityController; @@ -654,8 +655,8 @@ 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/penyelesaian', [NocController::class, 'show'])->name('noc.penyelesaian'); + Route::post('noc/penyelesaian', [NocController::class, 'penyelesaian'])->name('noc.store.penyelesaian'); Route::resource('noc', NocController::class); @@ -680,6 +681,7 @@ Route::middleware(['auth'])->group(function () { Route::put('{id}', [LaporanAdminKreditController::class,'update'])->name('update'); }); + Route::name('bank-data.')->prefix('bank-data')->group(function () { Route::get('datatables', [BankDataController::class, 'dataForDatatables'])->name('datatables'); }); @@ -692,7 +694,7 @@ Route::middleware(['auth'])->group(function () { Route::get('export', [LaporanPenilaiJaminanController::class, 'export'])->name('export'); }); - Route::prefix('laporan-permohonan')->name('laporan-permohonan.')->group(function() { + Route::prefix('laporan-permohonan')->name('laporan-permohonan.')->group(function () { Route::get('datatables', [LaporanPermohonanController::class, 'dataForDatatables'])->name('data'); Route::get('export', [LaporanPermohonanController::class, 'export'])->name('export'); Route::get('/', [LaporanPermohonanController::class, 'index'])->name('index'); @@ -705,18 +707,19 @@ Route::middleware(['auth'])->group(function () { Route::get('/export', [LaporanPembatalanController::class, 'export'])->name('export'); }); - Route::prefix('laporan-penilaian-jaminan')->name('laporan-penilaian-jaminan.')->group(function() { + Route::prefix('laporan-penilaian-jaminan')->name('laporan-penilaian-jaminan.')->group(function () { Route::get('datatables', [LaporanPenilaianJaminanController::class, 'dataForDatatables'])->name('data'); Route::get('export', [LaporanPenilaianJaminanController::class, 'export'])->name('export'); Route::get('/', [LaporanPenilaianJaminanController::class, 'index'])->name('index'); }); - Route::prefix('laporan-hasil-penilaian-jaminan-internal-external')->name('laporan-hasil-penilaian-jaminan-internal-external.')->group(function() { + Route::prefix('laporan-hasil-penilaian-jaminan-internal-external')->name('laporan-hasil-penilaian-jaminan-internal-external.')->group(function () { Route::get('datatables', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'dataForDatatables'])->name('data'); Route::get('export', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'export'])->name('export'); Route::get('/', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'index'])->name('index'); }); + Route::resource('rekap-harian-so', RekapHarianSoController::class); }); require __DIR__ . '/registrasi.php'; From 4ee42f38b9f67bf5b86333da505762d9034d4dde Mon Sep 17 00:00:00 2001 From: majid Date: Wed, 2 Jul 2025 09:47:24 +0700 Subject: [PATCH 3/8] feat:(laporan) tambah rekap harian so dan biaya internal dan external --- ...LaporanBiayaInternalExternalController.php | 23 + .../Controllers/RekapHarianSoController.php | 49 +- app/Services/RekapHarianService.php | 63 +++ module.json | 52 ++ .../views/laporan-biaya/external.blade.php | 499 ++++++++++++++++++ .../views/laporan-biaya/internal.blade.php | 499 ++++++++++++++++++ .../views/rekap-harian-so/index.blade.php | 10 +- routes/web.php | 8 + 8 files changed, 1151 insertions(+), 52 deletions(-) create mode 100644 app/Http/Controllers/LaporanBiayaInternalExternalController.php create mode 100644 app/Services/RekapHarianService.php create mode 100644 resources/views/laporan-biaya/external.blade.php create mode 100644 resources/views/laporan-biaya/internal.blade.php diff --git a/app/Http/Controllers/LaporanBiayaInternalExternalController.php b/app/Http/Controllers/LaporanBiayaInternalExternalController.php new file mode 100644 index 0000000..89c3d1c --- /dev/null +++ b/app/Http/Controllers/LaporanBiayaInternalExternalController.php @@ -0,0 +1,23 @@ + $jenis) { + + $totalLaporanDebiture = $this->totalLaporanDebiture(); + $totalKunjunganDebiture = $this->totalKunjunganDebiture(); + $totalKunjunganLokasi = $this->totalKunjunganLokasi(); + + + $grandTotal = [ + 'laporan_debiture' => 0, + 'debiture' => 0, + 'lokasi' => 0, + 'pipeline' => 0 + ]; + } + return $grandTotal; + + } + + + private function totalLaporanDebiture() + { + $query = [ + 'jenis_penilaian_id' => 1, + 'total' => 2 + ]; + return $query; + } + + public function totalKunjunganDebiture() + { + $query = [ + 'jenis_penilaian_id' => 1, + 'total' => 2 + ]; + return $query; + } + + public function totalKunjunganLokasi() + { + $query = [ + 'jenis_penilaian_id' => 1, + 'total' => 2 + ]; + return $query; + } +} diff --git a/module.json b/module.json index 188bf53..3b35f65 100644 --- a/module.json +++ b/module.json @@ -127,6 +127,58 @@ "administrator", "senior-officer" ] + }, { + "title": "Laporan Biaya Lpj", + "path": "", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ], + "sub": [ + { + "title": "Intenal", + "path": "laporan-biaya.internal", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] + }, + { + "title": "External", + "path": "laporan-biaya.external", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] + } + ] } ], "otorisator": [ diff --git a/resources/views/laporan-biaya/external.blade.php b/resources/views/laporan-biaya/external.blade.php new file mode 100644 index 0000000..bc59c17 --- /dev/null +++ b/resources/views/laporan-biaya/external.blade.php @@ -0,0 +1,499 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} +@endsection + +@section('content') +
+ +
+
+

Filter Laporan

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan Hasil Penilaian Jaminan Internal & External +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/laporan-biaya/internal.blade.php b/resources/views/laporan-biaya/internal.blade.php new file mode 100644 index 0000000..860f8cc --- /dev/null +++ b/resources/views/laporan-biaya/internal.blade.php @@ -0,0 +1,499 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} +@endsection + +@section('content') +
S + +
+
+

Filter Laporan

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan Hasil Penilaian Jaminan Internal & External +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/rekap-harian-so/index.blade.php b/resources/views/rekap-harian-so/index.blade.php index 85f0930..2cc100e 100644 --- a/resources/views/rekap-harian-so/index.blade.php +++ b/resources/views/rekap-harian-so/index.blade.php @@ -9,7 +9,7 @@ data-datatable-state-save="false" id="jenis-aset-table">

- Rekap Harian {{ date('Y-m-d') }} + Rekap Harian {{ formatTanggalIndonesia(date('Y-m-d'), false, true) }}

@@ -32,10 +32,10 @@ @foreach ($tujuan_penilaian as $jenis) {{ $jenis->name }} - {{ $jenis->laporan_debitur ?? '' }} - {{ $jenis->kunjungan_debitur ?? '' }} - {{ $jenis->kunjungan_lokasi ?? '' }} - {{ $jenis->pipeline ?? '' }} + {{ 0 }} + {{ 0 }} + {{ 0 }} + {{ 0 }} @endforeach diff --git a/routes/web.php b/routes/web.php index eee1c11..16b56c0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,6 +45,7 @@ use Modules\Lpj\Http\Controllers\TujuanPenilaianController; use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController; use Modules\Lpj\Http\Controllers\LaporanPenilaiJaminanController; use Modules\Lpj\Http\Controllers\RekapHarianSoController; +use Modules\Lpj\Http\Controllers\LaporanBiayaInternalExternalController; // use Modules\Lpj\Http\Controllers\ActivityController; @@ -725,6 +726,13 @@ Route::middleware(['auth'])->group(function () { }); Route::resource('rekap-harian-so', RekapHarianSoController::class); + + Route::prefix('laporan-biaya')->name('laporan-biaya.')->group(function () { + Route::get('internal', [LaporanBiayaInternalExternalController::class, 'showLaporanBiayaInternal'])->name('internal.index'); + Route::get('external', [LaporanBiayaInternalExternalController::class, 'showLaporanBiayaExternal'])->name('external.index'); +}); + + }); require __DIR__ . '/registrasi.php'; From 47bf7ab59bc3bb46fda8a554403e310f0782d259 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 3 Jul 2025 09:04:24 +0700 Subject: [PATCH 4/8] feat(laporan-debiture) : tambah laporan debiture --- .../Controllers/LaporanDebitureController.php | 33 ++ app/Services/LaporanDebitureService.php | 182 +++++++ .../views/laporan-debiture/index.blade.php | 480 ++++++++++++++++++ 3 files changed, 695 insertions(+) create mode 100644 app/Http/Controllers/LaporanDebitureController.php create mode 100644 app/Services/LaporanDebitureService.php create mode 100644 resources/views/laporan-debiture/index.blade.php diff --git a/app/Http/Controllers/LaporanDebitureController.php b/app/Http/Controllers/LaporanDebitureController.php new file mode 100644 index 0000000..bb57b52 --- /dev/null +++ b/app/Http/Controllers/LaporanDebitureController.php @@ -0,0 +1,33 @@ +laporanDebitureService = app(LaporanDebitureService::class); + } + + /** + * Display a listing of the resource. + */ + public function index() + { + $debiture = Debiture::all(); + return view('lpj::laporan-debiture.index', compact('debiture')); + } + + + public function dataTableForDebiture(Request $request) + { + return $this->laporanDebitureService->dataForDatatables($request); + } + +} diff --git a/app/Services/LaporanDebitureService.php b/app/Services/LaporanDebitureService.php new file mode 100644 index 0000000..fb27ce6 --- /dev/null +++ b/app/Services/LaporanDebitureService.php @@ -0,0 +1,182 @@ +where('status', 'done'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('tanggal_permohonan', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + // Filter by branch if provided + if (isset($search->debiture_id) && !empty($search->debiture_id)) { + $query->where('debiture_id', $search->debiture_id); + } + + if (isset($search->search)) { + + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(['debiture.branch'])->get(); + + $data = $data->map(function ($permohonan) { + $luas_tanah = 0; + $luas_bangunan = 0; + $nilai_tanah = 0; + $nilai_bangunan = 0; + $npw = 0; + $nilai_liquidasi = 0; + + if (isset($permohonan->penilai->lpj)) { + $lpj = json_decode($permohonan->penilai->lpj, true); + $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0); + + $luas_tanah = $lpj['luas_tanah'] ?? 0; + $luas_bangunan = $lpj['luas_bangunan'] ?? 0; + // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_' + $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0); + + $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0); + $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0); + } + + return [ + 'id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'jenis_penilaian' => $permohonan->jenisPenilaian?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_fasilitas_kredit' => $permohonan->jenisFasilitasKredit?->name, + 'branch' => $permohonan->debiture->branch?->name, + 'pemohon' => $permohonan->creator?->name, + 'cif' => $permohonan->debiture->cif, + 'name' => $permohonan->debiture?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name') + ->unique() + ->implode(', '), + 'alamat_agunan' => $permohonan->documents?->map(function ($document) { + return formatAlamat($document); + })->unique()->implode(', '), + 'bukti_kepemilikan' => (function () use ($permohonan) { + $legalitasItems = $permohonan->documents?->flatMap(function ($document) { + return $document->detail->map(function ($detail) { + // Jika tidak ada jenis legalitas jaminan, lewati + if (empty($detail->jenisLegalitasJaminan)) { + return null; + } + + // Hanya tampilkan detail yang memiliki dokumen_jaminan + if (empty($detail->dokumen_jaminan)) { + return null; + } + + // Tampilkan nama legalitas jaminan saja + return $detail->jenisLegalitasJaminan->name ?? ''; + }); + })->filter()->unique()->values()->toArray(); + + // Buat daftar bernomor + $result = ''; + foreach ($legalitasItems as $index => $item) { + $result .= ($index + 1) . '. ' . $item . "\n"; + } + + return $result; + })(), + 'nama_pemilik' => $permohonan->documents?->pluck('pemilik.name') + ->unique() + ->implode(', '), + 'luas_tanah' => $luas_tanah . ' m²', + 'nilai_tanah' => formatRupiah($nilai_tanah, 2), + 'luas_bangunan' => $luas_bangunan . ' m²', + 'nilai_bangunan' => formatRupiah($nilai_bangunan, 2), + 'nilai_njop' => formatRupiah($permohonan->nilai_njop, 2), + 'nilai_pasar_wajar' => formatRupiah($npw, 2), + 'nilai_likuidasi' => formatRupiah($nilai_liquidasi, 2), + 'tanggal_documen_diterima' => $permohonan->documents?->map(function ($document) { + return $document->created_at->format('d-m-Y'); + }), + 'tanggal_spk' => '', + 'nomor_spk' => '', + 'tanggal_rencana_kunjunagn' => '', + 'tanggal_kunjungan' => '', + 'taggal_delivered' => '', + 'jangka_waktu_sla' => '', + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, + 'nama_team_leader' => $permohonan->penilaian?->teams, + 'saran' => '', + 'catatan' => '', + + + 'tanggal_permohonan' => $permohonan->tanggal_permohonan, + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', + ]; + }); + + // 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/resources/views/laporan-debiture/index.blade.php b/resources/views/laporan-debiture/index.blade.php new file mode 100644 index 0000000..f6577c3 --- /dev/null +++ b/resources/views/laporan-debiture/index.blade.php @@ -0,0 +1,480 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} +@endsection + +@section('content') +
+ +
+
+

Filter Laporan Debiture

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan Debiture +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush From e72e82ea55373c1ba92319243817e00263f78872 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 3 Jul 2025 09:14:38 +0700 Subject: [PATCH 5/8] feat(laporan-user): tambah laporan users pemohon --- .../Controllers/LaporanUserController.php | 41 ++ app/Services/LaporanUserService.php | 198 +++++++ resources/views/laporan-user/index.blade.php | 518 ++++++++++++++++++ 3 files changed, 757 insertions(+) create mode 100644 app/Http/Controllers/LaporanUserController.php create mode 100644 app/Services/LaporanUserService.php create mode 100644 resources/views/laporan-user/index.blade.php diff --git a/app/Http/Controllers/LaporanUserController.php b/app/Http/Controllers/LaporanUserController.php new file mode 100644 index 0000000..7d48559 --- /dev/null +++ b/app/Http/Controllers/LaporanUserController.php @@ -0,0 +1,41 @@ +laporanUserService = $laporanUserService; + } + + /** + * Display a listing of the resource. + */ + public function index() + { + // $user = $this->laporanUserService->getUserPemohon(); + return view('lpj::laporan-user.index'); + } + + public function searchUserPemohon(Request $request) + { + $search = $request->get('search'); + $user = $this->laporanUserService->getUserPemohon($search); + return response()->json($user); + } + + public function dataTableForUserPemohon(Request $request) + { + return $this->laporanUserService->dataForDatatables($request); + } + +} diff --git a/app/Services/LaporanUserService.php b/app/Services/LaporanUserService.php new file mode 100644 index 0000000..c53dd59 --- /dev/null +++ b/app/Services/LaporanUserService.php @@ -0,0 +1,198 @@ +whereNotNull('permohonan.nomor_registrasi') + ->when($search, function ($query) use ($search) { + $query->where('users.name', 'like', "%$search%"); + }) + ->select('users.id', 'users.name') + ->distinct() + ->orderBy('users.name') + ->limit(20) + ->get(); + } + + + public function dataForDatatables(Request $request) + { + + // Retrieve data from the database + $query = Permohonan::query(); + $query = $query->where('status', 'done'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('tanggal_permohonan', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + // Filter by branch if provided + if (isset($search->user_id) && !empty($search->user_id)) { + $query->where('user_id', $search->user_id); + } + + if (isset($search->search)) { + + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(['debiture.branch'])->get(); + + $data = $data->map(function ($permohonan) { + $luas_tanah = 0; + $luas_bangunan = 0; + $nilai_tanah = 0; + $nilai_bangunan = 0; + $npw = 0; + $nilai_liquidasi = 0; + + if (isset($permohonan->penilai->lpj)) { + $lpj = json_decode($permohonan->penilai->lpj, true); + $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0); + + $luas_tanah = $lpj['luas_tanah'] ?? 0; + $luas_bangunan = $lpj['luas_bangunan'] ?? 0; + // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_' + $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0); + + $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0); + $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0); + } + + return [ + 'id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'jenis_penilaian' => $permohonan->jenisPenilaian?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_fasilitas_kredit' => $permohonan->jenisFasilitasKredit?->name, + 'branch' => $permohonan->debiture->branch?->name, + 'pemohon' => $permohonan->creator?->name, + 'cif' => $permohonan->debiture->cif, + 'name' => $permohonan->debiture?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name') + ->unique() + ->implode(', '), + 'alamat_agunan' => $permohonan->documents?->map(function ($document) { + return formatAlamat($document); + })->unique()->implode(', '), + 'bukti_kepemilikan' => (function () use ($permohonan) { + $legalitasItems = $permohonan->documents?->flatMap(function ($document) { + return $document->detail->map(function ($detail) { + // Jika tidak ada jenis legalitas jaminan, lewati + if (empty($detail->jenisLegalitasJaminan)) { + return null; + } + + // Hanya tampilkan detail yang memiliki dokumen_jaminan + if (empty($detail->dokumen_jaminan)) { + return null; + } + + // Tampilkan nama legalitas jaminan saja + return $detail->jenisLegalitasJaminan->name ?? ''; + }); + })->filter()->unique()->values()->toArray(); + + // Buat daftar bernomor + $result = ''; + foreach ($legalitasItems as $index => $item) { + $result .= ($index + 1) . '. ' . $item . "\n"; + } + + return $result; + })(), + 'nama_pemilik' => $permohonan->documents?->pluck('pemilik.name') + ->unique() + ->implode(', '), + 'luas_tanah' => $luas_tanah . ' m²', + 'nilai_tanah' => formatRupiah($nilai_tanah, 2), + 'luas_bangunan' => $luas_bangunan . ' m²', + 'nilai_bangunan' => formatRupiah($nilai_bangunan, 2), + 'nilai_njop' => formatRupiah($permohonan->nilai_njop, 2), + 'nilai_pasar_wajar' => formatRupiah($npw, 2), + 'nilai_likuidasi' => formatRupiah($nilai_liquidasi, 2), + 'tanggal_documen_diterima' => $permohonan->documents?->map(function ($document) { + return $document->created_at->format('d-m-Y'); + }), + 'tanggal_spk' => '', + 'nomor_spk' => '', + 'tanggal_rencana_kunjunagn' => '', + 'tanggal_kunjungan' => '', + 'taggal_delivered' => '', + 'jangka_waktu_sla' => '', + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, + 'nama_team_leader' => $permohonan->penilaian?->teams, + 'saran' => '', + 'catatan' => '', + + + 'tanggal_permohonan' => $permohonan->tanggal_permohonan, + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', + ]; + }); + + // 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/resources/views/laporan-user/index.blade.php b/resources/views/laporan-user/index.blade.php new file mode 100644 index 0000000..a9a9771 --- /dev/null +++ b/resources/views/laporan-user/index.blade.php @@ -0,0 +1,518 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} +@endsection + +@section('content') +
+ +
+
+

Laporan User Pemohon

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan User Pemohon +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush From ae15e1983f9c5db1d60fc1df27cb777bd1d2d20f Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 3 Jul 2025 09:51:57 +0700 Subject: [PATCH 6/8] feat(rekap-monitoring-so) : tambah rekap monitoring so --- .../LaporanMonitoringSoController.php | 43 ++++ app/Services/LaporanMonitoringSoService.php | 228 ++++++++++++++++++ .../views/laporan-monitoring/index.blade.php | 89 +++++++ .../views/laporan-monitoring/show.blade.php | 211 ++++++++++++++++ 4 files changed, 571 insertions(+) create mode 100644 app/Http/Controllers/LaporanMonitoringSoController.php create mode 100644 app/Services/LaporanMonitoringSoService.php create mode 100644 resources/views/laporan-monitoring/index.blade.php create mode 100644 resources/views/laporan-monitoring/show.blade.php diff --git a/app/Http/Controllers/LaporanMonitoringSoController.php b/app/Http/Controllers/LaporanMonitoringSoController.php new file mode 100644 index 0000000..2e3d9d6 --- /dev/null +++ b/app/Http/Controllers/LaporanMonitoringSoController.php @@ -0,0 +1,43 @@ +laporanMonitoringSoService = $laporanMonitoringSoService; + } + + /** + * Display a listing of the resource. + */ + public function index() + { + $user = auth()->user()->load('roles'); + $result = $this->laporanMonitoringSoService->progresPengerjaanLaporan($user); + return view('lpj::laporan-monitoring.index', compact('result')); + } + + /** + * Show details data. + * @return Response + */ + + public function show($id){ + return view('lpj::laporan-monitoring.show', compact('id')); + } + + + public function dataForDatatablePenilai(Request $request, $id){ + return $this->laporanMonitoringSoService->showDetailsPermohonan($request, $id); + } + +} diff --git a/app/Services/LaporanMonitoringSoService.php b/app/Services/LaporanMonitoringSoService.php new file mode 100644 index 0000000..2eb619f --- /dev/null +++ b/app/Services/LaporanMonitoringSoService.php @@ -0,0 +1,228 @@ +roles->pluck('name')->contains('senior-officer')) { + $userTeam = TeamsUsers::with('team')->firstWhere('user_id', $user->id); + $regionId = $userTeam?->team->regions_id; + $teamId = $userTeam?->teams_id; + } + + + $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles']) + ->whereHas('team', function ($q) use ($regionId, $teamId) { + $q->when($regionId, fn ($q) => $q->where('regions_id', $regionId)) + ->when($teamId, fn ($q) => $q->where('id', $teamId)); + }) + ->where('user_id', '!=', $user->id) + ->whereHas('user.roles', fn ($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai'])) + ->get(); + + $teamId = is_array($teamId) ? $teamId : [$teamId]; + + $teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn( + 'id', + $teamId + )->get(); + + return [ + 'teamsActivity' => $teamsActivity, + 'teamPenilai' => $teamPenilai, + ]; + } + + + public function showDetailsPermohonan($request,$id) + { + $query = Penilaian::with([ + 'permohonan', + 'permohonan.debiture', + 'permohonan.tujuanPenilaian', + 'permohonan.debiture.documents.jenisJaminan', + 'userPenilai' => function ($query) use ($id) { + $query->where('user_id', $id); + }, + 'permohonan.penilai', + 'permohonan.approveEo', + 'permohonan.approveDd', + 'permohonan.approveSo', + + ]) + ->whereHas('userPenilai', function ($q) use ($id) { + $q->where('user_id', $id); + }) + ->whereHas('permohonan', function ($q) { + $q->whereIn('status', [ + 'assign', + 'survey-completed', + 'proses-laporan', + 'paparan', + 'proses-paparan', + 'revisi-laporan', + 'revisi-paparan', + 'survey', + 'proses-survey', + 'request-reschedule', + 'reschedule', + 'rejected-reschedule', + 'approved-reschedule', + 'revisi-survey', + 'revisi-pembayaran' + ]); + }); + + + + // Filter pencarian + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', "%$search%") + ->orWhere('status', 'LIKE', "%$search%"); + }); + } + + // Sorting + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Hitung total records + $totalRecords = $query->count(); + + // Pagination + $size = $request->get('size', 10); + $page = $request->get('page', 1); + $offset = ($page - 1) * $size; + + // Ambil data dengan pagination + $data = $query->skip($offset)->take($size)->get(); + + $data = $data->map(function ($item) { + $jeniAsset = null; + $statusPembayaran = trim(strtolower($item->permohonan->status_bayar ?? '')); + $tujuanPenilaian = $item->permohonan->tujuanPenilaian->name ?? null; + $plafond = $item->permohonan->nilaiPlafond->name ?? null; + + $now = Carbon::now(); + $type_report = $item->permohonan->penilai->type ?? ""; + + $hari = $hariPaparan = 0; + + if ($type_report == "sederhana") { + $hari = 2; + $item->paparan = 'Tidak Ada'; + } else { + if ($plafond == '< 2M') { + $item->paparan = 'Tidak Ada'; + $hari = 3; + } elseif ($plafond == '2 M - 5 M') { + $hari = 3; + $hariPaparan = 2; + } else { + $hari = 5; + $hariPaparan = 3; + } + } + + if ($tujuanPenilaian == 'RAP') { + $hari = 2; + $hariPaparan = 2; + } + + + if ($item->permohonan && $item->permohonan->debiture) { + $jeniAsset = $item->permohonan->debiture->documents->first() ?? null; + } + + /*$hariTambahan = 0; + + if ($tujuanPenilaian == 'RAP') { + $hariTambahan = 2; + } else { + if ($statusPembayaran == 'sudah_bayar') { + $hariTambahan = 1; // H+1 untuk yang sudah bayar + } else { + $hariTambahan = 2; // H+2 untuk yang belum bayar + } + }*/ + + $tanggalMulai = $item->waktu_penilaian; + + if ($tanggalMulai) { + if (!$tanggalMulai instanceof Carbon) { + $tanggalMulai = Carbon::parse($tanggalMulai); + } + $hariKerjaBerikutnya = hitungHariKerja($tanggalMulai->toDateString(), $tanggalMulai->copy()->addDays(1)); + $hariKerjaBerikutnya = max($hariKerjaBerikutnya, 1); + $tanggalMulai = $tanggalMulai->copy()->addDays($hariKerjaBerikutnya); + + // Konversi string tanggal ke objek Carbon jika belum + if (!$tanggalMulai instanceof Carbon) { + $tanggalMulai = Carbon::parse($tanggalMulai); + } + + // Hitung tanggal selesai berdasarkan hari tambahan + $tanggalSelesai = $tanggalMulai->copy()->addDays($hari); + $tanggalPaparan = $tanggalMulai->copy()->addDays($hariPaparan); + + // Hitung hari kerja + $hariKerja = hitungHariKerja($tanggalMulai->toDateString(), $tanggalSelesai->toDateString()); + $hariKerja = max($hariKerja, $hari); + + $hariKerjaPaparan = hitungHariKerja($tanggalMulai->toDateString(), $tanggalPaparan->toDateString()); + $hariKerjaPaparan = max($hariKerjaPaparan, $hariPaparan); + + // Set due date SLA + $dueDateSla = $tanggalMulai->copy()->addDays($hariKerja); + $dueDateSlaPaparan = $tanggalMulai->copy()->addDays($hariKerjaPaparan); + + // Cek apakah sudah melewati due date + /*if ($now->greaterThan($dueDateSla)) { + $item->due_date_sla = null; + } else { + $item->due_date_sla = $dueDateSla->toDateString(); + }*/ + + $item->due_date_sla = $dueDateSla->toDateString(); + $item->paparan = $dueDateSlaPaparan->toDateString(); + } else { + $item->due_date_sla = null; + $item->paparan = null; + + } + + return $item; + }); + + $filteredRecords = $data->count(); + $pageCount = ceil($totalRecords / $size); + + // Return data dalam bentuk JSON + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $page, + 'totalCount' => $totalRecords, + 'data' => $data + ]); + } +} diff --git a/resources/views/laporan-monitoring/index.blade.php b/resources/views/laporan-monitoring/index.blade.php new file mode 100644 index 0000000..e1ebf08 --- /dev/null +++ b/resources/views/laporan-monitoring/index.blade.php @@ -0,0 +1,89 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} +@endsection + +@section('content') +
+ + + +
+
+

+ Rekap Progres Pengerjaan Laporan Penilai +

+
+ +
+
+ + + + + + + + + + + @php + $sortedTeamsActivity = $result['teamsActivity']->sortBy(function ($item) { + return $item->team->regions->penilaiTeam + ->filter(function ($penilaiTeam) { + $permohonan = optional($penilaiTeam->penilaian)->permohonan; + return $permohonan !== null; + }) + ->count(); + }); + @endphp + + @foreach ($sortedTeamsActivity as $teamActivity) + @php + $totalTask = countPermohonanForUser($teamActivity->user->id); + @endphp + + + + + + + + @endforeach + + + + +
+ + + Nama Penilai + + + Total Task + + + Aksi + +
+ + + {{ $teamActivity->user->name }} + + {{ $totalTask }} + + + + Lihat + +
+
+
+
+
+@endsection diff --git a/resources/views/laporan-monitoring/show.blade.php b/resources/views/laporan-monitoring/show.blade.php new file mode 100644 index 0000000..fad82ae --- /dev/null +++ b/resources/views/laporan-monitoring/show.blade.php @@ -0,0 +1,211 @@ + @extends('layouts.main') + + @section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} + @endsection + + @section('content') +
+
+
+

+ Daftar Penilaian {{ $nama_penilai ?? '' }} +

+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Nama DebiturTujuan PenilaianStatus BayarJenis AssetPenugasanJenis ReportTgl RegisterTgl AssignTgl KunjunganProgressSLA LaporanSLA PaparanApproveKeteranganAction
+
+ +
+
+
+ @endsection + + @push('scripts') + + @endpush From 5e8f979d05c78ede78fd7f56e2fae31e8777d9d4 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 3 Jul 2025 10:25:36 +0700 Subject: [PATCH 7/8] feat(laporan-sla-penilai): tambah laporan sla penilai --- .../LaporanSLAPenilaiController.php | 32 ++ app/Services/LaporanSLAPenilaiService.php | 128 ++++++++ .../views/laporan-sla-penilai/index.blade.php | 295 ++++++++++++++++++ 3 files changed, 455 insertions(+) create mode 100644 app/Http/Controllers/LaporanSLAPenilaiController.php create mode 100644 app/Services/LaporanSLAPenilaiService.php create mode 100644 resources/views/laporan-sla-penilai/index.blade.php diff --git a/app/Http/Controllers/LaporanSLAPenilaiController.php b/app/Http/Controllers/LaporanSLAPenilaiController.php new file mode 100644 index 0000000..4ef6704 --- /dev/null +++ b/app/Http/Controllers/LaporanSLAPenilaiController.php @@ -0,0 +1,32 @@ +laporanSLAPenilaiService = app(LaporanSLAPenilaiService::class); + } + + /** + * Display a listing of the resource. + */ + public function index() + { + return view('lpj::laporan-sla-penilai.index'); + } + + public function dataForDatatableSLaPenilai(Request $request) + { + return $this->laporanSLAPenilaiService->dataForDatatables($request); + } + + +} diff --git a/app/Services/LaporanSLAPenilaiService.php b/app/Services/LaporanSLAPenilaiService.php new file mode 100644 index 0000000..9010ceb --- /dev/null +++ b/app/Services/LaporanSLAPenilaiService.php @@ -0,0 +1,128 @@ +where('status', 'done'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('tanggal_permohonan', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + + if (isset($search->penilai_id) && !empty($search->penilai_id)) { + $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($search) { + $q->where('user_id', $search->penilai_id); + }); + } + + if (isset($search->search)) { + + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(['debiture.branch'])->get(); + + $data = $data->map(function ($permohonan) { + $luas_tanah = 0; + $luas_bangunan = 0; + $nilai_tanah = 0; + $nilai_bangunan = 0; + $npw = 0; + $nilai_liquidasi = 0; + if (isset($permohonan->penilai->lpj)) { + $lpj = json_decode($permohonan->penilai->lpj, true); + $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0); + + $luas_tanah = $lpj['luas_tanah'] ?? 0; + $luas_bangunan = $lpj['luas_bangunan'] ?? 0; + // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_' + $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0); + + $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0); + $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0); + } + + return [ + 'id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'tanggal_permohonan' => $permohonan->tanggal_permohonan, + 'branch' => $permohonan->debiture?->branch?->name, + 'name' => $permohonan->debiture?->name, + 'pemohon' => $permohonan->creator?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name')->unique()->implode(', '), + + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, + ]; + }); + + // 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/resources/views/laporan-sla-penilai/index.blade.php b/resources/views/laporan-sla-penilai/index.blade.php new file mode 100644 index 0000000..09a9b90 --- /dev/null +++ b/resources/views/laporan-sla-penilai/index.blade.php @@ -0,0 +1,295 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-penilaian-jaminan') }} --}} +@endsection + +@section('content') +
+ +
+
+

Filter Laporan SLA Penilai

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan SLA Penilai +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Nama Penilai + + + Tanggal Permohonan + + + Cabang + + + Nama Debitur + + + Tujuan Penilaian + + + Penilaian + + + Tanggal Dokuemen + + + Tanggal Approval + + + Jangka Waktu + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush From 44ff9d4ac69eb04b7f329ed1946275d9db89fc0a Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 3 Jul 2025 11:11:01 +0700 Subject: [PATCH 8/8] feat(breadcrumbs): tambahkan breadcrumbs pada halaman laporan SLA, debiture, user, dan monitoring; perbarui route laporan SLA, debiture, user, dan monitoring --- app/Services/DashboardService.php | 61 ++++++- module.json | 54 +++++- resources/views/dashboard/index.blade.php | 160 +++++------------- .../views/laporan-debiture/index.blade.php | 2 +- .../views/laporan-monitoring/index.blade.php | 2 +- .../views/laporan-monitoring/show.blade.php | 2 +- .../views/laporan-sla-penilai/index.blade.php | 2 +- resources/views/laporan-user/index.blade.php | 2 +- routes/breadcrumbs.php | 21 +++ routes/web.php | 35 +++- 10 files changed, 208 insertions(+), 133 deletions(-) diff --git a/app/Services/DashboardService.php b/app/Services/DashboardService.php index eeefaab..2443207 100644 --- a/app/Services/DashboardService.php +++ b/app/Services/DashboardService.php @@ -3,7 +3,9 @@ namespace Modules\Lpj\Services; use Modules\Lpj\Models\Laporan; - +use Modules\Lpj\Models\Noc; +use Modules\Lpj\Models\Permohonan; + use Illuminate\Support\Facades\DB; class DashboardService { public function getDashboardData($start_date, $end_date) @@ -11,11 +13,13 @@ class DashboardService $countLpjInternal = $this->getTotalLpjInternal($start_date, $end_date); $countLpjExternal = $this->getTotalLpjEksternal($start_date, $end_date); $countResume = $this->getResumeCabang($start_date, $end_date); + $countPendapatan = $this->getPendapatanAppraisal($start_date, $end_date); return [ 'count_lpj_internal' => $countLpjInternal, 'count_lpj_eksternal' => $countLpjExternal, - 'count_resume' => $countResume + 'count_resume' => $countResume, + 'count_pendapatan' => $countPendapatan ]; } @@ -43,12 +47,16 @@ class DashboardService $totalLaporan = Laporan::whereBetween('created_at', [$start_date, $end_date]) ->count(); + $totalDebitur = Permohonan::whereBetween('created_at', [$start_date, $end_date]) + ->where('status', 'done') + ->distinct() + ->count('debiture_id'); $data[$month][$region] = [ 'total_laporan' => $totalLaporan, - 'total_debiture' => 20, + 'total_debiture' => $totalDebitur, ]; } } @@ -58,11 +66,37 @@ class DashboardService - public function getPendapatanAppraisal() - { - + public function getPendapatanAppraisal($start_date, $end_date) +{ + $months = $this->getMonthly(); + $data = []; + + foreach ($months as $index => $month) { + $monthNumber = $index + 1; + + if ($monthNumber > now()->month) { + // Bulan belum terjadi + $data[$month] = [ + 'total_jumlah' => 0, + 'total_akumulasi' => 0, + ]; + } else { + // Hitung jumlah nominal_bayar pada bulan ini + $totalJumlah = Noc::whereYear('tanggal_pembayaran', now()->year) + ->whereMonth('tanggal_pembayaran', $monthNumber) + ->sum('nominal_bayar'); + + + $data[$month] = [ + 'total_jumlah' => $totalJumlah, + 'total_akumulasi' => $totalJumlah, + ]; + } } + return $data; +} + public function getResumeCabang($start_date, $end_date) { $regions = $this->getRegion(); @@ -72,7 +106,12 @@ class DashboardService foreach ($status as $item) { $data[$item] = []; foreach ($regions as $region) { - $totalLaporan = Laporan::where('created_at', '>=', $start_date)->where('created_at', '<=', $end_date)->count(); + $totalLaporan = DB::table('laporan') + ->join('permohonan', 'laporan.permohonan_id', '=', 'permohonan.id') + ->where('permohonan.status', $item) + ->whereBetween('laporan.created_at', [$start_date, $end_date]) + ->count(); + $data[$item][$region] = [ 'count_report' => $totalLaporan, ]; @@ -95,9 +134,15 @@ class DashboardService ]; } else { $totalLaporan = Laporan::where('created_at', '>=', $start_date)->where('created_at', '<=', $end_date)->count(); + + $totalDebitur = Permohonan::whereBetween('created_at', [$start_date, $end_date]) + ->where('status', 'done') + ->distinct() + ->count('debiture_id'); + $data[$month] = [ 'total_laporan' => $totalLaporan, - 'total_debiture' => 20, + 'total_debiture' => $totalDebitur, ]; } } diff --git a/module.json b/module.json index 3b35f65..fc81e7f 100644 --- a/module.json +++ b/module.json @@ -129,7 +129,7 @@ ] }, { "title": "Laporan Biaya Lpj", - "path": "", + "path": "laporan-biaya", "icon": "ki-filled ki-filter-tablet text-lg text-primary", "classes": "", "attributes": [], @@ -179,6 +179,58 @@ ] } ] + },{ + "title": "Laporan Debitur", + "path": "laporan-debiture", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Laporan User", + "path": "laporan-user", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Laporan Monitoring so", + "path": "laporan-monitoring", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Laporan SLA Penilai", + "path": "laporan-sla-penilai", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] } ], "otorisator": [ diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index 8fb0a68..5b71ae7 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -18,7 +18,9 @@
- + @@ -100,7 +102,45 @@
- + + + + + + + + + + @foreach ($dashboard['count_pendapatan'] as $month => $data) + + + + + + + + + + + @endforeach + + +
+ Bulan + + Jumlah + + Akumulasi +
+ {{ ucfirst($month) }} + + {{ $data['total_jumlah'] ?? '-' }} + + {{ $data['total_akumulasi'] ?? '-' }} +
@@ -249,121 +289,5 @@ } - @endsection diff --git a/resources/views/laporan-debiture/index.blade.php b/resources/views/laporan-debiture/index.blade.php index f6577c3..3b36763 100644 --- a/resources/views/laporan-debiture/index.blade.php +++ b/resources/views/laporan-debiture/index.blade.php @@ -1,7 +1,7 @@ @extends('layouts.main') @section('breadcrumbs') - {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} + {{ Breadcrumbs::render('laporan-debiture') }} @endsection @section('content') diff --git a/resources/views/laporan-monitoring/index.blade.php b/resources/views/laporan-monitoring/index.blade.php index e1ebf08..95ad19e 100644 --- a/resources/views/laporan-monitoring/index.blade.php +++ b/resources/views/laporan-monitoring/index.blade.php @@ -1,7 +1,7 @@ @extends('layouts.main') @section('breadcrumbs') - {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} + {{ Breadcrumbs::render('laporan-monitoring') }} @endsection @section('content') diff --git a/resources/views/laporan-monitoring/show.blade.php b/resources/views/laporan-monitoring/show.blade.php index fad82ae..ca836b7 100644 --- a/resources/views/laporan-monitoring/show.blade.php +++ b/resources/views/laporan-monitoring/show.blade.php @@ -1,7 +1,7 @@ @extends('layouts.main') @section('breadcrumbs') - {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} + {{ Breadcrumbs::render(request()->route()->getName()) }} @endsection @section('content') diff --git a/resources/views/laporan-sla-penilai/index.blade.php b/resources/views/laporan-sla-penilai/index.blade.php index 09a9b90..1515a15 100644 --- a/resources/views/laporan-sla-penilai/index.blade.php +++ b/resources/views/laporan-sla-penilai/index.blade.php @@ -1,7 +1,7 @@ @extends('layouts.main') @section('breadcrumbs') - {{-- {{ Breadcrumbs::render('laporan-penilaian-jaminan') }} --}} + {{ Breadcrumbs::render('laporan-sla-penilai') }} @endsection @section('content') diff --git a/resources/views/laporan-user/index.blade.php b/resources/views/laporan-user/index.blade.php index a9a9771..5f2e629 100644 --- a/resources/views/laporan-user/index.blade.php +++ b/resources/views/laporan-user/index.blade.php @@ -1,7 +1,7 @@ @extends('layouts.main') @section('breadcrumbs') - {{-- {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} --}} + {{ Breadcrumbs::render('laporan-user') }} @endsection @section('content') diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 57a0d01..cb3e4b0 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -761,5 +761,26 @@ Breadcrumbs::for('rekap-harian-so', function ($trail) { $trail->push('Rekap Harian'); }); + +Breadcrumbs::for('laporan-user', function ($trail) { + $trail->push('Laporan User Pemohonan', route('laporan-user.index')); +}); + +Breadcrumbs::for('laporan-monitoring', function ($trail) { + $trail->push('Laporan Monitoring', route('laporan-monitoring.index')); +}); + +Breadcrumbs::for('laporan-monitoring.show', function ($trail) { + $trail->parent('laporan-monitoring'); + $trail->push('Detail'); +}); + +Breadcrumbs::for('laporan-debiture', function ($trail) { + $trail->push('Laporan Debiture', route('laporan-debiture.index')); +}); + +Breadcrumbs::for('laporan-sla-penilai', function ($trail) { + $trail->push('Laporan SLA Penilai', route('laporan-sla-penilai.index')); +}); // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index 16b56c0..76e0df1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -46,6 +46,12 @@ use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController; use Modules\Lpj\Http\Controllers\LaporanPenilaiJaminanController; use Modules\Lpj\Http\Controllers\RekapHarianSoController; use Modules\Lpj\Http\Controllers\LaporanBiayaInternalExternalController; +use Modules\Lpj\Http\Controllers\LaporanMonitoringSoController; +use Modules\Lpj\Http\Controllers\LaporanDebitureController; +use Modules\Lpj\Http\Controllers\LaporanUserController; +use Modules\Lpj\Http\Controllers\LaporanSLAPenilaiController; + + // use Modules\Lpj\Http\Controllers\ActivityController; @@ -725,13 +731,40 @@ Route::middleware(['auth'])->group(function () { Route::get('/', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'index'])->name('index'); }); + // rekap harian so Route::resource('rekap-harian-so', RekapHarianSoController::class); + // laporan biaya Route::prefix('laporan-biaya')->name('laporan-biaya.')->group(function () { Route::get('internal', [LaporanBiayaInternalExternalController::class, 'showLaporanBiayaInternal'])->name('internal.index'); Route::get('external', [LaporanBiayaInternalExternalController::class, 'showLaporanBiayaExternal'])->name('external.index'); -}); + }); + // laporan user + Route::prefix('laporan-user')->name('laporan-user.')->group(function () { + Route::get('/', [LaporanUserController::class, 'index'])->name('index'); + Route::get('api/user-pemohon', [LaporanUserController::class, 'searchUserPemohon'])->name('api.user-pemohon'); + Route::get('datatables', [LaporanUserController::class, 'dataTableForUserPemohon'])->name('datatables'); + }); + + // laporan monitoring + Route::prefix('laporan-monitoring')->name('laporan-monitoring.')->group(function () { + Route::get('/', [LaporanMonitoringSoController::class, 'index'])->name('index'); + Route::get('/{id}/detail', [LaporanMonitoringSoController::class, 'show'])->name('show'); + Route::get('datatables/{id}', [LaporanMonitoringSoController::class, 'dataForDatatablePenilai'])->name('datatables'); + }); + + // laporan debiture + Route::prefix('laporan-debiture')->name('laporan-debiture.')->group(function () { + Route::get('/', [LaporanDebitureController::class, 'index'])->name('index'); + Route::get('datatables', [LaporanDebitureController::class, 'dataTableForDebiture'])->name('datatables'); + }); + + // laporan sla + Route::prefix('laporan-sla-penilai')->name('laporan-sla-penilai.')->group(function () { + Route::get('/', [LaporanSLAPenilaiController::class, 'index'])->name('index'); + Route::get('datatables', [LaporanSLAPenilaiController::class, 'dataForDatatableSLaPenilai'])->name('datatables'); + }); });