From 05b64f94e265362801086b5d2e7d4fbc08454edc Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 17 Mar 2025 10:19:10 +0700 Subject: [PATCH] feat(laporan-admin-kredit): tambahkan fitur laporan admin kredit - Menambahkan model LaporanAdminKredit. - Menambahkan controller LaporanAdminKreditController dengan metode untuk menampilkan dan mengelola data. - Menambahkan rute untuk laporan admin kredit. - Menambahkan breadcrumb untuk navigasi laporan admin kredit. - Menambahkan migrasi untuk tabel laporan_admin_kredit. - Menambahkan relasi di model Debiture untuk laporan admin kredit. --- .../LaporanAdminKreditController.php | 87 ++++++++ app/Models/Debiture.php | 5 + app/Models/LaporanAdminKredit.php | 37 ++++ ...4200_create_laporan_admin_kredit_table.php | 43 ++++ module.json | 17 ++ .../laporan_admin_kredit/index.blade.php | 199 ++++++++++++++++++ routes/breadcrumbs.php | 5 + routes/web.php | 6 + 8 files changed, 399 insertions(+) create mode 100644 app/Http/Controllers/LaporanAdminKreditController.php create mode 100644 app/Models/LaporanAdminKredit.php create mode 100644 database/migrations/2025_03_17_024200_create_laporan_admin_kredit_table.php create mode 100644 resources/views/laporan_admin_kredit/index.blade.php diff --git a/app/Http/Controllers/LaporanAdminKreditController.php b/app/Http/Controllers/LaporanAdminKreditController.php new file mode 100644 index 0000000..d87b93d --- /dev/null +++ b/app/Http/Controllers/LaporanAdminKreditController.php @@ -0,0 +1,87 @@ +paginate(10); + return view('lpj::laporan_admin_kredit.index', compact('laporans')); + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('laporan-admin-kredit.view')) { + //abort(403, 'Sorry! You are not allowed to view laporan admin kredit.'); + } + + // Retrieve data from the database + $query = LaporanAdminKredit::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('kode_register_t24', 'LIKE', '%' . $search . '%') + ->orWhere('jenis_agunan', 'LIKE', '%' . $search . '%') + ->orWhere('nama_pemilik', 'LIKE', '%' . $search . '%') + ->orWhereHas('debiture', function ($query) use ($search) { + $query->where('name', 'LIKE', '%' . $search . '%'); + }); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->with(['debiture.branch'])->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = $request->get('page', 1); + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + } diff --git a/app/Models/Debiture.php b/app/Models/Debiture.php index 3080ecb..abe9e8a 100644 --- a/app/Models/Debiture.php +++ b/app/Models/Debiture.php @@ -64,4 +64,9 @@ return $this->hasOne(Permohonan::class, 'debiture_id', 'id' ); } + public function laporanAdminKredit(): HasMany + { + return $this->hasMany(LaporanAdminKredit::class); + } + } diff --git a/app/Models/LaporanAdminKredit.php b/app/Models/LaporanAdminKredit.php new file mode 100644 index 0000000..41f6b9d --- /dev/null +++ b/app/Models/LaporanAdminKredit.php @@ -0,0 +1,37 @@ + 'date', + 'nilai_pasar_wajar' => 'decimal:2', + 'nilai_likuidasi' => 'decimal:2', + ]; + + /** + * Get the debiture that owns the laporan admin kredit. + */ + public function debiture(): BelongsTo + { + return $this->belongsTo(Debiture::class); + } +} diff --git a/database/migrations/2025_03_17_024200_create_laporan_admin_kredit_table.php b/database/migrations/2025_03_17_024200_create_laporan_admin_kredit_table.php new file mode 100644 index 0000000..e5217dc --- /dev/null +++ b/database/migrations/2025_03_17_024200_create_laporan_admin_kredit_table.php @@ -0,0 +1,43 @@ +id(); + $table->foreignIdFor(Debiture::class)->constrained()->cascadeOnDelete(); + $table->string('kode_register_t24')->nullable(); + $table->string('jenis_agunan')->nullable(); + $table->string('bukti_kepemilikan')->nullable(); + $table->text('alamat_agunan')->nullable(); + $table->string('nama_pemilik')->nullable(); + $table->date('tanggal_kunjungan')->nullable(); + $table->decimal('nilai_pasar_wajar', 15, 2)->nullable(); + $table->decimal('nilai_likuidasi', 15, 2)->nullable(); + $table->string('nama_penilai')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('laporan_admin_kredit'); + } +}; diff --git a/module.json b/module.json index 694f353..cd65329 100644 --- a/module.json +++ b/module.json @@ -349,6 +349,23 @@ "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" + ] } ], "master": [ diff --git a/resources/views/laporan_admin_kredit/index.blade.php b/resources/views/laporan_admin_kredit/index.blade.php new file mode 100644 index 0000000..b08aabe --- /dev/null +++ b/resources/views/laporan_admin_kredit/index.blade.php @@ -0,0 +1,199 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-admin-kredit') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Laporan Admin Kredit +

+
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + CIF + + + Kode Register T24 + + + Nama Debitur + + + Cabang + + + Jenis Agunan + + + Bukti Kepemilikan + + + Alamat Agunan + + + Nama Pemilik + + + Tanggal Kunjungan + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Nama Penilai + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 7e554b8..a00b4e7 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -714,5 +714,10 @@ Breadcrumbs::for('noc', function (BreadcrumbTrail $trail) { $trail->push('Edit Jenis Lampiran', route('basicdata.jenis-lampiran.edit', $id)); }); + // Laporan Admin Kredit + Breadcrumbs::for('laporan-admin-kredit', function ($trail) { + $trail->push('Laporan Admin Kredit', route('laporan-admin-kredit.index')); + }); + // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index 676f125..5a67a4c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,7 @@ use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; use Modules\Lpj\Http\Controllers\JenisPenilaianController; use Modules\Lpj\Http\Controllers\KJPPController; 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; @@ -658,6 +659,11 @@ Route::middleware(['auth'])->group(function () { Route::delete('lampiran/{lampiran}', [LampiranDokumenController::class, 'delete'])->name('lampiran.delete'); + Route::name('laporan-admin-kredit.')->prefix('laporan-admin-kredit')->group(function () { + Route::get('/', [LaporanAdminKreditController::class, 'index'])->name('index'); + Route::get('datatables', [LaporanAdminKreditController::class, 'dataForDatatables'])->name('datatables'); + Route::get('export', [LaporanAdminKreditController::class, 'export'])->name('export'); + }); });