fix(master-land): fix function update data

This commit is contained in:
arieeefajar 2025-02-17 18:39:44 +07:00
parent 2e69c62dbc
commit 9277e72471
4 changed files with 306 additions and 24 deletions

View File

@ -110,18 +110,62 @@ public function store(Request $request)
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
$customMessage = [ $customMessage = [
'name.required' => 'Nama wajib diisi', 'owner.required' => 'Nama pemilik wajib diisi',
'name.max' => 'Nama maksimal 255 karakter', 'owner.max' => 'Nama pemilik maksimal 25 karakter',
'name.string' => 'Nama harus berupa string', 'owner.string' => 'Nama pemilik harus berupa string',
'description.required' => 'Deskripsi wajib diisi', 'nohp.required' => 'Nomor HP wajib diisi',
'description.max' => 'Deskripsi maksimal 255 karakter', 'nohp.min' => 'Nomor HP minimal 10 karakter',
'description.string' => 'Deskripsi harus berupa string', '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(), [ $validator = Validator::make($request->all(), [
'land_name' => 'required|string|max:255', 'owner' => 'required|string|max:25',
'description' => 'required|string|max:255', '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); ], $customMessage);
if ($validator->fails()) { if ($validator->fails()) {
@ -130,8 +174,17 @@ public function update(Request $request, $id)
} }
$land = Land::find($id); $land = Land::find($id);
$land->name = $request->land_name; $land->land_name = $request->land_name;
$land->description = $request->description; $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 { try {
$land->save(); $land->save();

View File

@ -23,7 +23,7 @@ public function run(): void
UsersSeeder::class, UsersSeeder::class,
ProvinceSeeder::class, ProvinceSeeder::class,
RegenciesSeeder::class, RegenciesSeeder::class,
LandSeeder::class, // LandSeeder::class,
IndicatorSeeder::class, IndicatorSeeder::class,
RuleSeeder::class RuleSeeder::class
]); ]);

View File

