diff --git a/app/Exports/LaporanPermohonanExport.php b/app/Exports/LaporanPermohonanExport.php new file mode 100644 index 0000000..02d5fdc --- /dev/null +++ b/app/Exports/LaporanPermohonanExport.php @@ -0,0 +1,89 @@ +request = $request; + } + + public function collection() + { + $query = Permohonan::with(['user', 'branch', 'tujuanPenilaian', 'jenisFasilitasKredit', 'jenisPenilaian']) + ->select('permohonan.*'); + + // Apply role-based filtering + if (!Auth::user()->hasAnyRole(['administrator'])) { + $query->where('branch_id', Auth::user()->branch_id); + } + + + // Apply date range filter if provided + if ($this->request->has('start_date') || $this->request->has('end_date')) { + $query->whereBetween('tanggal_permohonan', [ + $this->request->start_date ?? '1900-01-01', + $this->request->end_date ?? now()->toDateString() + ]); + } + + // Apply search filter if provided + if ($this->request->has('search') && !empty($this->request->search)) { + $search = $this->request->search; + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Default ordering + $query->orderBy('nomor_registrasi', 'asc'); + + return $query->get(); + } + + public function map($permohonan): array + { + return [ + $permohonan->id, + $permohonan->nomor_registrasi, + $permohonan->tanggal_permohonan, + $permohonan->user ? $permohonan->user->name : '', + $permohonan->branch ? $permohonan->branch->name : '', + $permohonan->tujuanPenilaian ? $permohonan->tujuanPenilaian->name : '', + $permohonan->jenisFasilitasKredit ? $permohonan->jenisFasilitasKredit->name : '', + $permohonan->jenisPenilaian ? $permohonan->jenisPenilaian->name : '', + $permohonan->status, + ]; + } + + public function headings(): array + { + return [ + 'ID', + 'Nomor Registrasi', + 'Tanggal Permohonan', + 'Pemohon', + 'Cabang', + 'Tujuan Penilaian', + 'Jenis Fasilitas Kredit', + 'Jenis Penilaian', + 'Status', + ]; + } + } diff --git a/app/Http/Controllers/LaporanPermohonanController.php b/app/Http/Controllers/LaporanPermohonanController.php new file mode 100644 index 0000000..34fbb1d --- /dev/null +++ b/app/Http/Controllers/LaporanPermohonanController.php @@ -0,0 +1,114 @@ +user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = Permohonan::query(); + + if (!Auth::user()->hasAnyRole(['administrator'])) { + $query = $query->where('branch_id', Auth::user()->branch_id); + } + + $query = $query->orderBy('nomor_registrasi', 'desc'); + + // 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->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(); + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + // 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(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','documents','jenisFasilitasKredit', 'jenisPenilaian'])->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $size); + + // Calculate the current page number + $currentPage = max(1, $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/module.json b/module.json index cec0301..ee72503 100644 --- a/module.json +++ b/module.json @@ -12,6 +12,60 @@ "app/Helpers/Lpj.php" ], "menu": { + "laporan": [ + { + "title": "Laporan Permohonan", + "path": "laporan-permohonan", + "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" + ] + }, + { + "title": "Laporan Admin Kredit", + "path": "laporan-admin-kredit", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "adk", + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] + }, + { + "title": "Laporan Penilai Jaminan", + "path": "laporan-penilai-jaminan", + "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": [ { "title": "Otorisasi Permohonan", @@ -360,40 +414,6 @@ "EO Appraisal", "senior-officer" ] - }, - { - "title": "Laporan Admin Kredit", - "path": "laporan-admin-kredit", - "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" - ] - }, - { - "title": "Laporan Penilai Jaminan", - "path": "laporan-penilai-jaminan", - "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" - ] } ], "master": [ diff --git a/resources/views/laporan_permohonan/index.blade.php b/resources/views/laporan_permohonan/index.blade.php new file mode 100644 index 0000000..42b3828 --- /dev/null +++ b/resources/views/laporan_permohonan/index.blade.php @@ -0,0 +1,257 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-permohonan') }}--}} +@endsection + +@section('content') +
+
+
+

+ Laporan Permohonan +

+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Penilaian + + + Pemohon + + + Status + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/routes/web.php b/routes/web.php index a61c4c2..ae35e61 100644 --- a/routes/web.php +++ b/routes/web.php @@ -22,7 +22,8 @@ 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\NilaiPlafondController; + 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; @@ -682,6 +683,12 @@ Route::middleware(['auth'])->group(function () { Route::get('export', [LaporanPenilaiJaminanController::class, 'export'])->name('export'); }); + 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'); + }); + }); require __DIR__ . '/registrasi.php';