diff --git a/app/Http/Controllers/MasterData/LandController.php b/app/Http/Controllers/MasterData/LandController.php index 423753d..ccb8e2d 100644 --- a/app/Http/Controllers/MasterData/LandController.php +++ b/app/Http/Controllers/MasterData/LandController.php @@ -4,17 +4,35 @@ 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\Auth; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; class LandController extends Controller { public function index() { - $lands = Land::orderBy('created_at', 'desc')->get(); + // $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(); + // return view('master-data.lahan.index', compact('lands', 'province', 'regency', 'district')); + + $lands = Land::with('province', 'regency')->orderBy('created_at', 'desc')->get(); + + return view('master-data.lahan.index', compact('lands')); + } + + public function create() + { $provinces = Province::all(); - return view('master-data.lahan.index', compact('lands', 'provinces')); + return view('master-data.lahan.create', compact('provinces')); } public function store(Request $request) @@ -24,26 +42,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', @@ -62,84 +60,84 @@ 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(); + + if (Auth::user()->role == 'admin') { + return redirect()->route('master_data.lahan.index'); + } + + return redirect()->route('lahan.index'); } catch (\Throwable $th) { - dd($th->getMessage()); + DB::rollBack(); toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000); return redirect()->back(); } } + public function edit($id) + { + $land = Land::with('detailLands')->findOrFail($id); + $provinces = Province::all(); + $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) { + $customMessage = [ 'owner.required' => 'Nama pemilik wajib diisi', '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', @@ -158,51 +156,64 @@ public function update(Request $request, $id) '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 (isset($polygon[0])) { + // $polygon = $polygon[0]; // Ambil array pertama jika ada + // } + if ($validator->fails()) { toast($validator->messages()->all()[0], 'error')->position('top')->autoclose(3000); return redirect()->back()->withInput(); } - $land = Land::find($id); - $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; - + DB::beginTransaction(); 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(); + + 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); - return redirect()->back(); + + if (Auth::user()->role == 'admin') { + return redirect()->route('master_data.lahan.index'); + } + + return redirect()->route('lahan.index'); } catch (\Throwable $th) { + DB::rollBack(); + dd($th->getMessage()); toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000); return redirect()->back(); } diff --git a/app/Models/Land.php b/app/Models/Land.php index 68e0511..075fd65 100644 --- a/app/Models/Land.php +++ b/app/Models/Land.php @@ -11,4 +11,24 @@ class Land extends Model protected $table = 'land'; protected $guarded = []; + + public function detailLands() + { + return $this->hasMany(LandDetails::class, 'land_id', 'id'); + } + + public function province() + { + return $this->belongsTo(Province::class, 'province_code', 'id'); + } + + public function regency() + { + return $this->belongsTo(Regency::class, 'regency_code', 'id'); + } + + public function district() + { + return $this->belongsTo(District::class, 'district_code', 'id'); + } } diff --git a/app/Models/LandDetails.php b/app/Models/LandDetails.php new file mode 100644 index 0000000..c59c232 --- /dev/null +++ b/app/Models/LandDetails.php @@ -0,0 +1,14 @@ +hasMany(Regency::class); + } + + public function regency() + { + return $this->hasOne(Regency::class); + } } diff --git a/app/Models/Regency.php b/app/Models/Regency.php index 7700c49..3779c8d 100644 --- a/app/Models/Regency.php +++ b/app/Models/Regency.php @@ -11,4 +11,14 @@ class Regency extends Model protected $table = 'regencies'; protected $guarded = []; + + public function districts() + { + return $this->hasMany(District::class); + } + + public function district() + { + return $this->hasOne(District::class); + } } diff --git a/database/migrations/2025_01_28_065420_create_land_table.php b/database/migrations/2025_01_28_065420_create_land_table.php index 1a78859..b287d21 100644 --- a/database/migrations/2025_01_28_065420_create_land_table.php +++ b/database/migrations/2025_01_28_065420_create_land_table.php @@ -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'); diff --git a/database/migrations/2025_01_28_065521_create_land_details_table.php b/database/migrations/2025_01_28_065521_create_land_details_table.php new file mode 100644 index 0000000..b5f35a3 --- /dev/null +++ b/database/migrations/2025_01_28_065521_create_land_details_table.php @@ -0,0 +1,34 @@ +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'); + } +}; diff --git a/leafletDrawer.html b/leafletDrawer.html new file mode 100644 index 0000000..11a5bd9 --- /dev/null +++ b/leafletDrawer.html @@ -0,0 +1,90 @@ + + + + + + Leaflet Draw Polygon + + + + + + + + + + + + + +
+ + + + diff --git a/public/assets/js/pages/customJs/master-data/lahan/create.js b/public/assets/js/pages/customJs/master-data/lahan/create.js new file mode 100644 index 0000000..38bba45 --- /dev/null +++ b/public/assets/js/pages/customJs/master-data/lahan/create.js @@ -0,0 +1,296 @@ +var map, drawnItems, drawControl, googleStreets, iconMarker; +var currentMarker = null; + +function initMap() { + map = L.map("map", { + 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(map); + + iconMarker = L.icon({ + iconUrl: "/assets/images/marker.png", + iconSize: [50, 50], + iconAnchor: [25, 50], + popupAnchor: [0, -50], + }); + + currentMarker = L.marker([-8.157416852745705, 113.72281580436439], { + icon: iconMarker, + draggable: true, + }) + .addTo(map) + .bindPopup( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ); + + drawnItems = new L.FeatureGroup(); + map.addLayer(drawnItems); + + drawControl = new L.Control.Draw({ + draw: { + polygon: true, // Izinkan user menggambar polygon + polyline: false, + rectangle: false, + circle: false, + marker: false, + circlemarker: false, + }, + edit: { + featureGroup: drawnItems, // Edit hanya objek yang sudah digambar + remove: true, // Izinkan menghapus objek + }, + }); + map.addControl(drawControl); + + map.on("draw:created", handleDrawCreated); + map.on("draw:edited", handleDrawEdited); + + $("#showModal").on("shown.bs.modal", function () { + map.invalidateSize(); + }); +} + +var form = document.getElementById("add-form"); +var provinceField = form.querySelector("#province-field"); +var provinceVal = new Choices(provinceField); + +var regencyContainer = form.querySelector("#regency-container"); +var regencyField = form.querySelector("#regency-field"); +var regencyVal = new Choices(regencyField, { + shouldSort: false, +}); + +var districtContainer = form.querySelector("#district-container"); +var districtField = form.querySelector("#district-field"); +var districtVal = new Choices(districtField, { + shouldSort: false, +}); + +var addressContainer = form.querySelector("#address-container"); +var addressField = form.querySelector("#address-field"); + +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"); + +document.addEventListener("DOMContentLoaded", function () { + initMap(); + if (provinceField.value !== "") { + getRegencies(provinceField.value); + } +}); + +function getRegencies(provinceId) { + regencyContainer.style.display = "none"; + districtContainer.style.display = "none"; + addressContainer.style.display = "none"; + loading.style.display = "block"; + mapContainer.style.display = "none"; + + const url = "/location/get-regency/" + provinceId; + $.ajax({ + url: url, + type: "GET", + success: function (response) { + if (response.success) { + loading.style.display = "none"; + const data = response.data; + + regencyVal.clearStore(); + regencyVal.clearChoices(); + + regencyVal.value = ""; + regencyVal.setChoices([ + { + value: "", + label: "Pilih Kabupaten", + selected: true, + disabled: true, + }, + ]); + + if (Array.isArray(data)) { + regencyVal.setChoices( + data.map((regency) => ({ + value: regency.id, + label: regency.name, + selected: false, + disabled: false, + })) + ); + + regencyContainer.style.display = "block"; + } else { + mapContainer.style.display = "block"; + mapContainer.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + } + } + }, + error: function (xhr, status, error) { + mapContainer.style.display = "block"; + mapContainer.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + }, + }); +} + +function getDistricts(regencyId) { + districtContainer.style.display = "none"; + addressContainer.style.display = "none"; + loading.style.display = "block"; + mapContainer.style.display = "none"; + + const url = "/location/get-district/" + regencyId; + $.ajax({ + url: url, + type: "GET", + success: function (response) { + if (response.success) { + loading.style.display = "none"; + const data = response.data; + + districtVal.clearStore(); + districtVal.clearChoices(); + + districtVal.value = ""; + districtVal.setChoices([ + { + value: "", + label: "Pilih Kecamatan", + selected: true, + disabled: true, + }, + ]); + + if (Array.isArray(data)) { + districtVal.setChoices( + data.map((district) => ({ + value: district.id, + label: district.name, + selected: false, + disabled: false, + })) + ); + + districtContainer.style.display = "block"; + } else { + mapContainer.style.display = "block"; + mapContainer.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + } + } + }, + error: function (xhr, status, error) { + mapContainer.style.display = "block"; + mapContainer.innerHTML = + "

Terjadi kesalaahan saat mengambil data, silahkan coba beberapa saat lagi

"; + }, + }); +} + +function showmap(districtId) { + loading.style.display = "block"; + if (!navigator.geolocation) { + alert("Geolocation tidak didukung oleh browser ini."); + return; + } + + navigator.geolocation.getCurrentPosition( + function (position) { + loading.style.display = "none"; + + mapContainer.style.display = "block"; + map.invalidateSize(); + + addressContainer.style.display = "block"; + + var lat = position.coords.latitude; + var lng = position.coords.longitude; + + map.setView([lat, lng], 16); + + if (currentMarker) { + map.removeLayer(currentMarker); + } + if (currentMarker || currentMarkerEdit) { + map.removeLayer(currentMarker); + } + + var iconMarker = L.icon({ + iconUrl: "/assets/images/marker.png", + iconSize: [50, 50], + iconAnchor: [25, 50], + popupAnchor: [0, -50], + }); + + currentMarker = L.marker([lat, lng], { + icon: iconMarker, + draggable: true, + }).addTo(map); + + currentMarker.on("dragend", onPointerDragend); + + currentMarker + .bindPopup( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ) + .openPopup(); + + latField.value = lat; + lngField.value = lng; + }, + function (error) { + alert("Error: " + error.message); + } + ); +} + +function onPointerDragend() { + if (!currentMarker) return; + var coordinates = currentMarker.getLatLng(); + + currentMarker + .setLatLng(coordinates) + .bindPopup( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ) + .openPopup(); + + 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("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(); + }); +} 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 b189f0b..1a6ea78 100644 --- a/public/assets/js/pages/customJs/master-data/lahan/index.js +++ b/public/assets/js/pages/customJs/master-data/lahan/index.js @@ -1,537 +1,3 @@ -var map, mapEdit; -var currentMarker = null; -var 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); - -var regencyContainer = form.querySelector("#regency-container"); -var regencyField = form.querySelector("#regency-field"); -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 addressContainer = form.querySelector("#address-container"); -var addressField = form.querySelector("#address-field"); - -var addressEditContainer = formEdit.querySelector("#address-edit-container"); -var addressEditField = formEdit.querySelector("#address-edit-field"); - -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", { - attributionControl: false, - }).setView([-8.157416852745705, 113.72281580436439], 16); - - 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(map); - - 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], - }); - - currentMarker = L.marker([-8.157416852745705, 113.72281580436439], { - icon: iconMarker, - draggable: true, - }) - .addTo(map) - .bindPopup( - `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` - ); - - 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(); - }); - - $("#editModal").on("shown.bs.modal", function () { - mapEdit.invalidateSize(); - }); - - map.on("click", onMapClick); - mapEdit.on("click", onMapClick); -}); - -function getProvinces(provinceId) { - return new Promise(function (resolve, reject) { - $.ajax({ - url: "/location/get-province", - type: "GET", - success: function (response) { - if (response.success) { - const province = response.data.find( - (province) => province.id == provinceId - ); - - resolve(province); - } else { - reject(new Error("Terjadi kesalahan saat mengambil data")); - } - }, - error: function (xhr, status, error) { - reject(new Error("Terjadi kesalahan saat mengambil data")); - }, - }); - }); -} - -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({ - url: url, - type: "GET", - 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([ - { - value: "", - label: "Pilih Kabupaten", - selected: true, - disabled: true, - }, - ]); - - regencyEditVal.value = ""; - regencyEditVal.setChoices([ - { - value: "", - label: "Pilih Kabupaten", - selected: true, - disabled: true, - }, - ]); - - if (Array.isArray(data)) { - regencyVal.setChoices( - data.map((regency) => ({ - value: regency.id, - label: regency.name, - selected: false, - 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

"; - } - } - }, - error: function (xhr, status, error) { - 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"; - 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-district/" + regencyId; - $.ajax({ - url: url, - type: "GET", - 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([ - { - value: "", - label: "Pilih Kecamatan", - selected: true, - disabled: true, - }, - ]); - - districtEditVal.value = ""; - districtEditVal.setChoices([ - { - value: "", - label: "Pilih Kecamatan", - selected: true, - disabled: true, - }, - ]); - - if (Array.isArray(data)) { - districtVal.setChoices( - data.map((district) => ({ - value: district.id, - label: district.name, - selected: false, - 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

"; - } - } - }, - error: function (xhr, status, error) { - 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 showmap(districtId) { - loading.style.display = "block"; - loadingEdit.style.display = "block"; - if (!navigator.geolocation) { - alert("Geolocation tidak didukung oleh browser ini."); - return; - } - - navigator.geolocation.getCurrentPosition( - function (position) { - loading.style.display = "none"; - loadingEdit.style.display = "none"; - - mapContainer.style.display = "block"; - map.invalidateSize(); - - addressContainer.style.display = "block"; - - mapEditConatiner.style.display = "block"; - mapEdit.invalidateSize(); - - addressEditContainer.style.display = "block"; - - 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) { - map.removeLayer(currentMarker); - } - if (currentMarker || currentMarkerEdit) { - map.removeLayer(currentMarker); - mapEdit.removeLayer(currentMarkerEdit); - } - - var iconMarker = L.icon({ - iconUrl: "/assets/images/marker.png", - iconSize: [50, 50], - iconAnchor: [25, 50], - popupAnchor: [0, -50], - }); - - currentMarker = L.marker([lat, lng], { - icon: iconMarker, - draggable: true, - }).addTo(map); - - currentMarkerEdit = L.marker([lat, lng], { - icon: iconMarker, - draggable: true, - }).addTo(mapEdit); - - currentMarker.on("dragend", onPointerDragend); - currentMarkerEdit.on("dragend", onPointerDragend); - - currentMarker - .bindPopup( - `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` - ) - .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); - } - ); -} - -async function updateData(data) { - const land = data.land; - const userRole = data.role; - - 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); - - let rentalPrice = new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - minimumFractionDigits: 0, - }).format(land.rental_price); - - ownerEditField.value = land.owner; - noHpEditField.value = land.no_hp; - rentalPriceEditField.value = rentalPrice.replace(/Rp\s?/g, "").trim(); - rentalStartEditField.value = land.rental_start; - 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

"; - } - } - }, - }); - - 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; @@ -545,72 +11,6 @@ function deleteData(data) { } } -function onMapClick(e) { - var lat = e.latlng.lat; - var lng = e.latlng.lng; - - if (!currentMarker || !currentMarkerEdit) { - currentMarker = L.marker(e.latlng).addTo(map); - currentMarkerEdit = L.marker(e.latlng).addTo(mapEdit); - } else { - currentMarker.setLatLng(e.latlng); - currentMarkerEdit.setLatLng(e.latlng); - } - - currentMarker.on("dragend", onPointerDragend); - currentMarkerEdit.on("dragend", onPointerDragend); - - currentMarker - .bindPopup( - `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` - ) - .openPopup(); - - currentMarkerEdit - .bindPopup( - `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` - ) - .openPopup(); - - latField.value = lat; - lngField.value = lng; -} - -function onPointerDragend() { - if (!currentMarker) return; - var coordinates = currentMarker.getLatLng(); - currentMarker - .setLatLng(coordinates) - .bindPopup( - `
Anda berada di sini
Silahkan priksa lokasi petamu sudah benar.
` - ) - .openPopup(); - - latField.value = coordinates.lat; - lngField.value = coordinates.lng; -} - -function validatePhoneNumber(input) { - input.value = input.value.replace(/\D/g, ""); - - if (input.value.length < 10 || input.value.length > 13) { - input.setCustomValidity("Nomor telepon tidak valid"); - } else { - input.setCustomValidity(""); - } -} - -function validatePrice(input) { - let value = input.value.replace(/\D/g, ""); - let formatted = new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - minimumFractionDigits: 0, - }).format(value); - - input.value = formatted.replace("Rp", "").trim(); -} - var checkAll = document.getElementById("checkAll"); checkAll && (checkAll.onclick = function () { @@ -722,67 +122,55 @@ function updateList() { })), userList.update(); } -filterContact("All"), - ischeckboxcheck(), - document - .getElementById("showModal") - .addEventListener("hidden.bs.modal", function () { - clearFields(); - }), - document - .querySelector("#customerList") - .addEventListener("click", function () { - ischeckboxcheck(); - }); +filterContact("All"), ischeckboxcheck(), document.getElementById("showModal"); +document.querySelector("#customerList").addEventListener("click", function () { + ischeckboxcheck(); +}); var table = document.getElementById("customerTable"), tr = table.getElementsByTagName("tr"), trlist = table.querySelectorAll(".list tr"), count = Number(isValue.replace(/[^0-9]/g, "")) + 1; -addBtn.addEventListener("click", function (e) { - "" !== customerNameField.value && - "" !== emailField.value && - "" !== dateField.value && - "" !== phoneField.value && - (customerList.add({ - id: - '#VZ' + - count + - "", - customer_name: customerNameField.value, - email: emailField.value, - date: dateField.value, - phone: phoneField.value, - status: isStatus(statusField.value), - }), - document.getElementById("close-modal").click(), - clearFields(), - 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(); - }); +// addBtn.addEventListener("click", function (e) { +// "" !== customerNameField.value && +// "" !== emailField.value && +// "" !== dateField.value && +// "" !== phoneField.value && +// (customerList.add({ +// id: +// '#VZ' + +// count + +// "", +// customer_name: customerNameField.value, +// email: emailField.value, +// date: dateField.value, +// phone: phoneField.value, +// status: isStatus(statusField.value), +// }), +// document.getElementById("close-modal").click(), +// clearFields(), +// 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(); +// }); 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..c2df7fd --- /dev/null +++ b/public/assets/js/pages/customJs/master-data/lahan/update.js @@ -0,0 +1,372 @@ +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"); +var polygonField = formEdit.querySelector("#polygon-edit"); + +let latDb = formEdit.querySelector("#lat-db").dataset.lat; +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 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( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ); + + drawnItems = new L.FeatureGroup(); + mapEdit.addLayer(drawnItems); + + drawControl = new L.Control.Draw({ + draw: { + polygon: true, // Izinkan user menggambar polygon + polyline: false, + rectangle: false, + circle: false, + marker: false, + circlemarker: false, + }, + edit: { + featureGroup: drawnItems, // Edit hanya objek yang sudah digambar + remove: true, // Izinkan menghapus objek + }, + }); + mapEdit.addControl(drawControl); + + mapEdit.on("draw:created", handleDrawCreated); + mapEdit.on("draw:edited", handleDrawEdited); + mapEdit.on("draw:deleted", handleDrawDeleted); + mapEdit.invalidateSize(); +} + +document.addEventListener("DOMContentLoaded", function () { + initMapEdit(); + getRegencies(provinceEditField.value); + getDistricts(regencyCode); + setMapEdit(); +}); + +function getProvinces(provinceId) { + return new Promise(function (resolve, reject) { + $.ajax({ + url: "/location/get-province", + type: "GET", + success: function (response) { + if (response.success) { + const province = response.data.find( + (province) => province.id == provinceId + ); + + resolve(province); + } else { + reject(new Error("Terjadi kesalahan saat mengambil data")); + } + }, + error: function (xhr, status, error) { + reject(new Error("Terjadi kesalahan saat mengambil data")); + }, + }); + }); +} + +function getRegencies(provinceId) { + regencyEditContainer.style.display = "none"; + districtEditContainer.style.display = "none"; + addressEditContainer.style.display = "none"; + loadingEdit.style.display = "block"; + mapEditConatiner.style.display = "none"; + + const url = "/location/get-regency/" + provinceId; + $.ajax({ + url: url, + type: "GET", + success: function (response) { + if (response.success) { + loadingEdit.style.display = "none"; + const data = response.data; + + regencyEditVal.clearStore(); + regencyEditVal.clearChoices(); + + regencyEditVal.value = ""; + regencyEditVal.setChoices([ + { + value: "", + label: "Pilih Kabupaten", + selected: false, + disabled: true, + }, + ]); + + if (Array.isArray(data)) { + regencyEditVal.setChoices( + data.map((regency) => ({ + value: regency.id, + label: regency.name, + selected: regency.id == regencyCode, + disabled: false, + })) + ); + regencyEditContainer.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 getDistricts(regencyId) { + districtEditContainer.style.display = "none"; + addressEditContainer.style.display = "none"; + loadingEdit.style.display = "block"; + mapEditConatiner.style.display = "none"; + handleDrawDeleted(); + + 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( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ) + .openPopup(); + + latEditField.value = lat; + lngEditField.value = lng; + }, + function (error) { + alert("Error: " + error.message); + } + ); +} + +function setMapEdit() { + loadingEdit.style.display = "block"; + + mapEditConatiner.style.display = "block"; + mapEdit.invalidateSize(); + addressEditContainer.style.display = "block"; + btnEditContainer.style.display = "block"; + 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) { + mapEdit.removeLayer(currentMarkerEdit); + } + + var iconMarker = L.icon({ + iconUrl: "/assets/images/marker.png", + iconSize: [50, 50], + iconAnchor: [25, 50], + popupAnchor: [0, -50], + }); + + currentMarkerEdit = L.marker([latDb, lngDb], { + icon: iconMarker, + draggable: true, + }).addTo(mapEdit); + + currentMarkerEdit.on("dragend", onPointerDragend); + + currentMarkerEdit + .bindPopup( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ) + .openPopup(); +} + +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(); + btnEditContainer.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 handleDrawDeleted(e) { + drawnItems.clearLayers(); + polygonField.value = ""; +} + +function onPointerDragend() { + if (!currentMarkerEdit) return; + var coordinates = currentMarkerEdit.getLatLng(); + currentMarkerEdit + .setLatLng(coordinates) + .bindPopup( + `
Anda berada di sini
Silahkan tentukan petak lahan.
Pastikan lokasi anda sudah benar.
` + ) + .openPopup(); + + latEditField.value = coordinates.lat; + lngEditField.value = coordinates.lng; +} diff --git a/public/assets/js/plugins.js b/public/assets/js/plugins.js index e8ec6ae..c407f01 100644 --- a/public/assets/js/plugins.js +++ b/public/assets/js/plugins.js @@ -1 +1,12 @@ -(document.querySelectorAll("[toast-list]")||document.querySelectorAll("[data-choices]")||document.querySelectorAll("[data-provider]"))&&(document.writeln("" + ), + document.writeln( + "" + ), + document.writeln( + "" + )); diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 563ee55..7a1b621 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -9,18 +9,18 @@ - + - + - + - + - + - + @stack('other-css') @@ -594,18 +594,19 @@ class="form-check-input"> @include('sweetalert::alert') - - - - - - + + + + + + @stack('other-js') - - + + + diff --git a/resources/views/master-data/lahan/create.blade.php b/resources/views/master-data/lahan/create.blade.php new file mode 100644 index 0000000..51feb05 --- /dev/null +++ b/resources/views/master-data/lahan/create.blade.php @@ -0,0 +1,171 @@ +@extends('layouts.app') +@push('title', 'Tambah Data Lahan') +@section('content') + @push('other-css') + + + + + + + @endpush +
+
+ +
+
+
+

Tambah Data Lahan

+ +
+ +
+ +
+
+
+ + +
+
+
+
+

Tambah Data Lahan

+
+
+
+ @csrf + + +
+
+
+
+
+
+
+ + @push('other-js') + + + + + + + + + @endpush +@endsection diff --git a/resources/views/master-data/lahan/edit.blade.php b/resources/views/master-data/lahan/edit.blade.php new file mode 100644 index 0000000..1a33e19 --- /dev/null +++ b/resources/views/master-data/lahan/edit.blade.php @@ -0,0 +1,181 @@ +@extends('layouts.app') +@push('title', 'Edit Data Lahan') +@section('content') + @push('other-css') + + + + + + + @endpush + +
+
+ +
+
+
+

Edit Data Lahan

+ +
+ +
+ +
+
+
+ + +
+
+
+
+

Edit Data Lahan

+
+
+
+ @csrf + @method('PUT') + + +
+
+
+
+
+
+
+ + @push('other-js') + + + + + + + + + @endpush +@endsection diff --git a/resources/views/master-data/lahan/index.blade.php b/resources/views/master-data/lahan/index.blade.php index d501f49..84d8a7b 100644 --- a/resources/views/master-data/lahan/index.blade.php +++ b/resources/views/master-data/lahan/index.blade.php @@ -1,24 +1,6 @@ @extends('layouts.app') @push('title', 'Data Lahan') @section('content') - @push('other-css') - - - - @endpush
@@ -52,9 +34,10 @@
- + + Tambah
@@ -72,10 +55,8 @@ class="ri-add-line align-bottom me-1"> Tambah No - Nama Lahan Pemilik - Harga Sewa - Lama Sewa + Alamat Action @@ -85,20 +66,19 @@ class="ri-add-line align-bottom me-1"> Tambah {{ $loop->iteration }} #VZ2101 - {{ $land->land_name }} {{ $land->owner }} - Rp.{{ number_format($land->rental_price) }} - {{ \Carbon\Carbon::parse($land->length_of_ease)->diffInDays(\Carbon\Carbon::parse($land->rental_until)) }} - Hari + {{ $land->address }}, Kecamatan + {{ ucwords(strtolower($land->district->name)) }}, + {{ ucwords(strtolower($land->regency->name)) }}, Provinsi + {{ ucwords(strtolower($land->province->name)) }}
- + Edit
- {{-- add modal --}} - - - {{-- edit modal --}} - -