diff --git a/app/Http/Controllers/MasterData/LandController.php b/app/Http/Controllers/MasterData/LandController.php index 6b64521..6a0af02 100644 --- a/app/Http/Controllers/MasterData/LandController.php +++ b/app/Http/Controllers/MasterData/LandController.php @@ -9,12 +9,16 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; +use Psy\CodeCleaner\ReturnTypePass; class LandController extends Controller { public function index() { $lands = Land::orderBy('created_at', 'desc')->get(); + if ($lands->isEmpty()) { + return view('master-data.lahan.index', compact('lands')); + } $province = Province::where('id', $lands->first()->province_code)->first(); $regency = $province->regency()->where('id', $lands->first()->regency_code)->first(); $district = $regency->district()->where('id', $lands->first()->district_code)->first(); @@ -95,7 +99,7 @@ public function store(Request $request) } DB::commit(); toast('Data berhasil disimpan', 'success')->position('top-right')->autoclose(3000); - return redirect()->back(); + return redirect()->route('master_data.lahan.index'); } catch (\Throwable $th) { DB::rollBack(); dd($th->getMessage()); @@ -104,6 +108,13 @@ public function store(Request $request) } } + public function edit($id) + { + $land = Land::with('detailLands')->findOrFail($id); + $provinces = Province::all(); + return view('master-data.lahan.edit', compact('id', 'provinces', 'land',)); + } + public function update(Request $request, $id) { $customMessage = [ diff --git a/app/Models/Land.php b/app/Models/Land.php index 68e0511..1241619 100644 --- a/app/Models/Land.php +++ b/app/Models/Land.php @@ -11,4 +11,9 @@ class Land extends Model protected $table = 'land'; protected $guarded = []; + + public function detailLands() + { + return $this->hasMany(LandDetails::class, 'land_id', 'id'); + } } diff --git a/public/assets/js/pages/customJs/master-data/lahan/create.js b/public/assets/js/pages/customJs/master-data/lahan/create.js index 512dd96..7a03af5 100644 --- a/public/assets/js/pages/customJs/master-data/lahan/create.js +++ b/public/assets/js/pages/customJs/master-data/lahan/create.js @@ -57,8 +57,6 @@ function initMap() { }); } -document.addEventListener("DOMContentLoaded", initMap); - var form = document.getElementById("add-form"); var provinceField = form.querySelector("#province-field"); var provinceVal = new Choices(provinceField); @@ -87,6 +85,13 @@ var loading = form.querySelector("#loading"); var btnContainer = form.querySelector("#add-footer"); +document.addEventListener("DOMContentLoaded", function () { + initMap(); + if (provinceField.value !== "") { + getRegencies(provinceField.value); + } +}); + function getRegencies(provinceId) { regencyContainer.style.display = "none"; districtContainer.style.display = "none"; diff --git a/public/assets/js/pages/customJs/master-data/lahan/index.js b/public/assets/js/pages/customJs/master-data/lahan/index.js index 31024c5..d1ad33a 100644 --- a/public/assets/js/pages/customJs/master-data/lahan/index.js +++ b/public/assets/js/pages/customJs/master-data/lahan/index.js @@ -1,390 +1,3 @@ -var mapEdit; -var currentMarkerEdit = null; - -var formEdit = document.getElementById("edit-form"); - -var regencyEditContainer = formEdit.querySelector("#regency-edit-container"); -var regencyEditField = formEdit.querySelector("#regency-edit-field"); -var regencyEditVal = new Choices(regencyEditField, { - shouldSort: false, -}); - -var districtEditContainer = formEdit.querySelector("#district-edit-container"); -var districtEditField = formEdit.querySelector("#district-edit-field"); -var districtEditVal = new Choices(districtEditField, { - shouldSort: false, -}); - -var addressEditContainer = formEdit.querySelector("#address-edit-container"); -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 loadingEdit = formEdit.querySelector("#loading-edit"); - -var btnEditContainer = formEdit.querySelector("#edit-footer"); - -document.addEventListener("DOMContentLoaded", function () { - mapEdit = L.map("map-edit", { - attributionControl: false, - }).setView([-8.157416852745705, 113.72281580436439], 16); - - L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { - maxZoom: 19, - }).addTo(mapEdit); - - var iconMarker = L.icon({ - iconUrl: "/assets/images/marker.png", - iconSize: [50, 50], - iconAnchor: [25, 50], - popupAnchor: [0, -50], - }); - - currentMarkerEdit = L.marker([-8.157416852745705, 113.72281580436439], { - icon: iconMarker, - draggable: true, - }) - .addTo(mapEdit) - .bindPopup( - `
Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; - } - } - }, - error: function (xhr, status, error) { - mapEditConatiner.style.display = "block"; - mapEditConatiner.innerHTML = - "Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; - }, - }); -} - -function getDistricts(regencyId) { - districtEditContainer.style.display = "none"; - addressEditContainer.style.display = "none"; - loadingEdit.style.display = "block"; - mapEditConatiner.style.display = "none"; - - const url = "/location/get-district/" + regencyId; - $.ajax({ - url: url, - type: "GET", - success: function (response) { - if (response.success) { - loadingEdit.style.display = "none"; - const data = response.data; - - districtEditVal.clearStore(); - districtEditVal.clearChoices(); - - districtEditVal.value = ""; - districtEditVal.setChoices([ - { - value: "", - label: "Pilih Kecamatan", - selected: true, - disabled: true, - }, - ]); - - if (Array.isArray(data)) { - districtEditVal.setChoices( - data.map((district) => ({ - value: district.id, - label: district.name, - selected: false, - disabled: false, - })) - ); - districtEditContainer.style.display = "block"; - } else { - mapEditConatiner.style.display = "block"; - mapEditConatiner.innerHTML = - "Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; - } - } - }, - error: function (xhr, status, error) { - mapEditConatiner.style.display = "block"; - mapEditConatiner.innerHTML = - "Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; - }, - }); -} - -function showmap(districtId) { - loadingEdit.style.display = "block"; - if (!navigator.geolocation) { - alert("Geolocation tidak didukung oleh browser ini."); - return; - } - - navigator.geolocation.getCurrentPosition( - function (position) { - loadingEdit.style.display = "none"; - - mapEditConatiner.style.display = "block"; - mapEdit.invalidateSize(); - - addressEditContainer.style.display = "block"; - - btnEditContainer.style.display = "block"; - - var lat = position.coords.latitude; - var lng = position.coords.longitude; - - console.log(lat, lng); - - mapEdit.setView([lat, lng], 16); - - if (currentMarkerEdit) { - mapEdit.removeLayer(currentMarkerEdit); - } - - var iconMarker = L.icon({ - iconUrl: "/assets/images/marker.png", - iconSize: [50, 50], - iconAnchor: [25, 50], - popupAnchor: [0, -50], - }); - - currentMarkerEdit = L.marker([lat, lng], { - icon: iconMarker, - draggable: true, - }).addTo(mapEdit); - - currentMarkerEdit.on("dragend", onPointerDragend); - - currentMarkerEdit - .bindPopup( - `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) - ); - - 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
"; - } - } - }, - }); - - addressEditContainer.style.display = "block"; - addressEditField.value = land.address; - - mapEdit.setView([land.latitude, land.longitude], 16); - currentMarkerEdit - .setLatLng([land.latitude, land.longitude]) - .openPopup(); - - 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); - } -} - function deleteData(data) { const landId = data.landId; const userRole = data.role; @@ -573,26 +186,26 @@ var table = document.getElementById("customerTable"), // filterContact("All"), // count++); // }), -editBtn.addEventListener("click", function (e) { - (document.getElementById("exampleModalLabel").innerHTML = "Edit Customer"), - customerList.get({ id: idField.value }).forEach(function (e) { - (isid = new DOMParser().parseFromString(e._values.id, "text/html")), - isid.body.firstElementChild.innerHTML == itemId && - e.values({ - id: - '' + - idField.value + - "", - customer_name: customerNameField.value, - email: emailField.value, - date: dateField.value, - phone: phoneField.value, - status: isStatus(statusField.value), - }); - }), - document.getElementById("close-modal").click(), - clearFields(); -}); +// editBtn.addEventListener("click", function (e) { +// (document.getElementById("exampleModalLabel").innerHTML = "Edit Customer"), +// customerList.get({ id: idField.value }).forEach(function (e) { +// (isid = new DOMParser().parseFromString(e._values.id, "text/html")), +// isid.body.firstElementChild.innerHTML == itemId && +// e.values({ +// id: +// '' + +// idField.value + +// "", +// customer_name: customerNameField.value, +// email: emailField.value, +// date: dateField.value, +// phone: phoneField.value, +// status: isStatus(statusField.value), +// }); +// }), +// document.getElementById("close-modal").click(), +// clearFields(); +// }); function isStatus(e) { switch (e) { case "Active": diff --git a/public/assets/js/pages/customJs/master-data/lahan/update.js b/public/assets/js/pages/customJs/master-data/lahan/update.js new file mode 100644 index 0000000..2fa20d2 --- /dev/null +++ b/public/assets/js/pages/customJs/master-data/lahan/update.js @@ -0,0 +1,490 @@ +var mapEdit, drawnItems, drawControl, googleStreets, iconMarker; +var currentMarkerEdit = null; + +var formEdit = document.getElementById("edit-form"); +var provinceEditField = formEdit.querySelector("#province-edit-field"); +var provinceEditVal = new Choices(provinceEditField); + +var regencyEditContainer = formEdit.querySelector("#regency-edit-container"); +let regencyCode = formEdit.querySelector("#regency-code").dataset.regency; +var regencyEditField = formEdit.querySelector("#regency-edit-field"); +var regencyEditVal = new Choices(regencyEditField, { + shouldSort: false, +}); + +var districtEditContainer = formEdit.querySelector("#district-edit-container"); +let districtCode = formEdit.querySelector("#district-code").dataset.district; +var districtEditField = formEdit.querySelector("#district-edit-field"); +var districtEditVal = new Choices(districtEditField, { + shouldSort: false, +}); + +var addressEditContainer = formEdit.querySelector("#address-edit-container"); +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"); + +let latDb = formEdit.querySelector("#lat-db").dataset.lat; +let lngDb = formEdit.querySelector("#lng-db").dataset.lng; + +var loadingEdit = formEdit.querySelector("#loading-edit"); +var btnEditContainer = formEdit.querySelector("#edit-footer"); + +function initMapEdit() { + mapEdit = L.map("map-edit", { + attributionControl: false, + }).setView([-8.157416852745705, 113.72281580436439], 16); + + googleStreets = L.tileLayer( + "http://{s}.google.com/vt?lyrs=m&x={x}&y={y}&z={z}", + { + maxZoom: 20, + subdomains: ["mt0", "mt1", "mt2", "mt3"], + } + ).addTo(mapEdit); + + iconMarker = L.icon({ + iconUrl: "/assets/images/marker.png", + iconSize: [50, 50], + iconAnchor: [25, 50], + popupAnchor: [0, -50], + }); + + currentMarkerEdit = L.marker([-8.157416852745705, 113.72281580436439], { + icon: iconMarker, + draggable: true, + }) + .addTo(mapEdit) + .bindPopup( + `Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; + } + } + }, + error: function (xhr, status, error) { + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; + }, + }); +} + +function getDistricts(regencyId) { + districtEditContainer.style.display = "none"; + addressEditContainer.style.display = "none"; + loadingEdit.style.display = "block"; + mapEditConatiner.style.display = "none"; + + const url = "/location/get-district/" + regencyId; + $.ajax({ + url: url, + type: "GET", + success: function (response) { + if (response.success) { + loadingEdit.style.display = "none"; + const data = response.data; + + districtEditVal.clearStore(); + districtEditVal.clearChoices(); + + districtEditVal.value = ""; + districtEditVal.setChoices([ + { + value: "", + label: "Pilih Kecamatan", + selected: false, + disabled: true, + }, + ]); + + if (Array.isArray(data)) { + districtEditVal.setChoices( + data.map((district) => ({ + value: district.id, + label: district.name, + selected: district.id == districtCode, + disabled: false, + })) + ); + districtEditContainer.style.display = "block"; + } else { + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; + } + } + }, + error: function (xhr, status, error) { + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi
"; + }, + }); +} + +function showmap(districtId) { + loadingEdit.style.display = "block"; + if (!navigator.geolocation) { + alert("Geolocation tidak didukung oleh browser ini."); + return; + } + + navigator.geolocation.getCurrentPosition( + function (position) { + loadingEdit.style.display = "none"; + + mapEditConatiner.style.display = "block"; + mapEdit.invalidateSize(); + + addressEditContainer.style.display = "block"; + + btnEditContainer.style.display = "block"; + + var lat = position.coords.latitude; + var lng = position.coords.longitude; + + console.log(lat, lng); + + mapEdit.setView([lat, lng], 16); + + if (currentMarkerEdit) { + mapEdit.removeLayer(currentMarkerEdit); + } + + var iconMarker = L.icon({ + iconUrl: "/assets/images/marker.png", + iconSize: [50, 50], + iconAnchor: [25, 50], + popupAnchor: [0, -50], + }); + + currentMarkerEdit = L.marker([lat, lng], { + icon: iconMarker, + draggable: true, + }).addTo(mapEdit); + + currentMarkerEdit.on("dragend", onPointerDragend); + + currentMarkerEdit + .bindPopup( + `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) + ); + + 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
"; + } + } + }, + }); + + addressEditContainer.style.display = "block"; + addressEditField.value = land.address; + + mapEdit.setView([land.latitude, land.longitude], 16); + currentMarkerEdit + .setLatLng([land.latitude, land.longitude]) + .openPopup(); + + 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); + } +} + +function handleDrawCreated(e) { + var layer = e.layer; + drawnItems.addLayer(layer); + var coordinates = layer.getLatLngs()[0]; + console.log("Koordinat Polygon:", coordinates); + polygonField.value = JSON.stringify(coordinates); + + layer.bindPopup("Petak Lahan Berhasil Dibuat!").openPopup(); + btnContainer.style.display = "block"; +} + +function handleDrawEdited(e) { + var layers = e.layers; + layers.eachLayer(function (layer) { + var coordinates = layer.getLatLngs(); + console.log("Koordinat setelah diedit:", coordinates); + polygonField.value = JSON.stringify(coordinates); + + layer.bindPopup("Petak Lahan Berhasil Diedit!").openPopup(); + }); +} + +function onPointerDragend() { + if (!currentMarkerEdit) return; + var coordinates = currentMarkerEdit.getLatLng(); + currentMarkerEdit + .setLatLng(coordinates) + .bindPopup( + `