fix(master-land): fix update function
This commit is contained in:
parent
2c933d6a02
commit
c849014664
|
@ -112,36 +112,23 @@ public function edit($id)
|
||||||
{
|
{
|
||||||
$land = Land::with('detailLands')->findOrFail($id);
|
$land = Land::with('detailLands')->findOrFail($id);
|
||||||
$provinces = Province::all();
|
$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)
|
public function update(Request $request, $id)
|
||||||
{
|
{
|
||||||
|
|
||||||
$customMessage = [
|
$customMessage = [
|
||||||
'owner.required' => 'Nama pemilik wajib diisi',
|
'owner.required' => 'Nama pemilik wajib diisi',
|
||||||
'owner.max' => 'Nama pemilik maksimal 25 karakter',
|
'owner.max' => 'Nama pemilik maksimal 25 karakter',
|
||||||
'owner.string' => 'Nama pemilik harus berupa string',
|
'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.required' => 'Provinsi wajib diisi',
|
||||||
'province_id.exists' => 'Provinsi tidak ditemukan',
|
'province_id.exists' => 'Provinsi tidak ditemukan',
|
||||||
|
|
||||||
|
@ -160,51 +147,54 @@ public function update(Request $request, $id)
|
||||||
|
|
||||||
'lng.required' => 'Longitude wajib diisi',
|
'lng.required' => 'Longitude wajib diisi',
|
||||||
'lng.numeric' => 'Longitude harus berupa angka',
|
'lng.numeric' => 'Longitude harus berupa angka',
|
||||||
];
|
|
||||||
|
|
||||||
$request->merge([
|
'polygon.required' => 'Petak lahan wajib digambar',
|
||||||
'rental_price' => str_replace('.', '', $request->rental_price),
|
];
|
||||||
]);
|
|
||||||
|
|
||||||
$validator = Validator::make($request->all(), [
|
$validator = Validator::make($request->all(), [
|
||||||
'owner' => 'required|string|max:25',
|
'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',
|
'province_id' => 'required|exists:provinces,id',
|
||||||
'regency_id' => 'required|exists:regencies,id',
|
'regency_id' => 'required|exists:regencies,id',
|
||||||
'district_id' => 'required|exists:districts,id',
|
'district_id' => 'required|exists:districts,id',
|
||||||
'address' => 'required|string|max:100',
|
'address' => 'required|string|max:100',
|
||||||
'lat' => 'required|numeric',
|
'lat' => 'required|numeric',
|
||||||
'lng' => 'required|numeric',
|
'lng' => 'required|numeric',
|
||||||
|
'polygon' => 'required',
|
||||||
], $customMessage);
|
], $customMessage);
|
||||||
|
|
||||||
|
$polygon = json_decode($request->polygon, true);
|
||||||
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
toast($validator->messages()->all()[0], 'error')->position('top')->autoclose(3000);
|
toast($validator->messages()->all()[0], 'error')->position('top')->autoclose(3000);
|
||||||
return redirect()->back()->withInput();
|
return redirect()->back()->withInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
$land = Land::find($id);
|
DB::beginTransaction();
|
||||||
$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;
|
|
||||||
|
|
||||||
try {
|
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();
|
$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);
|
toast('Data berhasil diubah', 'success')->position('top-right')->autoclose(3000);
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
|
DB::rollBack();
|
||||||
toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
|
toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,12 @@ var addressEditField = formEdit.querySelector("#address-edit-field");
|
||||||
var mapEditConatiner = formEdit.querySelector("#map-edit-container");
|
var mapEditConatiner = formEdit.querySelector("#map-edit-container");
|
||||||
var latEditField = formEdit.querySelector("#lat-edit");
|
var latEditField = formEdit.querySelector("#lat-edit");
|
||||||
var lngEditField = formEdit.querySelector("#lng-edit");
|
var lngEditField = formEdit.querySelector("#lng-edit");
|
||||||
|
var polygonField = formEdit.querySelector("#polygon-edit");
|
||||||
|
|
||||||
let latDb = formEdit.querySelector("#lat-db").dataset.lat;
|
let latDb = formEdit.querySelector("#lat-db").dataset.lat;
|
||||||
let lngDb = formEdit.querySelector("#lng-db").dataset.lng;
|
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 loadingEdit = formEdit.querySelector("#loading-edit");
|
||||||
var btnEditContainer = formEdit.querySelector("#edit-footer");
|
var btnEditContainer = formEdit.querySelector("#edit-footer");
|
||||||
|
@ -289,6 +292,17 @@ function setMapEdit() {
|
||||||
btnEditContainer.style.display = "block";
|
btnEditContainer.style.display = "block";
|
||||||
mapEdit.setView([latDb, lngDb], 16);
|
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) {
|
if (currentMarkerEdit) {
|
||||||
mapEdit.removeLayer(currentMarkerEdit);
|
mapEdit.removeLayer(currentMarkerEdit);
|
||||||
}
|
}
|
||||||
|
@ -314,144 +328,123 @@ function setMapEdit() {
|
||||||
.openPopup();
|
.openPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateData(data) {
|
// async function updateData(data) {
|
||||||
const land = data.land;
|
// const land = data.land;
|
||||||
const userRole = data.role;
|
// const userRole = data.role;
|
||||||
|
|
||||||
var ownerEditField = formEdit.querySelector("#owner-edit-field");
|
// var ownerEditField = formEdit.querySelector("#owner-edit-field");
|
||||||
var noHpEditField = formEdit.querySelector("#nohp-edit-field");
|
// var provinceEditField = formEdit.querySelector("#province-edit-field");
|
||||||
var rentalPriceEditField = formEdit.querySelector(
|
// var provinceEditVal = new Choices(provinceEditField);
|
||||||
"#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);
|
|
||||||
|
|
||||||
let rentalPrice = new Intl.NumberFormat("id-ID", {
|
// ownerEditField.value = land.owner;
|
||||||
style: "currency",
|
// provinceEditField.value = land.province_code;
|
||||||
currency: "IDR",
|
// try {
|
||||||
minimumFractionDigits: 0,
|
// const province = await getProvinces(land.province_code);
|
||||||
}).format(land.rental_price);
|
// provinceEditVal.setChoices([
|
||||||
|
// {
|
||||||
|
// value: province.id,
|
||||||
|
// label: province.name,
|
||||||
|
// selected: true,
|
||||||
|
// disabled: true,
|
||||||
|
// },
|
||||||
|
// ]);
|
||||||
|
|
||||||
ownerEditField.value = land.owner;
|
// $.ajax({
|
||||||
noHpEditField.value = land.no_hp;
|
// type: "GET",
|
||||||
rentalPriceEditField.value = rentalPrice.replace(/Rp\s?/g, "").trim();
|
// url: "/location/get-regency/" + land.province_code,
|
||||||
rentalStartEditField.value = land.rental_start;
|
// success: function (response) {
|
||||||
rentalUntilEditField.value = land.rental_until;
|
// if (response.success) {
|
||||||
landNameEditField.value = land.land_name;
|
// const dataRegencies = response.data;
|
||||||
provinceEditField.value = land.province_code;
|
// const regencies = response.data.find(
|
||||||
try {
|
// (regency) => regency.id === parseInt(land.regency_code)
|
||||||
const province = await getProvinces(land.province_code);
|
// );
|
||||||
provinceEditVal.setChoices([
|
|
||||||
{
|
|
||||||
value: province.id,
|
|
||||||
label: province.name,
|
|
||||||
selected: true,
|
|
||||||
disabled: true,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
$.ajax({
|
// regencyEditVal.setChoices([
|
||||||
type: "GET",
|
// {
|
||||||
url: "/location/get-regency/" + land.province_code,
|
// value: regencies.id,
|
||||||
success: function (response) {
|
// label: regencies.name,
|
||||||
if (response.success) {
|
// selected: true,
|
||||||
const dataRegencies = response.data;
|
// disabled: true,
|
||||||
const regencies = response.data.find(
|
// },
|
||||||
(regency) => regency.id === parseInt(land.regency_code)
|
// ]);
|
||||||
);
|
|
||||||
|
|
||||||
regencyEditVal.setChoices([
|
// if (Array.isArray(dataRegencies)) {
|
||||||
{
|
// regencyEditVal.setChoices(
|
||||||
value: regencies.id,
|
// dataRegencies.map((regency) => ({
|
||||||
label: regencies.name,
|
// value: regency.id,
|
||||||
selected: true,
|
// label: regency.name,
|
||||||
disabled: true,
|
// 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>";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
if (Array.isArray(dataRegencies)) {
|
// $.ajax({
|
||||||
regencyEditVal.setChoices(
|
// type: "GET",
|
||||||
dataRegencies.map((regency) => ({
|
// url: "/location/get-district/" + land.regency_code,
|
||||||
value: regency.id,
|
// success: function (response) {
|
||||||
label: regency.name,
|
// if (response.success) {
|
||||||
selected: false,
|
// const dataDistricts = response.data;
|
||||||
disabled: false,
|
// const districts = response.data.find(
|
||||||
}))
|
// (district) =>
|
||||||
);
|
// district.id === parseInt(land.district_code)
|
||||||
} 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({
|
// districtEditVal.setChoices([
|
||||||
type: "GET",
|
// {
|
||||||
url: "/location/get-district/" + land.regency_code,
|
// value: districts.id,
|
||||||
success: function (response) {
|
// label: districts.name,
|
||||||
if (response.success) {
|
// selected: true,
|
||||||
const dataDistricts = response.data;
|
// disabled: true,
|
||||||
const districts = response.data.find(
|
// },
|
||||||
(district) =>
|
// ]);
|
||||||
district.id === parseInt(land.district_code)
|
|
||||||
);
|
|
||||||
|
|
||||||
districtEditVal.setChoices([
|
// if (Array.isArray(dataDistricts)) {
|
||||||
{
|
// districtEditVal.setChoices(
|
||||||
value: districts.id,
|
// dataDistricts.map((district) => ({
|
||||||
label: districts.name,
|
// value: district.id,
|
||||||
selected: true,
|
// label: district.name,
|
||||||
disabled: true,
|
// 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>";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
if (Array.isArray(dataDistricts)) {
|
// addressEditContainer.style.display = "block";
|
||||||
districtEditVal.setChoices(
|
// addressEditField.value = land.address;
|
||||||
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>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
addressEditContainer.style.display = "block";
|
// mapEdit.setView([land.latitude, land.longitude], 16);
|
||||||
addressEditField.value = land.address;
|
// currentMarkerEdit
|
||||||
|
// .setLatLng([land.latitude, land.longitude])
|
||||||
|
// .openPopup();
|
||||||
|
|
||||||
mapEdit.setView([land.latitude, land.longitude], 16);
|
// latEditField.value = land.latitude;
|
||||||
currentMarkerEdit
|
// lngEditField.value = land.longitude;
|
||||||
.setLatLng([land.latitude, land.longitude])
|
// polygonField.value = land.polygon;
|
||||||
.openPopup();
|
|
||||||
|
|
||||||
latEditField.value = land.latitude;
|
// if (userRole === "admin") {
|
||||||
lngEditField.value = land.longitude;
|
// formEdit.action = "/data-lahan/" + land.id;
|
||||||
|
// } else {
|
||||||
if (userRole === "admin") {
|
// formEdit.action = "/data-lahan-petugas/" + land.id;
|
||||||
formEdit.action = "/data-lahan/" + land.id;
|
// }
|
||||||
} else {
|
// } catch (error) {
|
||||||
formEdit.action = "/data-lahan-petugas/" + land.id;
|
// console.log(error);
|
||||||
}
|
// }
|
||||||
} catch (error) {
|
// }
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleDrawCreated(e) {
|
function handleDrawCreated(e) {
|
||||||
var layer = e.layer;
|
var layer = e.layer;
|
||||||
|
@ -461,7 +454,7 @@ function handleDrawCreated(e) {
|
||||||
polygonField.value = JSON.stringify(coordinates);
|
polygonField.value = JSON.stringify(coordinates);
|
||||||
|
|
||||||
layer.bindPopup("<b>Petak Lahan Berhasil Dibuat!</b>").openPopup();
|
layer.bindPopup("<b>Petak Lahan Berhasil Dibuat!</b>").openPopup();
|
||||||
btnContainer.style.display = "block";
|
btnEditContainer.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleDrawEdited(e) {
|
function handleDrawEdited(e) {
|
||||||
|
|
|
@ -44,7 +44,8 @@
|
||||||
<h4 class="card-title mb-0">Edit Data Lahan</h4>
|
<h4 class="card-title mb-0">Edit Data Lahan</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<form id="edit-form" action="" method="POST" class="needs-validation" novalidate>
|
<form id="edit-form" action="{{ route('master_data.lahan.update', $land->id) }}" method="POST"
|
||||||
|
class="needs-validation" novalidate>
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
@ -139,15 +140,21 @@
|
||||||
<input type="hidden" name="lng" id="lng-edit" class="form-control"
|
<input type="hidden" name="lng" id="lng-edit" class="form-control"
|
||||||
readonly>
|
readonly>
|
||||||
|
|
||||||
|
<input type="hidden" name="polygon" id="polygon-edit" class="form-control"
|
||||||
|
readonly>
|
||||||
|
|
||||||
<input type="hidden" id="lat-db" data-lat={{ $land->latitude }}>
|
<input type="hidden" id="lat-db" data-lat={{ $land->latitude }}>
|
||||||
<input type="hidden" id="lng-db" data-lng={{ $land->longitude }}>
|
<input type="hidden" id="lng-db" data-lng={{ $land->longitude }}>
|
||||||
|
|
||||||
|
<input type="hidden" id="polygon-db"
|
||||||
|
data-polygon="{{ json_encode($landDetails) }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer" id="edit-footer">
|
<div class="modal-footer" id="edit-footer">
|
||||||
<div class="hstack gap-2 justify-content-end">
|
<div class="hstack gap-2 justify-content-end">
|
||||||
<button type="button" class="btn btn-light"
|
<a href="{{ route('master_data.lahan.index') }}"
|
||||||
data-bs-dismiss="modal">Tutup</button>
|
class="btn btn-light">Kembali</a>
|
||||||
<button type="submit" class="btn btn-success" id="edit-btn">Update</button>
|
<button type="submit" class="btn btn-success" id="edit-btn">Update</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue