fix(master-land): fix function store

This commit is contained in:
arieeefajar 2025-02-15 17:13:18 +07:00
parent ef8b638857
commit 73c1dc43a6
7 changed files with 95 additions and 31 deletions

View File

@ -20,18 +20,62 @@ public function index()
public function store(Request $request)
{
$customMessage = [
'name.required' => 'Nama wajib diisi',
'name.max' => 'Nama maksimal 255 karakter',
'name.string' => 'Nama harus berupa string',
'owner.required' => 'Nama pemilik wajib diisi',
'owner.max' => 'Nama pemilik maksimal 25 karakter',
'owner.string' => 'Nama pemilik harus berupa string',
'description.required' => 'Deskripsi wajib diisi',
'description.max' => 'Deskripsi maksimal 255 karakter',
'description.string' => 'Deskripsi harus berupa string',
'nohp.required' => 'Nomor HP wajib diisi',
'nohp.min' => 'Nomor HP minimal 10 karakter',
'nohp.max' => 'Nomor HP maksimal 13 karakter',
'nohp.string' => 'Nomor HP harus berupa string',
'rental_price.required' => 'Harga sewa wajib diisi',
'rental_price.numeric' => 'Harga sewa harus berupa angka',
'rental_start.required' => 'Tanggal mulai sewa wajib diisi',
'rental_start.date' => 'Tanggal mulai sewa harus berupa tanggal',
'rental_start.after_or_equal' => 'Tanggal mulai sewa harus hari ini atau setelahnya',
'rental_until.required' => 'Tanggal sampai sewa wajib diisi',
'rental_until.date' => 'Tanggal sampai sewa harus berupa tanggal',
'rental_until.after_or_equal' => 'Tanggal sampai sewa harus sama atau lebih besar dari tanggal mulai sewa',
'land_name.required' => 'Nama lahan wajib diisi',
'land_name.max' => 'Nama lahan maksimal 25 karakter',
'land_name.string' => 'Nama lahan harus berupa string',
'province_id.required' => 'Provinsi wajib diisi',
'province_id.exists' => 'Provinsi tidak ditemukan',
'regency_id.required' => 'Kota wajib diisi',
'regency_id.exists' => 'Kota tidak ditemukan',
'district_id.required' => 'Kecamatan wajib diisi',
'district_id.exists' => 'Kecamatan tidak ditemukan',
'lat.required' => 'Latitude wajib diisi',
'lat.numeric' => 'Latitude harus berupa angka',
'lng.required' => 'Longitude wajib diisi',
'lng.numeric' => 'Longitude harus berupa angka',
];
$request->merge([
'rental_price' => str_replace('.', '', $request->rental_price),
]);
$validator = Validator::make($request->all(), [
'land_name' => 'required|string|max:255',
'description' => 'required|string|max:255',
'owner' => 'required|string|max:25',
'nohp' => 'required|string|min:10|max:13',
'rental_price' => 'required|numeric',
'rental_start' => 'required|date|after_or_equal:today',
'rental_until' => 'required|date|after_or_equal:rental_start',
'land_name' => 'required|string|max:25',
'province_id' => 'required|exists:provinces,id',
'regency_id' => 'required|exists:regencies,id',
'district_id' => 'required|exists:districts,id',
'lat' => 'required|numeric',
'lng' => 'required|numeric',
], $customMessage);
if ($validator->fails()) {
@ -40,14 +84,24 @@ public function store(Request $request)
}
$land = new 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->land_name = $request->land_name;
$land->province_code = $request->province_id;
$land->regency_code = $request->regency_id;
$land->district_code = $request->district_id;
$land->latitude = $request->lat;
$land->longitude = $request->lng;
try {
$land->save();
toast('Data berhasil disimpan', 'success')->position('top-right')->autoclose(3000);
return redirect()->back();
} catch (\Throwable $th) {
dd($th->getMessage());
toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
return redirect()->back();
}

View File

@ -10,9 +10,5 @@ class Land extends Model
use HasFactory;
protected $table = 'land';
protected $fillable = [
'name',
'description',
];
protected $guarded = [];
}

View File

@ -22,6 +22,8 @@ public function up(): void
$table->string('province_code');
$table->string('regency_code');
$table->string('district_code');
$table->string('latitude');
$table->string('longitude');
$table->timestamps();
});
}

View File

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

View File

@ -13,15 +13,13 @@ class LandSeeder extends Seeder
*/
public function run(): void
{
[
Land::create([
'name' => 'Land 1',
'description' => 'Land 1 Description',
]),
Land::create([
'name' => 'Land 2',
'description' => 'Land 2 Description',
])
$lands = [
['land_name' => 'Lahan 1', 'owner' => 'Pak Lahan 1', 'no_hp' => '08123456789', 'rental_price' => '2000000', 'rental_start' => '2023-05-01', 'rental_until' => '2023-06-30', 'province_code' => '11', 'regency_code' => '1101', 'district_code' => '110101', 'latitude' => '0.0', 'longitude' => '0.0'],
['land_name' => 'Lahan 2', 'owner' => 'Pak Lahan 2', 'no_hp' => '08123456789', 'rental_price' => '1500000', 'rental_start' => '2023-05-01', 'rental_until' => '2023-06-30', 'province_code' => '11', 'regency_code' => '1101', 'district_code' => '110101', 'latitude' => '0.0', 'longitude' => '0.0'],
];
foreach ($lands as $land) {
Land::create($land);
}
}
}

View File

@ -23,7 +23,7 @@ var lngField = form.querySelector("#lng");
var loading = form.querySelector("#loading");
var btnContainer = form.querySelector("#btn-container");
var btnContainer = form.querySelector("#add-footer");
document.addEventListener("DOMContentLoaded", function () {
// Initialize the first map
@ -53,6 +53,17 @@ function validatePhoneNumber(input) {
}
}
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();
}
function getRegencies(provinceId) {
regencyContainer.style.display = "none";
districtContainer.style.display = "none";
@ -147,6 +158,9 @@ function showmap(districtId) {
`<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 (error) {
alert("Error: " + error.message);

View File

@ -173,7 +173,7 @@ class="fw-medium link-primary">#VZ2101</a></td>
<label for="rentalprice-field" class="form-label">Harga Sewa</label>
<input type="text" id="rentalprice-field" class="form-control"
name="rental_price" value="{{ old('rental_price') }}"
placeholder="Masukan Harga Sewa" required />
placeholder="Masukan Harga Sewa" required oninput="validatePrice(this)" />
<div class="invalid-feedback">
Masukan Harga Sewa
</div>
@ -264,14 +264,14 @@ class="fw-medium link-primary">#VZ2101</a></td>
<div class="mt-3">
<input type="hidden" name="lat" id="lat" class="form-control"
readonly disabled>
readonly>
<input type="hidden" name="lng" id="lng" class="form-control"
readonly disabled>
readonly>
</div>
</div>
</div>
<div class="modal-footer">
<div class="hstack gap-2 justify-content-end" id="btn-container" style="display: none">
<div class="modal-footer" id="add-footer" style="display: none">
<div class="hstack gap-2 justify-content-end">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Tutup</button>
<button type="submit" class="btn btn-success" id="add-btn">Simpan</button>
</div>