From 6187448356af23c8680b1232b851f67e1994d34c Mon Sep 17 00:00:00 2001 From: arieeefajar Date: Sat, 10 May 2025 17:33:44 +0700 Subject: [PATCH] fix(master-data-land): create curd master data land officer --- .../Controllers/LandControllerOfficer.php | 213 ++++++++++++++++++ .../views/master-data/lahan/index.blade.php | 8 +- routes/web.php | 12 +- 3 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/LandControllerOfficer.php diff --git a/app/Http/Controllers/LandControllerOfficer.php b/app/Http/Controllers/LandControllerOfficer.php new file mode 100644 index 0000000..4f739b9 --- /dev/null +++ b/app/Http/Controllers/LandControllerOfficer.php @@ -0,0 +1,213 @@ +where('user_id', auth()->id())->orderBy('created_at', 'desc')->get(); + return view('master-data.lahan.index', compact('lands')); + } + + public function create() + { + $provinces = Province::all(); + return view('master-data.lahan.create', compact('provinces')); + } + + public function store(Request $request) + { + $customMessage = [ + 'owner.required' => 'Nama pemilik wajib diisi', + 'owner.max' => 'Nama pemilik maksimal 25 karakter', + 'owner.string' => 'Nama pemilik harus berupa string', + + 'province_id.required' => 'Provinsi wajib diisi', + 'province_id.exists' => 'Provinsi tidak ditemukan', + + 'regency_id.required' => 'Kota wajib diisi', + 'regency_id.exists' => 'Kota tidak ditemukan', + + 'district_id.required' => 'Kecamatan wajib diisi', + 'district_id.exists' => 'Kecamatan tidak ditemukan', + + 'address.required' => 'Alamat wajib diisi', + 'address.max' => 'Alamat maksimal 100 karakter', + 'address.string' => 'Alamat harus berupa string', + + 'lat.required' => 'Latitude wajib diisi', + 'lat.numeric' => 'Latitude harus berupa angka', + + 'lng.required' => 'Longitude wajib diisi', + 'lng.numeric' => 'Longitude harus berupa angka', + + 'polygon.required' => 'Petak lahan wajib digambar', + ]; + + $validator = Validator::make($request->all(), [ + 'owner' => 'required|string|max:25', + 'province_id' => 'required|exists:provinces,id', + 'regency_id' => 'required|exists:regencies,id', + 'district_id' => 'required|exists:districts,id', + 'address' => 'required|string|max:100', + 'lat' => 'required|numeric', + 'lng' => 'required|numeric', + 'polygon' => 'required', + ], $customMessage); + + $polygon = json_decode($request->polygon, true); + + if ($validator->fails()) { + toast($validator->messages()->all()[0], 'error')->position('top')->autoclose(3000); + return redirect()->back()->withInput(); + } + + DB::beginTransaction(); + try { + $land = new Land(); + $land->user_id = Auth::user()->id; + $land->owner = $request->owner; + $land->province_code = $request->province_id; + $land->regency_code = $request->regency_id; + $land->district_code = $request->district_id; + $land->address = $request->address; + $land->latitude = $request->lat; + $land->longitude = $request->lng; + $land->save(); + + foreach ($polygon as $point) { + $landDetails = new LandDetails(); + $landDetails->land_id = $land->id; + $landDetails->lat = $point['lat']; + $landDetails->lng = $point['lng']; + $landDetails->save(); + } + DB::commit(); + toast('Data berhasil disimpan', 'success')->position('top-right')->autoclose(3000); + + return redirect()->route('lahan.index'); + } catch (\Throwable $th) { + DB::rollBack(); + toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000); + return redirect()->back(); + } + } + + public function edit($id) + { + $land = Land::with('detailLands')->findOrFail($id); + $provinces = Province::all(); + $landDetails = $land->detailLands->map(function ($detail) { + return [ + 'lat' => $detail->lat, + 'lng' => $detail->lng, + ]; + }); + + return view('master-data.lahan.edit', compact('id', 'provinces', 'land', 'landDetails')); + } + + public function update(Request $request, $id) + { + + $customMessage = [ + 'owner.required' => 'Nama pemilik wajib diisi', + 'owner.max' => 'Nama pemilik maksimal 25 karakter', + 'owner.string' => 'Nama pemilik harus berupa string', + + 'province_id.required' => 'Provinsi wajib diisi', + 'province_id.exists' => 'Provinsi tidak ditemukan', + + 'regency_id.required' => 'Kota wajib diisi', + 'regency_id.exists' => 'Kota tidak ditemukan', + + 'district_id.required' => 'Kecamatan wajib diisi', + 'district_id.exists' => 'Kecamatan tidak ditemukan', + + 'address.required' => 'Alamat wajib diisi', + 'address.max' => 'Alamat maksimal 100 karakter', + 'address.string' => 'Alamat harus berupa string', + + 'lat.required' => 'Latitude wajib diisi', + 'lat.numeric' => 'Latitude harus berupa angka', + + 'lng.required' => 'Longitude wajib diisi', + 'lng.numeric' => 'Longitude harus berupa angka', + + 'polygon.required' => 'Petak lahan wajib digambar', + ]; + + $validator = Validator::make($request->all(), [ + 'owner' => 'required|string|max:25', + 'province_id' => 'required|exists:provinces,id', + 'regency_id' => 'required|exists:regencies,id', + 'district_id' => 'required|exists:districts,id', + 'address' => 'required|string|max:100', + 'lat' => 'required|numeric', + 'lng' => 'required|numeric', + 'polygon' => 'required', + ], $customMessage); + + $polygon = json_decode($request->polygon, true); + + if ($validator->fails()) { + toast($validator->messages()->all()[0], 'error')->position('top')->autoclose(3000); + return redirect()->back()->withInput(); + } + + DB::beginTransaction(); + try { + $land = Land::findOrFail($id); + $land->user_id = Auth::user()->id; + $land->owner = $request->owner; + $land->province_code = $request->province_id; + $land->regency_code = $request->regency_id; + $land->district_code = $request->district_id; + $land->address = $request->address; + $land->latitude = $request->lat; + $land->longitude = $request->lng; + $land->save(); + + LandDetails::where('land_id', $land->id)->delete(); + + foreach ($polygon as $point) { + $landDetails = new LandDetails(); + $landDetails->land_id = $land->id; + $landDetails->lat = $point['lat']; + $landDetails->lng = $point['lng']; + $landDetails->save(); + } + DB::commit(); + toast('Data berhasil diubah', 'success')->position('top-right')->autoclose(3000); + + return redirect()->route('lahan.index'); + } catch (\Throwable $th) { + DB::rollBack(); + dd($th->getMessage()); + toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000); + return redirect()->back(); + } + } + + public function destroy($id) + { + $land = Land::find($id); + try { + $land->delete(); + toast('Data berhasil dihapus', 'success')->position('top-right')->autoclose(3000); + return redirect()->back(); + } catch (\Throwable $th) { + toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000); + return redirect()->back(); + } + } +} diff --git a/resources/views/master-data/lahan/index.blade.php b/resources/views/master-data/lahan/index.blade.php index f8dccfb..f757b51 100644 --- a/resources/views/master-data/lahan/index.blade.php +++ b/resources/views/master-data/lahan/index.blade.php @@ -49,7 +49,9 @@ class="ri-add-line align-bottom me-1"> No Pemilik Alamat - Petugas + @if (Auth::user()->role == 'admin') + Petugas + @endif Action @@ -67,7 +69,9 @@ class="fw-medium link-primary">#VZ2101 {{ ucwords(strtolower($land->regency->name)) }}, Provinsi {{ ucwords(strtolower($land->province->name)) }} - {{ $land->user->username }} + @if (Auth::user()->role == 'admin') + {{ $land->user->username }} + @endif
diff --git a/routes/web.php b/routes/web.php index 4b4ad5e..45472bd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,6 +8,7 @@ use App\Http\Controllers\Auth\RegisteredUserController; use App\Http\Controllers\Auth\TwoStepVerifyController; use App\Http\Controllers\DashboardController; +use App\Http\Controllers\LandControllerOfficer; use App\Http\Controllers\LocationController; use App\Http\Controllers\MasterData\IndicatorController; use App\Http\Controllers\MasterData\LandController; @@ -126,7 +127,7 @@ Route::get('/', 'officer')->name('index'); }); - Route::prefix('data-lahan-petugas')->controller(LandController::class)->name('lahan.')->group(function () { + Route::prefix('data-lahan-petugas')->controller(LandControllerOfficer::class)->name('lahan.')->group(function () { Route::get('/', 'index')->name('index'); Route::get('/tambah', 'create')->name('create'); Route::post('/tambah', 'store')->name('store'); @@ -134,5 +135,14 @@ Route::put('/edit/{id}', 'update')->name('update'); Route::delete('/{id}', 'destroy')->name('destroy'); }); + + // Route::prefix('data-lahan-petugas')->controller(LandController::class)->name('lahan.')->group(function () { + // Route::get('/', 'index')->name('index'); + // Route::get('/tambah', 'create')->name('create'); + // Route::post('/tambah', 'store')->name('store'); + // Route::get('/edit/{id}', 'edit')->name('edit'); + // Route::put('/edit/{id}', 'update')->name('update'); + // Route::delete('/{id}', 'destroy')->name('destroy'); + // }); }); });