@ -3,6 +3,7 @@ var currentMarker,
currentMarkerEdit = null; currentMarkerEdit = null;
var form = document.getElementById("add-form"); var form = document.getElementById("add-form");
var formEdit = document.getElementById("edit-form");
var provinceField = form.querySelector("#province-field"); var provinceField = form.querySelector("#province-field");
var provinceVal = new Choices(provinceField); var provinceVal = new Choices(provinceField);
@ -12,19 +13,37 @@ var regencyVal = new Choices(regencyField, {
shouldSort: false, 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 districtContainer = form.querySelector("#district-container");
var districtField = form.querySelector("#district-field"); var districtField = form.querySelector("#district-field");
var districtVal = new Choices(districtField, { var districtVal = new Choices(districtField, {
shouldSort: false, 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 mapContainer = form.querySelector("#map-container");
var latField = form.querySelector("#lat"); var latField = form.querySelector("#lat");
var lngField = form.querySelector("#lng"); 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 loading = form.querySelector("#loading");
var loadingEdit = formEdit.querySelector("#loading-edit");
var btnContainer = form.querySelector("#add-footer"); var btnContainer = form.querySelector("#add-footer");
var btnEditContainer = formEdit.querySelector("#edit-footer");
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {
map = L.map("map", { map = L.map("map", {
@ -43,6 +62,22 @@ document.addEventListener("DOMContentLoaded", function () {
maxZoom: 19, maxZoom: 19,
}).addTo(mapEdit); }).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(
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan priksa lokasi petamu sudah benar.</div>`
);
$("#showModal").on("shown.bs.modal", function () { $("#showModal").on("shown.bs.modal", function () {
map.invalidateSize(); map.invalidateSize();
}); });
@ -85,16 +120,24 @@ function showmap(districtId) {
function (position) { function (position) {
mapContainer.style.display = "block"; mapContainer.style.display = "block";
map.invalidateSize(); map.invalidateSize();
mapEditConatiner.style.display = "block";
mapEdit.invalidateSize();
btnContainer.style.display = "block"; btnContainer.style.display = "block";
btnEditContainer.style.display = "block";
var lat = position.coords.latitude; var lat = position.coords.latitude;
var lng = position.coords.longitude; var lng = position.coords.longitude;
console.log(lat, lng); console.log(lat, lng);
map.setView([lat, lng], 16); map.setView([lat, lng], 16);
mapEdit.setView([lat, lng], 16);
if (currentMarker) { if (currentMarker || currentMarkerEdit) {
map.removeLayer(currentMarker); map.removeLayer(currentMarker);
mapEdit.removeLayer(currentMarkerEdit);
} }
var iconMarker = L.icon({ var iconMarker = L.icon({
@ -109,7 +152,13 @@ function showmap(districtId) {
draggable: true, draggable: true,
}).addTo(map); }).addTo(map);
currentMarkerEdit = L.marker([lat, lng], {
icon: iconMarker,
draggable: true,
}).addTo(mapEdit);
currentMarker.on("dragend", onMapDragend); currentMarker.on("dragend", onMapDragend);
currentMarkerEdit.on("dragend", onMapDragend);
currentMarker currentMarker
.bindPopup( .bindPopup(
@ -117,8 +166,17 @@ function showmap(districtId) {
) )
.openPopup(); .openPopup();
currentMarkerEdit
.bindPopup(
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan priksa lokasi petamu sudah benar.</div>`
)
.openPopup();
latField.value = lat; latField.value = lat;
lngField.value = lng; lngField.value = lng;
latEditField.value = lat;
lngEditField.value = lng;
}, },
function (error) { function (error) {
alert("Error: " + error.message); alert("Error: " + error.message);
@ -187,9 +245,13 @@ function getProvinces(provinceId) {
function getRegencies(provinceId) { function getRegencies(provinceId) {
regencyContainer.style.display = "none"; regencyContainer.style.display = "none";
regencyEditContainer.style.display = "none";
districtContainer.style.display = "none"; districtContainer.style.display = "none";
districtEditContainer.style.display = "none";
loading.style.display = "block"; loading.style.display = "block";
loadingEdit.style.display = "block";
mapContainer.style.display = "none"; mapContainer.style.display = "none";
mapEditConatiner.style.display = "none";
const url = "/location/get-regency/" + provinceId; const url = "/location/get-regency/" + provinceId;
$.ajax({ $.ajax({
@ -198,11 +260,15 @@ function getRegencies(provinceId) {
success: function (response) { success: function (response) {
if (response.success) { if (response.success) {
loading.style.display = "none"; loading.style.display = "none";
loadingEdit.style.display = "none";
const data = response.data; const data = response.data;
regencyVal.clearStore(); regencyVal.clearStore();
regencyVal.clearChoices(); regencyVal.clearChoices();
regencyEditVal.clearStore();
regencyEditVal.clearChoices();
regencyVal.value = ""; regencyVal.value = "";
regencyVal.setChoices([ 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)) { if (Array.isArray(data)) {
regencyVal.setChoices( regencyVal.setChoices(
data.map((regency) => ({ data.map((regency) => ({
@ -222,11 +298,25 @@ function getRegencies(provinceId) {
disabled: false, disabled: false,
})) }))
); );
regencyEditVal.setChoices(
data.map((regency) => ({
value: regency.id,
label: regency.name,
selected: false,
disabled: false,
}))
);
regencyContainer.style.display = "block"; regencyContainer.style.display = "block";
regencyEditContainer.style.display = "block";
} else { } else {
mapContainer.style.display = "block"; mapContainer.style.display = "block";
mapContainer.innerHTML = mapContainer.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>"; "<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
mapEditConatiner.style.display = "block";
mapEditConatiner.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
} }
} }
}, },
@ -234,14 +324,21 @@ function getRegencies(provinceId) {
mapContainer.style.display = "block"; mapContainer.style.display = "block";
mapContainer.innerHTML = mapContainer.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>"; "<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
mapEditConatiner.style.display = "block";
mapEditConatiner.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
}, },
}); });
} }
function getDistricts(regencyId) { function getDistricts(regencyId) {
districtContainer.style.display = "none"; districtContainer.style.display = "none";
districtEditContainer.style.display = "none";
loading.style.display = "block"; loading.style.display = "block";
loadingEdit.style.display = "block";
mapContainer.style.display = "none"; mapContainer.style.display = "none";
mapEditConatiner.style.display = "none";
const url = "/location/get-district/" + regencyId; const url = "/location/get-district/" + regencyId;
$.ajax({ $.ajax({
@ -250,11 +347,15 @@ function getDistricts(regencyId) {
success: function (response) { success: function (response) {
if (response.success) { if (response.success) {
loading.style.display = "none"; loading.style.display = "none";
loadingEdit.style.display = "none";
const data = response.data; const data = response.data;
districtVal.clearStore(); districtVal.clearStore();
districtVal.clearChoices(); districtVal.clearChoices();
districtEditVal.clearStore();
districtEditVal.clearChoices();
districtVal.value = ""; districtVal.value = "";
districtVal.setChoices([ 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)) { if (Array.isArray(data)) {
districtVal.setChoices( districtVal.setChoices(
data.map((district) => ({ data.map((district) => ({
@ -274,11 +385,24 @@ function getDistricts(regencyId) {
disabled: false, disabled: false,
})) }))
); );
districtEditVal.setChoices(
data.map((district) => ({
value: district.id,
label: district.name,
selected: false,
disabled: false,
}))
);
districtContainer.style.display = "block"; districtContainer.style.display = "block";
districtEditContainer.style.display = "block";
} else { } else {
mapContainer.style.display = "block"; mapContainer.style.display = "block";
mapContainer.innerHTML = mapContainer.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>"; "<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
mapEditConatiner.style.display = "block";
mapEditConatiner.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
} }
} }
}, },
@ -286,24 +410,29 @@ function getDistricts(regencyId) {
mapContainer.style.display = "block"; mapContainer.style.display = "block";
mapContainer.innerHTML = mapContainer.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>"; "<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
mapEditConatiner.style.display = "block";
mapEditConatiner.innerHTML =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
}, },
}); });
} }
async function updateData(land) { async function updateData(land) {
var form = document.getElementById("edit-form"); var ownerEditField = formEdit.querySelector("#owner-edit-field");
var ownerEditField = form.querySelector("#owner-edit-field"); var noHpEditField = formEdit.querySelector("#nohp-edit-field");
var noHpEditField = form.querySelector("#nohp-edit-field"); var rentalPriceEditField = formEdit.querySelector(
var rentalPriceEditField = form.querySelector("#rentalprice-edit-field"); "#rentalprice-edit-field"
var rentalStartEditField = form.querySelector("#rentalstart-edit-field"); );
var rentalUntilEditField = form.querySelector("#rentaluntil-edit-field"); var rentalStartEditField = formEdit.querySelector(
var landNameEditField = form.querySelector("#landname-edit-field"); "#rentalstart-edit-field"
var provinceEditField = form.querySelector("#province-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 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", { let rentalPrice = new Intl.NumberFormat("id-ID", {
style: "currency", style: "currency",
@ -318,6 +447,104 @@ async function updateData(land) {
rentalUntilEditField.value = land.rental_until; rentalUntilEditField.value = land.rental_until;
landNameEditField.value = land.land_name; landNameEditField.value = land.land_name;
provinceEditField.value = land.province_code; 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 =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
}
}
},
});
$.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 =
"<p class='text-center text-muted'>Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi</p>";
}
}
},
});
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) { function deleteData(id) {

View File

@ -9,11 +9,13 @@
#map { #map {
height: 200px; height: 200px;
width: 100%; width: 100%;
z-index: 0;
} }
#map-edit { #map-edit {
height: 200px; height: 200px;
width: 100%; width: 100%;
z-index: 0;
} }
</style> </style>
@endpush @endpush