diff --git a/app/Http/Controllers/MasterData/LandController.php b/app/Http/Controllers/MasterData/LandController.php index 01b2d7e..4e896ad 100644 --- a/app/Http/Controllers/MasterData/LandController.php +++ b/app/Http/Controllers/MasterData/LandController.php @@ -110,18 +110,62 @@ public function store(Request $request) public function update(Request $request, $id) { $customMessage = [ - 'name.required' => 'Nama wajib diisi', - 'name.max' => 'Nama maksimal 255 karakter', - 'name.string' => 'Nama harus berupa string', + 'owner.required' => 'Nama pemilik wajib diisi', + 'owner.max' => 'Nama pemilik maksimal 25 karakter', + 'owner.string' => 'Nama pemilik harus berupa string', - 'description.required' => 'Deskripsi wajib diisi', - 'description.max' => 'Deskripsi maksimal 255 karakter', - 'description.string' => 'Deskripsi 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', + + 'regency_id.required' => 'Kota wajib diisi', + 'regency_id.exists' => 'Kota tidak ditemukan', + + 'district_id.required' => 'Kecamatan wajib diisi', + 'district_id.exists' => 'Kecamatan tidak ditemukan', + + 'lat.required' => 'Latitude wajib diisi', + 'lat.numeric' => 'Latitude harus berupa angka', + + 'lng.required' => 'Longitude wajib diisi', + 'lng.numeric' => 'Longitude harus berupa angka', ]; + $request->merge([ + 'rental_price' => str_replace('.', '', $request->rental_price), + ]); + $validator = Validator::make($request->all(), [ - 'land_name' => 'required|string|max:255', - 'description' => 'required|string|max:255', + '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', + 'lat' => 'required|numeric', + 'lng' => 'required|numeric', ], $customMessage); if ($validator->fails()) { @@ -130,8 +174,17 @@ public function update(Request $request, $id) } $land = Land::find($id); - $land->name = $request->land_name; - $land->description = $request->description; + $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->latitude = $request->lat; + $land->longitude = $request->lng; try { $land->save(); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b3e16c6..e6f96b8 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -23,7 +23,7 @@ public function run(): void UsersSeeder::class, ProvinceSeeder::class, RegenciesSeeder::class, - LandSeeder::class, + // LandSeeder::class, IndicatorSeeder::class, RuleSeeder::class ]); 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 01968f4..518b64f 100644 --- a/public/assets/js/pages/customJs/master-data/lahan/index.js +++ b/public/assets/js/pages/customJs/master-data/lahan/index.js @@ -3,6 +3,7 @@ var currentMarker, currentMarkerEdit = null; var form = document.getElementById("add-form"); +var formEdit = document.getElementById("edit-form"); var provinceField = form.querySelector("#province-field"); var provinceVal = new Choices(provinceField); @@ -12,19 +13,37 @@ var regencyVal = new Choices(regencyField, { shouldSort: false, }); +var regencyEditContainer = formEdit.querySelector("#regency-edit-container"); +var regencyEditField = formEdit.querySelector("#regency-edit-field"); +var regencyEditVal = new Choices(regencyEditField, { + shouldSort: false, +}); + var districtContainer = form.querySelector("#district-container"); var districtField = form.querySelector("#district-field"); var districtVal = new Choices(districtField, { shouldSort: false, }); +var districtEditContainer = formEdit.querySelector("#district-edit-container"); +var districtEditField = formEdit.querySelector("#district-edit-field"); +var districtEditVal = new Choices(districtEditField, { + shouldSort: false, +}); + var mapContainer = form.querySelector("#map-container"); var latField = form.querySelector("#lat"); var lngField = form.querySelector("#lng"); +var mapEditConatiner = formEdit.querySelector("#map-edit-container"); +var latEditField = formEdit.querySelector("#lat-edit"); +var lngEditField = formEdit.querySelector("#lng-edit"); + var loading = form.querySelector("#loading"); +var loadingEdit = formEdit.querySelector("#loading-edit"); var btnContainer = form.querySelector("#add-footer"); +var btnEditContainer = formEdit.querySelector("#edit-footer"); document.addEventListener("DOMContentLoaded", function () { map = L.map("map", { @@ -43,6 +62,22 @@ document.addEventListener("DOMContentLoaded", function () { 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( + `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` + ); + $("#showModal").on("shown.bs.modal", function () { map.invalidateSize(); }); @@ -85,16 +120,24 @@ function showmap(districtId) { function (position) { mapContainer.style.display = "block"; map.invalidateSize(); + + mapEditConatiner.style.display = "block"; + mapEdit.invalidateSize(); + btnContainer.style.display = "block"; + btnEditContainer.style.display = "block"; + var lat = position.coords.latitude; var lng = position.coords.longitude; console.log(lat, lng); map.setView([lat, lng], 16); + mapEdit.setView([lat, lng], 16); - if (currentMarker) { + if (currentMarker || currentMarkerEdit) { map.removeLayer(currentMarker); + mapEdit.removeLayer(currentMarkerEdit); } var iconMarker = L.icon({ @@ -109,7 +152,13 @@ function showmap(districtId) { draggable: true, }).addTo(map); + currentMarkerEdit = L.marker([lat, lng], { + icon: iconMarker, + draggable: true, + }).addTo(mapEdit); + currentMarker.on("dragend", onMapDragend); + currentMarkerEdit.on("dragend", onMapDragend); currentMarker .bindPopup( @@ -117,8 +166,17 @@ function showmap(districtId) { ) .openPopup(); + currentMarkerEdit + .bindPopup( + `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` + ) + .openPopup(); + latField.value = lat; lngField.value = lng; + + latEditField.value = lat; + lngEditField.value = lng; }, function (error) { alert("Error: " + error.message); @@ -187,9 +245,13 @@ function getProvinces(provinceId) { function getRegencies(provinceId) { regencyContainer.style.display = "none"; + regencyEditContainer.style.display = "none"; districtContainer.style.display = "none"; + districtEditContainer.style.display = "none"; loading.style.display = "block"; + loadingEdit.style.display = "block"; mapContainer.style.display = "none"; + mapEditConatiner.style.display = "none"; const url = "/location/get-regency/" + provinceId; $.ajax({ @@ -198,11 +260,15 @@ function getRegencies(provinceId) { success: function (response) { if (response.success) { loading.style.display = "none"; + loadingEdit.style.display = "none"; const data = response.data; regencyVal.clearStore(); regencyVal.clearChoices(); + regencyEditVal.clearStore(); + regencyEditVal.clearChoices(); + regencyVal.value = ""; regencyVal.setChoices([ { @@ -213,6 +279,16 @@ function getRegencies(provinceId) { }, ]); + regencyEditVal.value = ""; + regencyEditVal.setChoices([ + { + value: "", + label: "Pilih Kabupaten", + selected: true, + disabled: true, + }, + ]); + if (Array.isArray(data)) { regencyVal.setChoices( data.map((regency) => ({ @@ -222,11 +298,25 @@ function getRegencies(provinceId) { disabled: false, })) ); + + regencyEditVal.setChoices( + data.map((regency) => ({ + value: regency.id, + label: regency.name, + selected: false, + disabled: false, + })) + ); regencyContainer.style.display = "block"; + regencyEditContainer.style.display = "block"; } else { mapContainer.style.display = "block"; mapContainer.innerHTML = "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; } } }, @@ -234,14 +324,21 @@ function getRegencies(provinceId) { mapContainer.style.display = "block"; mapContainer.innerHTML = "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; }, }); } function getDistricts(regencyId) { districtContainer.style.display = "none"; + districtEditContainer.style.display = "none"; loading.style.display = "block"; + loadingEdit.style.display = "block"; mapContainer.style.display = "none"; + mapEditConatiner.style.display = "none"; const url = "/location/get-district/" + regencyId; $.ajax({ @@ -250,11 +347,15 @@ function getDistricts(regencyId) { success: function (response) { if (response.success) { loading.style.display = "none"; + loadingEdit.style.display = "none"; const data = response.data; districtVal.clearStore(); districtVal.clearChoices(); + districtEditVal.clearStore(); + districtEditVal.clearChoices(); + districtVal.value = ""; districtVal.setChoices([ { @@ -265,6 +366,16 @@ function getDistricts(regencyId) { }, ]); + districtEditVal.value = ""; + districtEditVal.setChoices([ + { + value: "", + label: "Pilih Kecamatan", + selected: true, + disabled: true, + }, + ]); + if (Array.isArray(data)) { districtVal.setChoices( data.map((district) => ({ @@ -274,11 +385,24 @@ function getDistricts(regencyId) { disabled: false, })) ); + + districtEditVal.setChoices( + data.map((district) => ({ + value: district.id, + label: district.name, + selected: false, + disabled: false, + })) + ); districtContainer.style.display = "block"; + districtEditContainer.style.display = "block"; } else { mapContainer.style.display = "block"; mapContainer.innerHTML = "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; } } }, @@ -286,24 +410,29 @@ function getDistricts(regencyId) { mapContainer.style.display = "block"; mapContainer.innerHTML = "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + + mapEditConatiner.style.display = "block"; + mapEditConatiner.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; }, }); } async function updateData(land) { - var form = document.getElementById("edit-form"); - var ownerEditField = form.querySelector("#owner-edit-field"); - var noHpEditField = form.querySelector("#nohp-edit-field"); - var rentalPriceEditField = form.querySelector("#rentalprice-edit-field"); - var rentalStartEditField = form.querySelector("#rentalstart-edit-field"); - var rentalUntilEditField = form.querySelector("#rentaluntil-edit-field"); - var landNameEditField = form.querySelector("#landname-edit-field"); - var provinceEditField = form.querySelector("#province-edit-field"); + 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 regencyEditField = form.querySelector("#regency-edit-field"); - var districtEditField = form.querySelector("#district-edit-field"); - var latEditField = form.querySelector("#lat-edit"); - var lngEditField = form.querySelector("#lng-edit"); let rentalPrice = new Intl.NumberFormat("id-ID", { style: "currency", @@ -318,6 +447,104 @@ async function updateData(land) { 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) + ); + + 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

"; + } + } + }, + }); + + $.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

"; + } + } + }, + }); + + mapEdit.setView([land.latitude, land.longitude], 16); + currentMarkerEdit + .setLatLng([land.latitude, land.longitude]) + .openPopup(); + + latEditField.value = land.latitude; + lngEditField.value = land.longitude; + + formEdit.action = "/data-lahan/" + land.id; + } catch (error) { + console.log(error); + } } function deleteData(id) { diff --git a/resources/views/master-data/lahan/index.blade.php b/resources/views/master-data/lahan/index.blade.php index 5f72887..5304be3 100644 --- a/resources/views/master-data/lahan/index.blade.php +++ b/resources/views/master-data/lahan/index.blade.php @@ -9,11 +9,13 @@ #map { height: 200px; width: 100%; + z-index: 0; } #map-edit { height: 200px; width: 100%; + z-index: 0; } @endpush