fix(master-land): fix store function
This commit is contained in:
parent
d1624a4c6d
commit
fa9a30b9f0
|
@ -4,8 +4,10 @@
|
|||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Land;
|
||||
use App\Models\LandDetails;
|
||||
use App\Models\Province;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class LandController extends Controller
|
||||
|
@ -30,26 +32,6 @@ public function store(Request $request)
|
|||
'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',
|
||||
|
||||
|
@ -68,51 +50,52 @@ public function store(Request $request)
|
|||
|
||||
'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 = new Land();
|
||||
$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->land_name = $request->land_name;
|
||||
$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 = new Land();
|
||||
$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();
|
||||
|
||||
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 disimpan', 'success')->position('top-right')->autoclose(3000);
|
||||
return redirect()->back();
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
dd($th->getMessage());
|
||||
toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
|
||||
return redirect()->back();
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class LandDetails extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'land_details';
|
||||
protected $guarded = [];
|
||||
}
|
|
@ -13,12 +13,7 @@ public function up(): void
|
|||
{
|
||||
Schema::create('land', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('land_name');
|
||||
$table->string('owner');
|
||||
$table->string('no_hp');
|
||||
$table->string('rental_price');
|
||||
$table->date('rental_start');
|
||||
$table->date('rental_until');
|
||||
$table->string('province_code');
|
||||
$table->string('regency_code');
|
||||
$table->string('district_code');
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('land_details', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('land_id');
|
||||
$table->string('lat');
|
||||
$table->string('lng');
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::table('land_details', function (Blueprint $table) {
|
||||
$table->foreign('land_id')->references('id')->on('land')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('land_details');
|
||||
}
|
||||
};
|
|
@ -1,7 +1,7 @@
|
|||
var map;
|
||||
var map, drawnItems, drawControl, googleStreets, iconMarker;
|
||||
var currentMarker = null;
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
function initMap() {
|
||||
map = L.map("map", {
|
||||
attributionControl: false,
|
||||
}).setView([-8.157416852745705, 113.72281580436439], 16);
|
||||
|
@ -14,7 +14,7 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
}
|
||||
).addTo(map);
|
||||
|
||||
var iconMarker = L.icon({
|
||||
iconMarker = L.icon({
|
||||
iconUrl: "/assets/images/marker.png",
|
||||
iconSize: [50, 50],
|
||||
iconAnchor: [25, 50],
|
||||
|
@ -27,13 +27,13 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
})
|
||||
.addTo(map)
|
||||
.bindPopup(
|
||||
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan priksa lokasi petamu sudah benar.</div>`
|
||||
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan tentukan petak lahan.<br />Pastikan lokasi anda sudah benar.</div>`
|
||||
);
|
||||
|
||||
var drawnItems = new L.FeatureGroup();
|
||||
drawnItems = new L.FeatureGroup();
|
||||
map.addLayer(drawnItems);
|
||||
|
||||
var drawControl = new L.Control.Draw({
|
||||
drawControl = new L.Control.Draw({
|
||||
draw: {
|
||||
polygon: true, // Izinkan user menggambar polygon
|
||||
polyline: false,
|
||||
|
@ -49,36 +49,15 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
});
|
||||
map.addControl(drawControl);
|
||||
|
||||
// 4️⃣ Event saat user menggambar polygon
|
||||
map.on("draw:created", function (event) {
|
||||
var layer = event.layer;
|
||||
drawnItems.addLayer(layer);
|
||||
var coordinates = layer.getLatLngs();
|
||||
console.log("Koordinat Polygon:", coordinates);
|
||||
alert("Polygon berhasil dibuat! Cek console untuk koordinatnya.");
|
||||
});
|
||||
|
||||
// 5️⃣ Event saat user mengedit polygon
|
||||
map.on("draw:edited", function (event) {
|
||||
var layers = event.layers;
|
||||
layers.eachLayer(function (layer) {
|
||||
var coordinates = layer.getLatLngs();
|
||||
console.log("Koordinat setelah diedit:", coordinates);
|
||||
alert("Polygon berhasil diedit! Cek console untuk koordinatnya.");
|
||||
});
|
||||
});
|
||||
|
||||
// 6️⃣ Event saat user menghapus polygon
|
||||
map.on("draw:deleted", function (event) {
|
||||
alert("Polygon telah dihapus!");
|
||||
});
|
||||
map.on("draw:created", handleDrawCreated);
|
||||
map.on("draw:edited", handleDrawEdited);
|
||||
|
||||
$("#showModal").on("shown.bs.modal", function () {
|
||||
map.invalidateSize();
|
||||
});
|
||||
}
|
||||
|
||||
map.on("click", onMapClick);
|
||||
});
|
||||
document.addEventListener("DOMContentLoaded", initMap);
|
||||
|
||||
var form = document.getElementById("add-form");
|
||||
var provinceField = form.querySelector("#province-field");
|
||||
|
@ -103,19 +82,17 @@ var mapContainer = form.querySelector("#map-container");
|
|||
var latField = form.querySelector("#lat");
|
||||
var lngField = form.querySelector("#lng");
|
||||
|
||||
var polygonField = form.querySelector("#polygon");
|
||||
var loading = form.querySelector("#loading");
|
||||
|
||||
var btnContainer = form.querySelector("#add-footer");
|
||||
|
||||
function getRegencies(provinceId) {
|
||||
regencyContainer.style.display = "none";
|
||||
// regencyEditContainer.style.display = "none";
|
||||
districtContainer.style.display = "none";
|
||||
// districtEditContainer.style.display = "none";
|
||||
addressContainer.style.display = "none";
|
||||
// addressEditContainer.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({
|
||||
|
@ -124,15 +101,11 @@ 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([
|
||||
{
|
||||
|
@ -143,16 +116,6 @@ function getRegencies(provinceId) {
|
|||
},
|
||||
]);
|
||||
|
||||
// regencyEditVal.value = "";
|
||||
// regencyEditVal.setChoices([
|
||||
// {
|
||||
// value: "",
|
||||
// label: "Pilih Kabupaten",
|
||||
// selected: true,
|
||||
// disabled: true,
|
||||
// },
|
||||
// ]);
|
||||
|
||||
if (Array.isArray(data)) {
|
||||
regencyVal.setChoices(
|
||||
data.map((regency) => ({
|
||||
|
@ -163,24 +126,11 @@ function getRegencies(provinceId) {
|
|||
}))
|
||||
);
|
||||
|
||||
// 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 =
|
||||
"<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>";
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -188,10 +138,6 @@ function getRegencies(provinceId) {
|
|||
mapContainer.style.display = "block";
|
||||
mapContainer.innerHTML =
|
||||
"<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>";
|
||||
},
|
||||
});
|
||||
}
|
||||
|
@ -266,8 +212,6 @@ function showmap(districtId) {
|
|||
|
||||
addressContainer.style.display = "block";
|
||||
|
||||
btnContainer.style.display = "block";
|
||||
|
||||
var lat = position.coords.latitude;
|
||||
var lng = position.coords.longitude;
|
||||
|
||||
|
@ -296,7 +240,7 @@ function showmap(districtId) {
|
|||
|
||||
currentMarker
|
||||
.bindPopup(
|
||||
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan priksa lokasi petamu sudah benar.</div>`
|
||||
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan tentukan petak lahan.<br />Pastikan lokasi anda sudah benar.</div>`
|
||||
)
|
||||
.openPopup();
|
||||
|
||||
|
@ -309,28 +253,6 @@ function showmap(districtId) {
|
|||
);
|
||||
}
|
||||
|
||||
function onMapClick(e) {
|
||||
var lat = e.latlng.lat;
|
||||
var lng = e.latlng.lng;
|
||||
|
||||
if (!currentMarker) {
|
||||
currentMarker = L.marker(e.latlng).addTo(map);
|
||||
} else {
|
||||
currentMarker.setLatLng(e.latlng);
|
||||
}
|
||||
|
||||
currentMarker.on("dragend", onPointerDragend);
|
||||
|
||||
currentMarker
|
||||
.bindPopup(
|
||||
`<div class="text-center"><b>Anda berada di sini</b><br />Silahkan priksa lokasi petamu sudah benar.</div>`
|
||||
)
|
||||
.openPopup();
|
||||
|
||||
latField.value = lat;
|
||||
lngField.value = lng;
|
||||
}
|
||||
|
||||
function onPointerDragend() {
|
||||
if (!currentMarker) return;
|
||||
var coordinates = currentMarker.getLatLng();
|
||||
|
@ -345,3 +267,25 @@ function onPointerDragend() {
|
|||
latField.value = coordinates.lat;
|
||||
lngField.value = coordinates.lng;
|
||||
}
|
||||
|
||||
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("<b>Petak Lahan Berhasil Dibuat!</b>").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("<b>Petak Lahan Berhasil Diedit!</b>").openPopup();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -606,6 +606,7 @@ class="form-check-input">
|
|||
<!-- App js -->
|
||||
<script src="{{ asset('assets/js/app.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/jquery/jquery.min.js') }}"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -135,6 +135,11 @@
|
|||
<input type="hidden" name="lng" id="lng" class="form-control"
|
||||
readonly>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<input type="hidden" name="polygon" id="polygon" class="form-control"
|
||||
readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer" id="add-footer" style="display: none">
|
||||
|
|
Loading…
Reference in New Issue