diff --git a/app/Http/Controllers/MasterData/LandController.php b/app/Http/Controllers/MasterData/LandController.php index 6a0af02..581bd16 100644 --- a/app/Http/Controllers/MasterData/LandController.php +++ b/app/Http/Controllers/MasterData/LandController.php @@ -112,36 +112,23 @@ public function edit($id) { $land = Land::with('detailLands')->findOrFail($id); $provinces = Province::all(); - return view('master-data.lahan.edit', compact('id', 'provinces', 'land',)); + $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', - 'nohp.required' => 'Nomor HP wajib diisi', - 'nohp.min' => 'Nomor HP minimal 10 karakter', - 'nohp.max' => 'Nomor HP maksimal 13 karakter', - 'nohp.string' => 'Nomor HP harus berupa string', - - 'rental_price.required' => 'Harga sewa wajib diisi', - 'rental_price.numeric' => 'Harga sewa harus berupa angka', - - 'rental_start.required' => 'Tanggal mulai sewa wajib diisi', - 'rental_start.date' => 'Tanggal mulai sewa harus berupa tanggal', - 'rental_start.after_or_equal' => 'Tanggal mulai sewa harus hari ini atau setelahnya', - - 'rental_until.required' => 'Tanggal sampai sewa wajib diisi', - 'rental_until.date' => 'Tanggal sampai sewa harus berupa tanggal', - 'rental_until.after_or_equal' => 'Tanggal sampai sewa harus sama atau lebih besar dari tanggal mulai sewa', - - 'land_name.required' => 'Nama lahan wajib diisi', - 'land_name.max' => 'Nama lahan maksimal 25 karakter', - 'land_name.string' => 'Nama lahan harus berupa string', - 'province_id.required' => 'Provinsi wajib diisi', 'province_id.exists' => 'Provinsi tidak ditemukan', @@ -160,51 +147,54 @@ public function update(Request $request, $id) 'lng.required' => 'Longitude wajib diisi', 'lng.numeric' => 'Longitude harus berupa angka', - ]; - $request->merge([ - 'rental_price' => str_replace('.', '', $request->rental_price), - ]); + 'polygon.required' => 'Petak lahan wajib digambar', + ]; $validator = Validator::make($request->all(), [ 'owner' => 'required|string|max:25', - 'nohp' => 'required|string|min:10|max:13', - 'rental_price' => 'required|numeric', - 'rental_start' => 'required|date|after_or_equal:today', - 'rental_until' => 'required|date|after_or_equal:rental_start', - 'land_name' => '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(); } - $land = Land::find($id); - $land->land_name = $request->land_name; - $land->owner = $request->owner; - $land->no_hp = $request->nohp; - $land->rental_price = $request->rental_price; - $land->rental_start = $request->rental_start; - $land->rental_until = $request->rental_until; - $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; - + DB::beginTransaction(); try { + $land = Land::findOrFail($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()->back(); } catch (\Throwable $th) { + DB::rollBack(); toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000); return redirect()->back(); } diff --git a/public/assets/js/pages/customJs/master-data/lahan/update.js b/public/assets/js/pages/customJs/master-data/lahan/update.js index 2fa20d2..511b48a 100644 --- a/public/assets/js/pages/customJs/master-data/lahan/update.js +++ b/public/assets/js/pages/customJs/master-data/lahan/update.js @@ -25,9 +25,12 @@ var addressEditField = formEdit.querySelector("#address-edit-field"); var mapEditConatiner = formEdit.querySelector("#map-edit-container"); var latEditField = formEdit.querySelector("#lat-edit"); var lngEditField = formEdit.querySelector("#lng-edit"); +var polygonField = formEdit.querySelector("#polygon-edit"); let latDb = formEdit.querySelector("#lat-db").dataset.lat; let lngDb = formEdit.querySelector("#lng-db").dataset.lng; +let polygonDb = formEdit.querySelector("#polygon-db"); +let polygonData = polygonDb.getAttribute("data-polygon"); var loadingEdit = formEdit.querySelector("#loading-edit"); var btnEditContainer = formEdit.querySelector("#edit-footer"); @@ -289,6 +292,17 @@ function setMapEdit() { btnEditContainer.style.display = "block"; mapEdit.setView([latDb, lngDb], 16); + if (polygonData) { + let coordinates = JSON.parse(polygonData); + console.log("Polygon Data:", coordinates); + + let latlngs = coordinates.map((point) => [point.lat, point.lng]); + let polygon = L.polygon(latlngs, { color: "blue" }).addTo(mapEdit); + drawnItems.addLayer(polygon); + mapEdit.fitBounds(polygon.getBounds()); + polygonField.value = JSON.stringify(coordinates); + } + if (currentMarkerEdit) { mapEdit.removeLayer(currentMarkerEdit); } @@ -314,144 +328,123 @@ function setMapEdit() { .openPopup(); } -async function updateData(data) { - const land = data.land; - const userRole = data.role; +// async function updateData(data) { +// const land = data.land; +// const userRole = data.role; - var ownerEditField = formEdit.querySelector("#owner-edit-field"); - var noHpEditField = formEdit.querySelector("#nohp-edit-field"); - var rentalPriceEditField = formEdit.querySelector( - "#rentalprice-edit-field" - ); - var rentalStartEditField = formEdit.querySelector( - "#rentalstart-edit-field" - ); - var rentalUntilEditField = formEdit.querySelector( - "#rentaluntil-edit-field" - ); - var landNameEditField = formEdit.querySelector("#landname-edit-field"); - var provinceEditField = formEdit.querySelector("#province-edit-field"); - var provinceEditVal = new Choices(provinceEditField); +// var ownerEditField = formEdit.querySelector("#owner-edit-field"); +// var provinceEditField = formEdit.querySelector("#province-edit-field"); +// var provinceEditVal = new Choices(provinceEditField); - let rentalPrice = new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - minimumFractionDigits: 0, - }).format(land.rental_price); +// ownerEditField.value = land.owner; +// provinceEditField.value = land.province_code; +// try { +// const province = await getProvinces(land.province_code); +// provinceEditVal.setChoices([ +// { +// value: province.id, +// label: province.name, +// selected: true, +// disabled: true, +// }, +// ]); - ownerEditField.value = land.owner; - noHpEditField.value = land.no_hp; - rentalPriceEditField.value = rentalPrice.replace(/Rp\s?/g, "").trim(); - rentalStartEditField.value = land.rental_start; - rentalUntilEditField.value = land.rental_until; - landNameEditField.value = land.land_name; - provinceEditField.value = land.province_code; - try { - const province = await getProvinces(land.province_code); - provinceEditVal.setChoices([ - { - value: province.id, - label: province.name, - selected: true, - disabled: true, - }, - ]); +// $.ajax({ +// type: "GET", +// url: "/location/get-regency/" + land.province_code, +// success: function (response) { +// if (response.success) { +// const dataRegencies = response.data; +// const regencies = response.data.find( +// (regency) => regency.id === parseInt(land.regency_code) +// ); - $.ajax({ - type: "GET", - url: "/location/get-regency/" + land.province_code, - success: function (response) { - if (response.success) { - const dataRegencies = response.data; - const regencies = response.data.find( - (regency) => regency.id === parseInt(land.regency_code) - ); +// regencyEditVal.setChoices([ +// { +// value: regencies.id, +// label: regencies.name, +// selected: true, +// disabled: true, +// }, +// ]); - regencyEditVal.setChoices([ - { - value: regencies.id, - label: regencies.name, - selected: true, - disabled: true, - }, - ]); +// if (Array.isArray(dataRegencies)) { +// regencyEditVal.setChoices( +// dataRegencies.map((regency) => ({ +// value: regency.id, +// label: regency.name, +// selected: false, +// disabled: false, +// })) +// ); +// } else { +// mapEditConatiner.style.display = "block"; +// mapEditConatiner.innerHTML = +// "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; +// } +// } +// }, +// }); - if (Array.isArray(dataRegencies)) { - regencyEditVal.setChoices( - dataRegencies.map((regency) => ({ - value: regency.id, - label: regency.name, - selected: false, - disabled: false, - })) - ); - } else { - mapEditConatiner.style.display = "block"; - mapEditConatiner.innerHTML = - "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; - } - } - }, - }); +// $.ajax({ +// type: "GET", +// url: "/location/get-district/" + land.regency_code, +// success: function (response) { +// if (response.success) { +// const dataDistricts = response.data; +// const districts = response.data.find( +// (district) => +// district.id === parseInt(land.district_code) +// ); - $.ajax({ - type: "GET", - url: "/location/get-district/" + land.regency_code, - success: function (response) { - if (response.success) { - const dataDistricts = response.data; - const districts = response.data.find( - (district) => - district.id === parseInt(land.district_code) - ); +// districtEditVal.setChoices([ +// { +// value: districts.id, +// label: districts.name, +// selected: true, +// disabled: true, +// }, +// ]); - districtEditVal.setChoices([ - { - value: districts.id, - label: districts.name, - selected: true, - disabled: true, - }, - ]); +// if (Array.isArray(dataDistricts)) { +// districtEditVal.setChoices( +// dataDistricts.map((district) => ({ +// value: district.id, +// label: district.name, +// selected: false, +// disabled: false, +// })) +// ); +// } else { +// mapEditConatiner.style.display = "block"; +// mapEditConatiner.innerHTML = +// "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; +// } +// } +// }, +// }); - if (Array.isArray(dataDistricts)) { - districtEditVal.setChoices( - dataDistricts.map((district) => ({ - value: district.id, - label: district.name, - selected: false, - disabled: false, - })) - ); - } else { - mapEditConatiner.style.display = "block"; - mapEditConatiner.innerHTML = - "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; - } - } - }, - }); +// addressEditContainer.style.display = "block"; +// addressEditField.value = land.address; - addressEditContainer.style.display = "block"; - addressEditField.value = land.address; +// mapEdit.setView([land.latitude, land.longitude], 16); +// currentMarkerEdit +// .setLatLng([land.latitude, land.longitude]) +// .openPopup(); - mapEdit.setView([land.latitude, land.longitude], 16); - currentMarkerEdit - .setLatLng([land.latitude, land.longitude]) - .openPopup(); +// latEditField.value = land.latitude; +// lngEditField.value = land.longitude; +// polygonField.value = land.polygon; - latEditField.value = land.latitude; - lngEditField.value = land.longitude; - - if (userRole === "admin") { - formEdit.action = "/data-lahan/" + land.id; - } else { - formEdit.action = "/data-lahan-petugas/" + land.id; - } - } catch (error) { - console.log(error); - } -} +// if (userRole === "admin") { +// formEdit.action = "/data-lahan/" + land.id; +// } else { +// formEdit.action = "/data-lahan-petugas/" + land.id; +// } +// } catch (error) { +// console.log(error); +// } +// } function handleDrawCreated(e) { var layer = e.layer; @@ -461,7 +454,7 @@ function handleDrawCreated(e) { polygonField.value = JSON.stringify(coordinates); layer.bindPopup("Petak Lahan Berhasil Dibuat!").openPopup(); - btnContainer.style.display = "block"; + btnEditContainer.style.display = "block"; } function handleDrawEdited(e) { diff --git a/resources/views/master-data/lahan/edit.blade.php b/resources/views/master-data/lahan/edit.blade.php index 973952f..3ccecb7 100644 --- a/resources/views/master-data/lahan/edit.blade.php +++ b/resources/views/master-data/lahan/edit.blade.php @@ -44,7 +44,8 @@

Edit Data Lahan

-
+ @csrf @method('PUT')