From 3a54b20f84144a93c462c8a34cda3e26c2b8c893 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 18 Mar 2025 07:19:46 +0700 Subject: [PATCH] feat(bank-data): tambahkan controller dan route untuk pengelolaan data bank - Menambahkan BankDataController untuk mengelola operasi CRUD pada data bank. - Mengimplementasikan metode untuk menampilkan, membuat, memperbarui, dan menghapus data bank. - Menambahkan route untuk mengakses data bank dan mengintegrasikan dengan datatables. - Memperbarui breadcrumbs untuk menambahkan navigasi ke halaman data bank. --- app/Http/Controllers/BankDataController.php | 172 ++++++++++++++++++++ routes/breadcrumbs.php | 4 + routes/web.php | 9 +- 3 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/BankDataController.php diff --git a/app/Http/Controllers/BankDataController.php b/app/Http/Controllers/BankDataController.php new file mode 100644 index 0000000..f9d7fd9 --- /dev/null +++ b/app/Http/Controllers/BankDataController.php @@ -0,0 +1,172 @@ +bankDataService = $bankDataService; + } + + public function index(Request $request) + { + $provinces = Province::all(); + $jenisJaminan = JenisJaminan::all(); + + return view('lpj::bank-data.index', compact('provinces', 'jenisJaminan' )); + } + + public function create() + { + return view('lpj::bank-data.create'); + } + + public function store(BankDataRequest $request) + { + $data = $request->validated(); + $bankData = $this->bankDataService->createBankData($data); + return redirect()->route('lpj.bank-data.show', $bankData->id)->with('success', 'Bank data created successfully.'); + } + + public function show($id) + { + $bankData = $this->bankDataService->findBankData($id); + return view('lpj::bank-data.show', compact('bankData')); + } + + public function edit($id) + { + $bankData = $this->bankDataService->findBankData($id); + return view('lpj::bank-data.edit', compact('bankData')); + } + + public function update(BankDataRequest $request, $id) + { + $data = $request->validated(); + $bankData = $this->bankDataService->updateBankData($id, $data); + return redirect()->route('lpj.bank-data.show', $bankData->id)->with('success', 'Bank data updated successfully.'); + } + + public function destroy($id) + { + $this->bankDataService->deleteBankData($id); + return redirect()->route('lpj.bank-data.index')->with('success', 'Bank data deleted successfully.'); + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('bank-data.view')) { + //abort(403, 'Sorry! You are not allowed to view bank data.'); + } + + // Retrieve data from the database + $query = BankData::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $search = json_decode($search, true); + if (is_array($search)) { + + if ($search['province_code']) { + $query->ofProvince($search['province_code']); + } + + if ($search['city_code']) { + $query->ofCity($search['city_code']); + } + + if ($search['district_code']) { + $query->ofDistrict($search['district_code']); + } + + if ($search['village_code']) { + $query->ofVillage($search['village_code']); + } + + if ($search['jenis_asset']) { + $query->ofAssetType($search['jenis_asset']); + } + + if ($search['start_date'] && $search['end_date']) { + $query->betweenDates($request->start_date, $search['end_date']); + } + } else{ + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('jenis_aset', '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(); + + // Format the data as needed + $formattedData = $data->map(function ($item) { + return [ + 'id' => $item->id, + 'jenis_aset' => $item->jenis_aset, + 'tanggal' => $item->tanggal->format('d-m-Y'), + 'tahun' => $item->tahun, + 'luas_tanah' => $item->luas_tanah, + 'luas_bangunan' => $item->luas_bangunan, + 'harga' => $item->harga, + 'nilai_pasar' => $item->nilai_pasar, + 'location' => $item->kordinat_lat . ', ' . $item->kordinat_lng, + // Add more fields as needed + ]; + }); + + // 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' => $formattedData, + ]); + } +} diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index a00b4e7..ef77526 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -719,5 +719,9 @@ Breadcrumbs::for('noc', function (BreadcrumbTrail $trail) { $trail->push('Laporan Admin Kredit', route('laporan-admin-kredit.index')); }); + Breadcrumbs::for('bank-data', function ($trail) { + $trail->push('Bank Data', route('bank-data.index')); + }); + // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index 5a67a4c..b6df375 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,7 +3,8 @@ use Illuminate\Support\Facades\Route; use Modules\Lpj\Http\Controllers\ActivityController; use Modules\Lpj\Http\Controllers\ArahMataAnginController; -use Modules\Lpj\Http\Controllers\CustomFieldController; + use Modules\Lpj\Http\Controllers\BankDataController; + use Modules\Lpj\Http\Controllers\CustomFieldController; use Modules\Lpj\Http\Controllers\DebitureController; use Modules\Lpj\Http\Controllers\DokumenJaminanController; use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; @@ -665,6 +666,12 @@ Route::middleware(['auth'])->group(function () { Route::get('export', [LaporanAdminKreditController::class, 'export'])->name('export'); }); + Route::name('bank-data.')->prefix('bank-data')->group(function () { + Route::get('datatables', [BankDataController::class, 'dataForDatatables'])->name('datatables'); + }); + + Route::resource('bank-data', BankDataController::class); + }); require __DIR__ . '/registrasi.php';