update menu penilai lpj dan perbaikan data pembanding

This commit is contained in:
majid
2024-12-06 16:48:31 +07:00
parent e83cd4b167
commit e28d5ff9a4
13 changed files with 654 additions and 337 deletions

View File

@@ -6,6 +6,7 @@
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\JenisDokumen;
function formatTanggalIndonesia($date, $time = false) function formatTanggalIndonesia($date, $time = false)
{ {
@@ -296,3 +297,17 @@
->count(); ->count();
} }
function getMaxFileSize($jenis)
{
$jenisDokumen = JenisDokumen::where('name', $jenis)->first();
if (!$jenisDokumen) {
return 2048;
}
//konversi ke KB (1 MB = 1024 KB)
$maxSizeInKB = (int) $jenisDokumen->max_size * 1024;
return $maxSizeInKB;
}

View File

@@ -9,6 +9,8 @@ use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\KertasKerjaExport; use Modules\Lpj\Exports\KertasKerjaExport;
use App\Http\Controllers\SurveyorController;
class PenilaiController extends Controller class PenilaiController extends Controller
{ {
public $user; public $user;
@@ -54,14 +56,19 @@ class PenilaiController extends Controller
// //
} }
public function sederhana() public function sederhana($id)
{ {
return view('lpj::laporan.sederhana_index'); $data = new SurveyorController();
$basicData = $data->getCommonData();
$permohonan = Permohonan::with(['debiture.documents.jenisjaminan', 'region.teams.teamsUsers.user', 'penilaian'])->find($id);
return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'basicData'));
} }
public function standard() public function standard($id)
{ {
return view('lpj::laporan.standard_index'); $permohonan = Permohonan::with(['debiture.documents.jenisjaminan', 'region.teams.teamsUsers.user', 'penilaian'])->find($id);
return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan'));
} }
public function resume(){ public function resume(){

View File

@@ -62,7 +62,6 @@ use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\JenisKapal; use Modules\Lpj\Models\JenisKapal;
use Modules\Lpj\Models\JenisKendaraan; use Modules\Lpj\Models\JenisKendaraan;
use Modules\Lpj\Models\RuteJaminan; use Modules\Lpj\Models\RuteJaminan;
use Modules\Lpj\Models\HubunganPemilikJaminan; use Modules\Lpj\Models\HubunganPemilikJaminan;
use Modules\Lpj\Models\HubunganPenghuniJaminan; use Modules\Lpj\Models\HubunganPenghuniJaminan;
use Modules\Lpj\Models\AnalisaUnit; use Modules\Lpj\Models\AnalisaUnit;
@@ -216,8 +215,9 @@ class SurveyorController extends Controller
public function storeDenah(Request $request) public function storeDenah(Request $request)
{ {
try { try {
$maxSize = getMaxFileSize('Foto');
$validatedData = $request->validate([ $validatedData = $request->validate([
'foto_denah' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_denah' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'luas' => 'required|numeric', 'luas' => 'required|numeric',
'permohonan_id' => 'required', 'permohonan_id' => 'required',
'jenis_jaminan_id' => 'required' 'jenis_jaminan_id' => 'required'
@@ -381,26 +381,27 @@ class SurveyorController extends Controller
*/ */
public function validateFotoRequest(Request $request) public function validateFotoRequest(Request $request)
{ {
$maxSize = getMaxFileSize('Foto');
return $request->validate([ return $request->validate([
'permohonan_id' => 'required', 'permohonan_id' => 'required',
'jenis_jaminan_id' => 'required', 'jenis_jaminan_id' => 'required',
'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_objek.*' => 'required|string|max:255', 'name_objek.*' => 'required|string|max:255',
'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_lingkungan.*' => 'required|string|max:255', 'name_lingkungan.*' => 'required|string|max:255',
'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_rute.*' => 'required|string|max:255', 'name_rute.*' => 'required|string|max:255',
'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_lantai_unit.*' => 'nullable|string|max:255', 'name_lantai_unit.*' => 'nullable|string|max:255',
'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_rute_lainnya.*' => 'nullable|string', 'name_rute_lainnya.*' => 'nullable|string',
'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_lantai_lainnya.*' => 'nullable|string|max:255', 'name_lantai_lainnya.*' => 'nullable|string|max:255',
'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_basement.*' => 'nullable|string|max:255', 'name_basement.*' => 'nullable|string|max:255',
'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'name_gerbang' => 'nullable|string|max:255', 'name_gerbang' => 'nullable|string|max:255',
]); ]);
} }
@@ -555,7 +556,8 @@ class SurveyorController extends Controller
} }
public function storeFreeze() { public function storeFreeze()
{
} }
@@ -563,105 +565,124 @@ class SurveyorController extends Controller
private function formatDataPembanding($request) private function formatDataPembanding($request)
{ {
$dataPembanding = []; $dataPembanding = [];
$pembandingCount = count($request->input('alamat_pembanding', [])); $pembandingCount = count($request->input('address_pembanding', []));
$fotoPembanding = $request->file('foto_objek_pembanding') ?? [];
for ($i = 0; $i < $pembandingCount; $i++) { for ($i = 0; $i < $pembandingCount; $i++) {
$pembanding = $this->formatSinglePembanding($request, $i); $pembanding = $this->formatSinglePembanding($request, $i);
// Perbaikan penanganan foto pembanding // Penanganan foto pembanding
$fotoKey = "foto_objek_pembanding_{$i}"; // Sesuaikan dengan nama field di form if (isset($fotoPembanding[$i]) && $fotoPembanding[$i]->isValid()) {
if ($request->hasFile($fotoKey)) { $pembanding['foto_objek'] = $this->handleupdateOrDeleteFile(
$pembanding['foto_objek'] = $this->handleFileUpload( $fotoPembanding[$i],
$request->file($fotoKey),
'pembanding', 'pembanding',
"pembanding_{$i}" "pembanding_{$i}"
); );
} }
$dataPembanding[] = $pembanding; $dataPembanding[] = $pembanding;
} }
return $dataPembanding; return $dataPembanding;
} }
private function handleFileUpload($file, $folder, $prefix) private function handleupdateOrDeleteFile($file, $type, $prefix)
{ {
if (!$file) { try {
return null; if ($file) {
} // Generate nama file unik
$fileName = $prefix . '_' . uniqid() . '_' . time() . '.' . $file->getClientOriginalExtension();
try { $path = "{$type}/" . date('Y/m');
// Buat nama file yang unik Storage::makeDirectory("public/{$path}");
$extension = $file->getClientOriginalExtension(); $filePath = $file->storeAs("public/{$path}", $fileName);
$fileName = $prefix . '_' . time() . '_' . uniqid() . '.' . $extension; return str_replace('public/', '', $filePath);
// Pastikan folder exists
$path = storage_path("app/public/{$folder}");
if (!File::exists($path)) {
File::makeDirectory($path, 0777, true);
}
// Simpan file
$file->storeAs("public/{$folder}", $fileName);
// Log untuk debugging
\Log::info("File berhasil disimpan: {$folder}/{$fileName}");
return $fileName;
} catch (\Exception $e) {
\Log::error("Error saat upload file: " . $e->getMessage());
throw $e;
} }
return null;
} catch (\Exception $e) {
\Log::error('File upload error: ' . $e->getMessage());
throw new \Exception("Gagal mengupload file: " . $e->getMessage());
} }
}
private function formatSinglePembanding($request, $index) private function formatSinglePembanding($request, $index)
{ {
$fields = [ $fields = [
'alamat', 'desa', 'kecamatan', 'kabupaten', 'provinsi', 'address', 'village_code', 'district_code', 'city_code', 'province_code',
'tahun', 'luas_tanah', 'luas_bangunan', 'tahun_bangunan',
'status_nara_sumber', 'harga', 'harga_diskon', 'diskon','total','nama_nara_sumber',
'peruntukan', 'penawaran_transaksi', 'nomor_tlp',
'kordinat_lat', 'kordinat_lng', 'jenis_aset',
];
$pembanding = [];
foreach ($fields as $field) {
$inputName = "{$field}_pembanding";
$pembanding[$field] = $request->input($inputName)[$index] ?? null;
}
// Inisialisasi foto_objek sebagai null
$pembanding['foto_objek'] = null;
return $pembanding;
}
private function formatObjekPenilaian($request)
{
$fields = [
'address', 'village_code', 'district_code', 'city_code', 'province_code',
'tahun', 'luas_tanah', 'luas_bangunan', 'tahun_bangunan', 'tahun', 'luas_tanah', 'luas_bangunan', 'tahun_bangunan',
'status_nara_sumber', 'harga', 'nama_nara_sumber', 'status_nara_sumber', 'harga', 'nama_nara_sumber',
'peruntukan', 'penawaran_transaksi', 'nomor_tlp', 'peruntukan', 'penawaran_transaksi', 'nomor_tlp',
'kordinat_lat', 'kordinat_lng', 'jenis_aset', 'kordinat_lat', 'kordinat_lng', 'jenis_aset',
]; ];
$pembanding = []; $objekPenilaian = array_reduce($fields, function ($carry, $field) use ($request) {
foreach ($fields as $field) { $carry[$field] = $request->input($field);
$inputName = "{$field}_pembanding"; return $carry;
$pembanding[$field] = $request->input($inputName)[$index] ?? null; }, ['foto_objek' => null]);
}
// Inisialisasi foto_objek sebagai null return $objekPenilaian;
$pembanding['foto_objek'] = null;
return $pembanding;
} }
private function saveInspeksi($formattedData)
{
$inspeksi = Inspeksi::updateOrCreate(
[
'permohonan_id' => $formattedData['permohonan_id'],
'jenis_jaminan_id' => $formattedData['jenis_jaminan_id']
],
[
'data_pembanding' => json_encode($formattedData),
'name' => $formattedData['type']
]
);
return $inspeksi;
}
public function storeDataPembanding(Request $request) public function storeDataPembanding(Request $request)
{ {
try { try {
DB::beginTransaction(); DB::beginTransaction();
$maxSize = getMaxFileSize('Foto');
$validator = $request->validate([ $validator = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id', 'permohonan_id' => 'required|exists:permohonan,id',
'type' => 'required|string', 'type' => 'required|string',
'jenis_jaminan_id' => 'required', 'jenis_jaminan_id' => 'required',
'foto_objek' => 'nullable|image|max:2048', 'foto_objek' => 'nullable|image|max:'.$maxSize,
'foto_objek_pembanding_*' => 'nullable|image|max:2048', 'foto_objek_pembanding.*' => 'nullable|image|max:'.$maxSize,
]); ]);
if ($validator->fails()) {
return response()->json([
'success' => false,
'message' => 'Validasi gagal',
'errors' => $validator->errors()
], 422);
}
$objekPenilaian = $this->formatObjekPenilaian($request); $objekPenilaian = $this->formatObjekPenilaian($request);
if ($request->hasFile('foto_objek')) { if ($request->hasFile('foto_objek')) {
$objekPenilaian['foto_objek'] = $this->handleFileUpload( $objekPenilaian['foto_objek'] = $this->handleupdateOrDeleteFile(
$request->file('foto_objek'), $request->file('foto_objek'),
'pembanding', $request['type'] = 'pembanding',
'objek_penilaian' 'objek_penilaian'
); );
} }
@@ -681,7 +702,7 @@ class SurveyorController extends Controller
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'message' => 'Data berhasil disimpan', 'message' => 'Data berhasil disimpan',
'data' => $formattedData 'data' => $objekPenilaian
], 200); ], 200);
} catch (\Exception $e) { } catch (\Exception $e) {
@@ -702,10 +723,6 @@ class SurveyorController extends Controller
public function formInspeksi($id, $jaminanId) public function formInspeksi($id, $jaminanId)
{ {
$permohonan = $this->getPermohonanJaminanId($id, $jaminanId); $permohonan = $this->getPermohonanJaminanId($id, $jaminanId);
// Auth::user()->id
$link_url_region = Teams::with('regions', 'teamsUsers') $link_url_region = Teams::with('regions', 'teamsUsers')
->whereHas('teamsUsers', function ($query) { ->whereHas('teamsUsers', function ($query) {
$query->where('user_id', Auth::user()->id); $query->where('user_id', Auth::user()->id);
@@ -719,39 +736,7 @@ class SurveyorController extends Controller
$villages = Village::where('district_code', $debitur->district_code)->get(); $villages = Village::where('district_code', $debitur->district_code)->get();
$surveyor = $id; $surveyor = $id;
$branches = Branch::all(); $basicData = $this->getCommonData();
$bentukTanah = BentukTanah::all();
$konturTanah = KonturTanah::all();
$posisiKavling = PosisiKavling::all();
$ketinggianTanah = KetinggianTanah::all();
$kondisiFisikTanah = KondisiFisikTanah::all();
$jenisBangunan = JenisBangunan::all();
$kondisiBangunan = KondisiBangunan::all();
$sifatBangunan = SifatBangunan::all();
$spekKategoriBagunan = SpekKategoritBangunan::all();
$spekBangunan = SpekBangunan::all();
$saranaPelengkap = SaranaPelengkap::all();
$arahMataAngin = ArahMataAngin::all();
$lantai = Lantai::all();
$viewUnit = ViewUnit::all();
$golMasySekitar = GolonganMasySekitar::all();
$tingkatKeramaian = TingkatKeramaian::all();
$laluLintasLokasi = LaluLintasLokasi::all();
$perkerasanJalan = PerkerasanJalan::all();
$jenisKendaraan = JenisKendaraan::all();
$jenisKapal = JenisKapal::all();
$jenisPesawat = JenisPesawat::all();
$modelAlatBerat = ModelAlatBerat::all();
$hubCadeb = HubunganPemilikJaminan::all();
$hubPenghuni = HubunganPenghuniJaminan::all();
$jenisJaminan = JenisJaminan::all();
$fasilitasObjek = FasilitasObjek::all();
$merupakanDaerah = MerupakanDaerah::all();
$terletakDiArea = TerletakArea::all();
$posisiUnit = PosisiUnit::all();
$bentukUnit = BentukUnit::all();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$forminspeksi = null; $forminspeksi = null;
@@ -767,38 +752,9 @@ class SurveyorController extends Controller
'cities', 'cities',
'districts', 'districts',
'villages', 'villages',
'bentukTanah',
'konturTanah',
'posisiKavling',
'kondisiFisikTanah',
'ketinggianTanah',
'kondisiBangunan',
'jenisBangunan',
'sifatBangunan',
'spekKategoriBagunan',
'spekBangunan',
'saranaPelengkap',
'arahMataAngin',
'lantai',
'viewUnit',
'golMasySekitar',
'tingkatKeramaian',
'laluLintasLokasi',
'perkerasanJalan',
'link_url_region', 'link_url_region',
'forminspeksi', 'forminspeksi',
'jenisKendaraan', 'basicData'
'jenisKapal',
'jenisPesawat',
'modelAlatBerat',
'hubCadeb',
'jenisJaminan',
'fasilitasObjek',
'merupakanDaerah',
'terletakDiArea',
'posisiUnit',
'bentukUnit',
'hubPenghuni'
)); ));
} }
@@ -903,19 +859,26 @@ class SurveyorController extends Controller
// Ambil data pendukung // Ambil data pendukung
$data = $this->getCommonData(); $data = $this->getCommonData();
$branches = Branch::all();
$provinces = Province::all(); $provinces = Province::all();
$cities = City::where('province_code', $this->getCodeAlamat('province_code', $inspectionData))->get();
$districts = District::where('city_code', $this->getCodeAlamat('city_code', $inspectionData))->get();
$villages = Village::where('district_code',$this->getCodeAlamat('district_code', $inspectionData))->get();
return view('lpj::surveyor.components.data-pembanding', compact( return view('lpj::surveyor.components.data-pembanding', compact(
'permohonan', 'permohonan',
'id', 'id',
'branches',
'provinces',
'inspectionData', 'inspectionData',
'comparisons', 'comparisons',
'data', 'data',
'jaminanId', 'jaminanId',
'fotoForm' 'fotoForm',
'cities',
'districts',
'villages',
'provinces'
)); ));
} catch (\Exception $e) { } catch (\Exception $e) {
@@ -926,6 +889,19 @@ class SurveyorController extends Controller
} }
public function getCodeAlamat($code, $inspectionData){
$cekAlamat = isset(
$inspectionData['asset']['alamat']['sesuai'],
)
? 'sesuai'
: 'tidak sesuai';
$selectedProvince =
$inspectionData['asset']['alamat'][$cekAlamat][
$code
] ?? null;
return $selectedProvince;
}
private function getHeader(string $type): array private function getHeader(string $type): array
{ {
@@ -1406,7 +1382,7 @@ class SurveyorController extends Controller
{ {
return [ return [
'branches' => Branch::all(), 'branches' => Branch::all(),
'provinces' => Province::all(),
'bentukTanah' => BentukTanah::all(), 'bentukTanah' => BentukTanah::all(),
'konturTanah' => KonturTanah::all(), 'konturTanah' => KonturTanah::all(),
'posisiKavling' => PosisiKavling::all(), 'posisiKavling' => PosisiKavling::all(),
@@ -1435,10 +1411,13 @@ class SurveyorController extends Controller
'merupakanDaerah' => MerupakanDaerah::all(), 'merupakanDaerah' => MerupakanDaerah::all(),
'jenisUnit' => JenisUnit::all(), 'jenisUnit' => JenisUnit::all(),
'jenisJaminan' => JenisJaminan::all(), 'jenisJaminan' => JenisJaminan::all(),
'hubCadeb' => HubunganPemilikJaminan::all(),
'hubPenghuni' => HubunganPenghuniJaminan::all(),
]; ];
} }
private const HEADERS = [ private const HEADERS = [
'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'],
'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'],

View File

@@ -0,0 +1,176 @@
@extends('layouts.main')
@section('breadcrumbs')
{{-- {{ Breadcrumbs::render(request()->route()->getName()) }}
--}}
Standard
@endsection
@section('content')
@include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card min-w-full">
<div class="card min-w-full">
<div class="card-header">
<h3 class="card-title">
Data Jaminan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="card-body grid gap-5 grid-cols-2">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nama Debitur</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->debiture))
<p class="text-2sm text-gray-700">{{ $permohonan->debiture->name }}</p>
@endif
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat Object</label>
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700">
{{formatAlamat($dokumen->pemilik)}}
</span>
@endforeach
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Registrasi</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Cab/Direktorat</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->branch))
<p class="text-2sm text-gray-700">{{ $permohonan->branch->name }}</p>
@endif
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Laporan</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">AO</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->user))
<p class="text-2sm text-gray-700">{{ $permohonan->user->name }}</p>
@endif
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Identitas Cadeb/Debitur
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Deskripsi dan Alamat Aset
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
dokumen
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Hubungan Cadeb/Debitur dengan pemilik dan penghuni
</h3>
</div>
<div class="card-body">
</div>
</div>
@include('lpj::surveyor.components.tanah')
@include('lpj::surveyor.components.bangunan')
@include('lpj::surveyor.components.lingkungan')
@include('lpj::surveyor.components.fakta')
@include('lpj::surveyor.components.informasi')
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Informasi dan pembanding
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
total nilai pasar wajar
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
nilai asuransi
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="flex justify-end gap-2" style="margin-right: 20px; margin-top: 20px">
<button type="button" class="btn btn-success" id="saveButton" onclick="submitData()">
<span id="saveButtonText">Save</span>
<div class="spinner-border spinner-border-sm text-light" role="status" style="display: none;"
id="saveButtonSpinner">
</div>
</button>
</div>
</div>
<div id="loadingOverlay" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center z-50">
<div class="bg-white p-4 rounded-lg">
<div class="loader"></div>
<p class="mt-2 text-center">Sedang memproses...</p>
</div>
</div>
@endsection

View File

@@ -1,12 +1,12 @@
@include('lpj::surveyor.components.header') @include('lpj::surveyor.components.header')
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
<div class="card-header">
<h3 class="card-title uppercase">
Analisa Unit
</h3>
</div>
<div class="card-body"> <div class="card-body">
<div class=" py-4 ">
<h1 class="text-md font-medium text-gray-900">Analisa Unit</h1>
</div>
<div class="grid gap-5"> <div class="grid gap-5">
<!-- Luas tanah --> <!-- Luas tanah -->
@@ -60,8 +60,8 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2"> <div class="flex flex-col items-start gap-2">
@if (isset($kondisiBangunan)) @if (isset($basicData['kondisiBangunan']))
@foreach ($kondisiBangunan as $item) @foreach ($basicData['kondisiBangunan'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_unit[]" type="checkbox" <input class="checkbox" name="kondisi_unit[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -82,8 +82,8 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2"> <div class="flex flex-col items-start gap-2">
@if (isset($posisiUnit)) @if (isset($basicData['posisiUnit']))
@foreach ($posisiUnit as $item) @foreach ($basicData['posisiUnit'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="posisi_unit[]" type="checkbox" <input class="checkbox" name="posisi_unit[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -103,8 +103,8 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($lantai)) @if (isset($basicData['lantai']))
@foreach ($lantai as $item) @foreach ($basicData['lantai'] as $item)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 gap-2.5" style="width: 500px"> <label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="lantai[]" type="checkbox" <input class="checkbox" name="lantai[]" type="checkbox"
@@ -130,8 +130,8 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2"> <div class="flex flex-col items-start gap-2">
@if (isset($viewUnit)) @if (isset($basicDdata['viewUnit']))
@foreach ($viewUnit as $item) @foreach ($basicDdata['viewUnit'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="view[]" type="checkbox" <input class="checkbox" name="view[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -151,8 +151,8 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2"> <div class="flex flex-col items-start gap-2">
@if (isset($bentukUnit)) @if (isset($basicData['bentukUnit']))
@foreach ($bentukUnit as $item) @foreach ($basicData['bentukUnit'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="bentuk_unit[]" type="checkbox" <input class="checkbox" name="bentuk_unit[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"

View File

@@ -1,8 +1,10 @@
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
<div class="card-header">
<h3 class="card-title uppercase">
Analisa Bangunan
</h3>
</div>
<div class="card-body"> <div class="card-body">
<div class="">
<h1 class="text-md font-medium text-gray-900">Analisa Bangunan</h1>
</div>
<div class="grid gap-5"> <div class="grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Luas Bagunan</label> <label class="form-label max-w-56">Luas Bagunan</label>
@@ -61,8 +63,8 @@
<label class="form-label max-w-56">Jenis Bangunan</label> <label class="form-label max-w-56">Jenis Bangunan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($jenisBangunan)) @if (isset($basicData['jenisBangunan']))
@foreach ($jenisBangunan as $item) @foreach ($basicData['jenisBangunan'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="jenis_bangunan[]" type="checkbox" <input class="checkbox" name="jenis_bangunan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -89,8 +91,8 @@
<label class="form-label max-w-56">Kondisi Bangunan</label> <label class="form-label max-w-56">Kondisi Bangunan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($kondisiBangunan)) @if (isset($basicData['kondisiBangunan']))
@foreach ($kondisiBangunan as $item) @foreach ($basicData['kondisiBangunan'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_bangunan[]" type="checkbox" <input class="checkbox" name="kondisi_bangunan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -122,8 +124,8 @@
<label class="form-label max-w-56">Sifat Bangunan</label> <label class="form-label max-w-56">Sifat Bangunan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($sifatBangunan)) @if (isset($basicData['sifatBangunan']))
@foreach ($sifatBangunan as $item) @foreach ($basicData['sifatBangunan'] as $item)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 gap-2.5" style="width: 500px"> <label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="sifat_bangunan[]" type="checkbox" <input class="checkbox" name="sifat_bangunan[]" type="checkbox"
@@ -151,8 +153,8 @@
<input type="hidden" name="nama_bagunan[]" value="Bangunan"> <input type="hidden" name="nama_bagunan[]" value="Bangunan">
<label class="building-label form-label">Bangunan 1</label> <label class="building-label form-label">Bangunan 1</label>
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2 w-full"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2 w-full">
@if (@isset($spekKategoriBagunan)) @if (@isset($basicData['spekKategoriBangunan']))
@foreach ($spekKategoriBagunan as $item) @foreach ($basicData['spekKategoriBangunan'] as $item)
<div> <div>
<input type="hidden" name="spek_kategori_bangunan[]" <input type="hidden" name="spek_kategori_bangunan[]"
value="{{ $item->name }}"> value="{{ $item->name }}">
@@ -160,7 +162,7 @@
class="form-label flex items-center gap-3 text-nowrap">{{ $item->name }}</label> class="form-label flex items-center gap-3 text-nowrap">{{ $item->name }}</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4" style="margin-top: 10px"> <div class="flex flex-col items-start gap-4" style="margin-top: 10px">
@foreach ($spekBangunan as $spek) @foreach ($basicData['spekBangunan'] as $spek)
@if ($spek->spek_kategori_bangunan_id == $item->id) @if ($spek->spek_kategori_bangunan_id == $item->id)
<label class="form-label flex items-center gap-2.5"> <label class="form-label flex items-center gap-2.5">
<input class="checkbox" <input class="checkbox"
@@ -198,8 +200,8 @@
<label class="form-label max-w-56">Sarana pelengkap</label> <label class="form-label max-w-56">Sarana pelengkap</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($saranaPelengkap)) @if (isset($basicData['saranaPelengkap']))
@foreach ($saranaPelengkap as $item) @foreach ($basicData['saranaPelengkap'] as $item)
@php @php
$isChecked = false; $isChecked = false;
$inputValue = ''; $inputValue = '';

View File

@@ -74,8 +74,11 @@
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<img id="uploadedImage2" class="max-w-[200px] hidden" <img id="uploadedImage2" class="max-w-[200px] hidden"
alt="Pembanding Image"> alt="Pembanding Image">
<input type="file" name="foto_objek_pembanding[]" class="file-input" <input type="file"
accept="image/*" onchange="previewImage(this, 'uploadedImage2')"> name="foto_objek_pembanding[]"
class="file-input"
accept="image/*"
onchange="previewImage(this, 'uploadedImage2')">
</div> </div>
</td> </td>
</tr> </tr>
@@ -190,54 +193,199 @@
<tr> <tr>
<td class="px-4 py-2">Alamat</td> <td class="px-4 py-2">Alamat</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<textarea name="alamat" class="input" rows="2">{{ $inspectionData['alamat'] ?? '' }}</textarea> @php
$statusAlamat = isset($inspectionData['asset']['alamat']['sesuai'])
? 'sesuai'
: 'tidak sesuai';
$address =
$inspectionData['asset']['alamat'][$statusAlamat]['address'] ??
null;
@endphp
<textarea name="address" class="input py-2" rows="2">{{ $address }}</textarea>
</td> </td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<textarea name="alamat_pembanding[]" class="input" rows="2"></textarea> <textarea name="address_pembanding[]" class="input py-2" rows="2"></textarea>
</td>
</tr>
<tr>
<td class="px-4 py-2">Desa/Kelurahan</td>
<td class="px-4 py-2">
<input type="text" name="desa" class="input"
value="{{ $inspectionData['desa'] ?? '' }}">
</td>
<td class="px-4 py-2">
<input type="text" name="desa_pembanding[]" class="input">
</td>
</tr>
<tr>
<td class="px-4 py-2">Kecamatan</td>
<td class="px-4 py-2">
<input type="text" name="kecamatan" class="input"
value="{{ $inspectionData['kecamatan'] ?? '' }}">
</td>
<td class="px-4 py-2">
<input type="text" name="kecamatan_pembanding[]" class="input">
</td>
</tr>
<tr>
<td class="px-4 py-2">Kabupaten/Kota</td>
<td class="px-4 py-2">
<input type="text" name="kabupaten" class="input"
value="{{ $inspectionData['kabupaten'] ?? '' }}">
</td>
<td class="px-4 py-2">
<input type="text" name="kabupaten_pembanding[]" class="input">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="px-4 py-2">Provinsi</td> <td class="px-4 py-2">Provinsi</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="provinsi" class="input" <select id="province_code" name="province_code" class="input w-full">
value="{{ $inspectionData['provinsi'] ?? '' }}"> @php
$statusKey = isset($inspectionData['asset']['alamat']['sesuai'])
? 'sesuai'
: 'tidak sesuai';
$address =
$inspectionData['asset']['alamat'][$statusKey][
'province_code'
] ?? null;
@endphp
<option value="">Select Province</option>
@foreach ($provinces as $province)
@php
$statusKey = isset(
$inspectionData['asset']['alamat']['sesuai'],
)
? 'sesuai'
: 'tidak sesuai';
$selectedProvince =
$inspectionData['asset']['alamat'][$statusKey][
'province_code'
] ?? null;
@endphp
<option value="{{ $province->code }}"
{{ $selectedProvince == $province->code ? 'selected' : '' }}>
{{ $province->name }}
</option>
@endforeach
</select>
</td> </td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="provinsi_pembanding[]" class="input"> <select id="province_code" name="province_code_pembanding[]"
class="input w-full">
<option value="">Select Province</option>
@foreach ($provinces as $province)
<option value="{{ $province->code }}">
{{ $province->name }}
</option>
@endforeach
</select>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="px-4 py-2">Harga (Rp)</td> <td class="px-4 py-2">Kabupaten/Kota</td>
<td class="px-4 py-2">
<select id="city_code" name="city_code" class="select w-full">
@php
$statusKey = isset($inspectionData['asset']['alamat']['sesuai'])
? 'sesuai'
: 'tidak sesuai';
$selectedCity =
$inspectionData['asset']['alamat'][$statusKey][
'city_code'
] ?? null;
@endphp
<option value="">Pilih Kota/Kabupaten</option>
@if (isset($selectedCity))
@foreach ($cities as $city)
<option value="{{ $city->code }}"
{{ $selectedCity == $city->code ? 'selected' : '' }}>
{{ $city->name }}
</option>
@endforeach
@endif
</select>
</td>
<td class="px-4 py-2">
<select id="city_code" name="city_code_pembanding[]"
class="input w-full">
<option value="">Pilih Kota/Kabupaten</option>
@if (isset($cities))
@foreach ($cities as $city)
<option value="{{ $city->code }}">
{{ $city->name }}
</option>
@endforeach
@endif
</select>
</td>
</tr>
<tr>
<td class="px-4 py-2">Kecamatan</td>
<td class="px-4 py-2">
<select id="district_code" name="district_code" class="select w-full">
@php
$statusKey = isset($inspectionData['asset']['alamat']['sesuai'])
? 'sesuai'
: 'tidak sesuai';
$selectedDisrict =
$inspectionData['asset']['alamat'][$statusKey][
'district_code'
] ?? null;
@endphp
<option value="">Pilih Kecamatan</option>
@if (isset($selectedDisrict))
@foreach ($districts as $district)
<option value="{{ $district->code }}"
{{ $selectedDisrict == $district->code ? 'selected' : '' }}>
{{ $district->name }}
</option>
@endforeach
@endif
</select>
</td>
<td class="px-4 py-2">
<select id="district_code" name="district_code_pembanding[]"
class="input w-full">
<option value="">Pilih Kecamatan</option>
@if (isset($districts))
@foreach ($districts as $district)
<option value="{{ $district->code }}">
{{ $district->name }}
</option>
@endforeach
@endif
</select>
</td>
</tr>
<tr>
<td class="px-4 py-2">Desa/Kelurahan</td>
<td class="px-4 py-2">
<select id="village_code" name="village_code" class="select w-full">
@php
$statusKey = isset($inspectionData['asset']['alamat']['sesuai'])
? 'sesuai'
: 'tidak sesuai';
$selectedDesa =
$inspectionData['asset']['alamat'][$statusKey][
'village_code'
] ?? null;
@endphp
<option value="">Pilih Kecamatan</option>
@if (isset($selectedDesa))
@foreach ($villages as $village)
<option value="{{ $village->code }}"
{{ $selectedDesa == $village->code ? 'selected' : '' }}>
{{ $village->name }}
</option>
@endforeach
@endif
</select>
</td>
<td class="px-4 py-2">
<select id="village_code" name="village_code_pembanding[]"
class="input w-full">
<option value="">Pilih Kecamatan</option>
@if (isset($villages))
@foreach ($villages as $village)
<option value="{{ $village->code }}">
{{ $village->name }}
</option>
@endforeach
@endif
</select>
</td>
</tr>
<tr class="bg-gray-100">
<td colspan="3" class="px-4 py-2 font-semibold">Harga Per Meter</td>
</tr>
<tr>
<td class="px-4 py-2">Harga</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="harga" class="input currency-format" <input type="text" name="harga" class="input currency-format"
value="{{ $inspectionData['harga'] ?? '' }}"> value="{{ $inspectionData['harga'] ?? '' }}">
@@ -247,6 +395,39 @@
class="input currency-format"> class="input currency-format">
</td> </td>
</tr> </tr>
<tr>
<td class="px-4 py-2">Diskon</td>
<td class="px-4 py-2">
<input type="text" name="harga" class="input currency-format"
value="{{ $inspectionData['diskon'] ?? '' }}">
</td>
<td class="px-4 py-2">
<input type="text" name="diskon_pembanding[]"
class="input currency-format">
</td>
</tr>
<tr>
<td class="px-4 py-2">Total</td>
<td class="px-4 py-2">
<input type="text" name="total" class="input currency-format"
value="{{ $inspectionData['total'] ?? '' }}">
</td>
<td class="px-4 py-2">
<input type="text" name="total_pembanding[]"
class="input currency-format">
</td>
</tr>
<tr>
<td class="px-4 py-2">Harga Setelah Diskon</td>
<td class="px-4 py-2">
<input type="text" name="harga_diskon" class="input currency-format"
value="{{ $inspectionData['harga_diskon'] ?? '' }}">
</td>
<td class="px-4 py-2">
<input type="text" name="harga_diskon_pembanding[]"
class="input currency-format">
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -254,7 +435,7 @@
<div class="card-footer"> <div class="card-footer">
<div class="flex justify-end gap-2"> <div class="flex justify-end gap-2">
<button type="submit" class="btn btn-primary"> <button type="button" onclick="submitData()" class="btn btn-primary">
<i class="ki-duotone ki-save-2 fs-2"></i> <i class="ki-duotone ki-save-2 fs-2"></i>
Simpan Simpan
</button> </button>
@@ -263,7 +444,7 @@
</div> </div>
</form> </form>
</div> </div>
</div </div> </div>
</div> </div>
<!-- Loading Overlay --> <!-- Loading Overlay -->
@@ -279,55 +460,6 @@
<script> <script>
let columnCount = 1; let columnCount = 1;
function fillObjekPenilaian(data) {
if (!data) return;
// Helper function untuk mengisi nilai input dengan aman
function setInputValue(selector, value) {
const element = document.querySelector(selector);
if (element) {
element.value = value || '';
}
}
// Isi data koordinat
if (data.asset) {
setInputValue('input[name="kordinat_lat"]', data.asset.kordinat_lat);
setInputValue('input[name="kordinat_lng"]', data.asset.kordinat_lng);
}
// Isi data tanah
if (data.tanah) {
const luasTanah = data.tanah.luas_tanah?.sesuai ||
data.tanah.luas_tanah?.['tidak sesuai'] || '';
setInputValue('input[name="luas_tanah"]', luasTanah);
}
// Isi data bangunan
if (data.bangunan) {
const luasBangunan = data.bangunan.luas_tanah_bagunan?.sesuai ||
data.bangunan.luas_tanah_bagunan?.['tidak sesuai'] || '';
setInputValue('input[name="luas_tanah_bagunan"]', luasBangunan);
}
console.log("tee", data.asset.alamat.sesuai.nama_jalan);
// Isi data umum
setInputValue('input[name="alamat"]', data.asset.alamat.sesuai.nama_jalan);
setInputValue('input[name="desa"]', data.desa);
setInputValue('input[name="kecamatan"]', data.kecamatan);
setInputValue('input[name="kabupaten"]', data.kabupaten);
setInputValue('input[name="provinsi"]', data.provinsi);
setInputValue('input[name="nama_nara_sumber"]', data.nama_nara_sumber);
setInputValue('input[name="harga"]', data.harga);
// Set jenis aset dengan pengecekan
const jenisAsetSelect = document.querySelector('select[name="jenis_aset"]');
if (jenisAsetSelect && data.jenis_aset) {
jenisAsetSelect.value = data.jenis_aset;
}
}
function fillPembandingData(data, index) { function fillPembandingData(data, index) {
if (!data) return; if (!data) return;
@@ -335,7 +467,19 @@
function setArrayInputValue(name, value, index) { function setArrayInputValue(name, value, index) {
const element = document.getElementsByName(name)[index]; const element = document.getElementsByName(name)[index];
if (element) { if (element) {
element.value = value || ''; if (element.tagName === "SELECT") {
// Jika elemen adalah select, set selected value
const options = Array.from(element.options);
const optionToSelect = options.find(option => option.value === value);
if (optionToSelect) {
optionToSelect.selected = true;
} else {
element.selectedIndex = 0; // Pilih default jika tidak ditemukan
}
} else {
// Jika elemen bukan select, langsung set value
element.value = value || '';
}
} }
} }
@@ -348,12 +492,16 @@
'nama_nara_sumber_pembanding[]': data.nama_nara_sumber, 'nama_nara_sumber_pembanding[]': data.nama_nara_sumber,
'kordinat_lat_pembanding[]': data.kordinat_lat, 'kordinat_lat_pembanding[]': data.kordinat_lat,
'kordinat_lng_pembanding[]': data.kordinat_lng, 'kordinat_lng_pembanding[]': data.kordinat_lng,
'alamat_pembanding[]': data.alamat, 'address_pembanding[]': data.address,
'desa_pembanding[]': data.desa, 'village_code_pembanding[]': data.village_code,
'kecamatan_pembanding[]': data.kecamatan, 'district_code_pembanding[]': data.district_code,
'kabupaten_pembanding[]': data.kabupaten, 'city_code_pembanding[]': data.city_code,
'provinsi_pembanding[]': data.provinsi, 'province_code_pembanding[]': data.province_code,
'harga_pembanding[]': data.harga 'harga_pembanding[]': data.harga,
'harga_diskon_pembanding[]': data.harga_diskon,
'total_pembanding[]': data.total,
'diskon_pembanding[]': data.diskon,
}; };
// Isi semua input fields // Isi semua input fields
@@ -366,31 +514,22 @@
const imageId = `uploadedImage${index + 2}`; const imageId = `uploadedImage${index + 2}`;
const preview = document.getElementById(imageId); const preview = document.getElementById(imageId);
if (preview) { if (preview) {
preview.src = `/storage/pembanding/${data.foto_objek}`; preview.src = `/storage/${data.foto_objek}`;
preview.classList.remove('hidden'); preview.classList.remove('hidden');
} }
} }
} }
// Event listener dengan pengecekan data // Event listener dengan pengecekan data
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
try { try {
const inspectionData = {!! isset($inspectionData) ? json_encode($inspectionData) : 'null' !!}; const inspectionData = {!! isset($inspectionData) ? json_encode($inspectionData) : 'null' !!};
const comparisons = {!! isset($comparisons) ? json_encode($comparisons) : 'null' !!}; const comparisons = {!! isset($comparisons) ? json_encode($comparisons) : 'null' !!};
console.log('Inspection Data:', inspectionData); // Debug
console.log('Comparisons:', comparisons); // Debug
if (inspectionData) {
fillObjekPenilaian(inspectionData);
}
if (comparisons) { if (comparisons) {
console.log("comparisons", comparisons);
comparisons.data_pembanding.forEach((comparison, index) => { comparisons.data_pembanding.forEach((comparison, index) => {
if (index > 0) { // Skip kolom pertama karena sudah ada di template if (index > 0) {
addColumn(); addColumn();
} }
fillPembandingData(comparison, index); fillPembandingData(comparison, index);
@@ -524,7 +663,6 @@
document.getElementById('removeColumnBtn').addEventListener('click', removeColumn); document.getElementById('removeColumnBtn').addEventListener('click', removeColumn);
// Form submission // Form submission
document.getElementById('dataPembandingForm').addEventListener('submit', handleSubmit);
reinitializeEventListeners(); reinitializeEventListeners();
} }
@@ -545,14 +683,14 @@
}); });
} }
function handleSubmit(e) { function submitData() {
e.preventDefault();
const loadingOverlay = document.getElementById('loadingOverlay'); const loadingOverlay = document.getElementById('loadingOverlay');
loadingOverlay.classList.remove('hidden'); loadingOverlay.classList.remove('hidden');
loadingOverlay.classList.add('flex'); loadingOverlay.classList.add('flex');
const form = document.querySelector('form');
const formData = new FormData(form);
const formData = new FormData(e.target); console.log('Form data entries:', Array.from(formData.entries()));
$.ajax({ $.ajax({
url: '{{ route('surveyor.storeDataPembanding') }}', url: '{{ route('surveyor.storeDataPembanding') }}',
@@ -575,6 +713,8 @@
window.location.href = window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}'; '{{ route('surveyor.show', ['id' => $permohonan->id]) }}';
} }
console.log(result);
}); });
} else { } else {
Swal.fire({ Swal.fire({

View File

@@ -1,9 +1,12 @@
{{-- analisa fakta --}} {{-- analisa fakta --}}
<div class="card bg-white rounded-lg overflow-hidden"> <div class="card bg-white rounded-lg overflow-hidden">
<div class="card-header">
<h3 class="card-title uppercase">
Analisis Fakta
</h3>
</div>
<div class="card-body"> <div class="card-body">
<div class=" py-4 ">
<h1 class="text-md font-medium text-gray-900">Analisis Fakta</h1>
</div>
<div class="grid gap-5"> <div class="grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Positif</label> <label class="form-label max-w-56">Faktor Positif</label>

View File

@@ -33,12 +33,7 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700"> <span class="text-2sm text-gray-700">
{{ $dokumen->pemilik->address ?? '' }}, {{formatAlamat($dokumen->pemilik)}}
{{ $dokumen->pemilik->village->name ?? '' }},
{{ $dokumen->pemilik->district->name ?? '' }},
{{ $dokumen->pemilik->city->name ?? '' }},
{{ $dokumen->pemilik->province->name ?? '' }} -
{{ $dokumen->pemilik->village->postal_code ?? '' }}
</span> </span>
@endforeach @endforeach
</div> </div>

View File

@@ -250,7 +250,7 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<select id="district_code" name="district_code" class="select w-full"> <select id="district_code" name="district_code" class="select w-full">
<option value="">Pilih Kecamatan</option> <option value="">Pilih Kecamatan</option>
@if (isset($districts)) @if (isset($data['districts']))
@foreach ($districts as $district) @foreach ($districts as $district)
@if (isset($debitur)) @if (isset($debitur))
<option value="{{ $district->code }}" <option value="{{ $district->code }}"

View File

@@ -1,11 +1,10 @@
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
<div class="card-header">
<h3 class="card-title uppercase">
Analisa Lingkungan
</h3>
</div>
<div class="card-body"> <div class="card-body">
<div class=" text-white py-4">
<h1 class="text-md font-medium text-gray-900">Analisis Lingkungan</h1>
</div>
<div class="grid gap-5"> <div class="grid gap-5">
<!-- Jarak dari Objek Utama --> <!-- Jarak dari Objek Utama -->
<div class=" rounded-lg"> <div class=" rounded-lg">
@@ -45,8 +44,8 @@
<label class="form-label max-w-56">Perkerasan Jalan</label> <label class="form-label max-w-56">Perkerasan Jalan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($perkerasanJalan)) @if (isset($basicData['perkerasanJalan']))
@foreach ($perkerasanJalan as $item) @foreach ($basisData['perkerasanJalan'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="perkerasan_jalan[]" type="checkbox" <input class="checkbox" name="perkerasan_jalan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -71,8 +70,8 @@
<label class="form-label max-w-56">Lalu Lintas Depan Lokasi</label> <label class="form-label max-w-56">Lalu Lintas Depan Lokasi</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($laluLintasLokasi)) @if (isset($basicData['laluLintasLokasi']))
@foreach ($laluLintasLokasi as $item) @foreach ($basicData['laluLintasLokasi'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="lalu_lintas[]" type="checkbox" <input class="checkbox" name="lalu_lintas[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -92,8 +91,8 @@
<label class="form-label max-w-56">Golongan Masy Sekitar</label> <label class="form-label max-w-56">Golongan Masy Sekitar</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($golMasySekitar)) @if (isset($basicData['golMasySekitar']))
@foreach ($golMasySekitar as $item) @foreach ($basicData['golMasySekitar'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="gol_mas_sekitar[]" type="checkbox" <input class="checkbox" name="gol_mas_sekitar[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -113,8 +112,8 @@
<label class="form-label max-w-56">Tingkat Keramaian</label> <label class="form-label max-w-56">Tingkat Keramaian</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($tingkatKeramaian)) @if (isset($basicData['tingkatKeramaian']))
@foreach ($tingkatKeramaian as $item) @foreach ($basicData['tingkatKeramaian'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="tingkat_keramaian[]" type="checkbox" <input class="checkbox" name="tingkat_keramaian[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -134,8 +133,8 @@
<label class="form-label max-w-56">Terletak Di Area</label> <label class="form-label max-w-56">Terletak Di Area</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($terletakDiArea)) @if (isset($basicData['terletakDiArea']))
@foreach ($terletakDiArea as $item) @foreach ($basicData['terletakDiArea'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="terletak_diarea[]" type="checkbox" <input class="checkbox" name="terletak_diarea[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -312,8 +311,8 @@
<label class="form-label max-w-56">Merupakan daerah</label> <label class="form-label max-w-56">Merupakan daerah</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($merupakanDaerah)) @if (isset($basicData['merupakanDaerah']))
@foreach ($merupakanDaerah as $item) @foreach ($basicData['merupakanDaerah'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="merupakan_daerah[]" type="checkbox" <input class="checkbox" name="merupakan_daerah[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -333,8 +332,8 @@
<label class="form-label max-w-56">Fasilitas Umum dekat Object</label> <label class="form-label max-w-56">Fasilitas Umum dekat Object</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($fasilitasObjek)) @if (isset($basicData['fasilitasObjek']))
@foreach ($fasilitasObjek as $item) @foreach ($basicData['fasilitasObjek'] as $item)
@php @php
$selectedFasilitas = is_array( $selectedFasilitas = is_array(

View File

@@ -1,12 +1,13 @@
@include('lpj::surveyor.components.header') @include('lpj::surveyor.components.header')
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
<div class="card-header">
<h3 class="card-title uppercase">
Analisa Tanah
</h3>
</div>
<div class="card-body"> <div class="card-body">
<div class="py-4 ">
<h1 class="text-md font-medium text-gray-900">Analisa Tanah</h1>
</div>
<div class="grid gap-5"> <div class="grid gap-5">
<!-- Luas tanah --> <!-- Luas tanah -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -92,8 +93,8 @@
id="hadap_matangin_tidak_sesuai" id="hadap_matangin_tidak_sesuai"
name="analisa_tanah_hadap_mata_angin_tidak_sesuai"> name="analisa_tanah_hadap_mata_angin_tidak_sesuai">
<option value="">Select Hadap Mata Angin</option> <option value="">Select Hadap Mata Angin</option>
@if (isset($arahMataAngin)) @if (isset($basicData['arahMataAngin']))
@foreach ($arahMataAngin as $item) @foreach ($basicData['arahMataAngin'] as $item)
<option value="{{ $item->name }}" <option value="{{ $item->name }}"
{{ old('hadap_mata_angin_tidak_sesuai', $forminspeksi['tanah']['hadap_mata_angin']['tidak sesuai'] ?? '') == $item->name ? 'selected' : '' }}> {{ old('hadap_mata_angin_tidak_sesuai', $forminspeksi['tanah']['hadap_mata_angin']['tidak sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
{{ $item->name }} {{ $item->name }}
@@ -116,8 +117,8 @@
<label class="form-label max-w-56">Bentuk Tanah</label> <label class="form-label max-w-56">Bentuk Tanah</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($bentukTanah)) @if (isset($basicData['bentukTanah']))
@foreach ($bentukTanah as $item) @foreach ($basicData['bentukTanah'] as $item)
<div class="flex items-center"> <div class="flex items-center">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="bentuk_tanah[]" type="checkbox" <input class="checkbox" name="bentuk_tanah[]" type="checkbox"
@@ -149,8 +150,8 @@
<label class="form-label max-w-56">Kontur Tanah</label> <label class="form-label max-w-56">Kontur Tanah</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($konturTanah)) @if (isset($basicData['konturTanah']))
@foreach ($konturTanah as $item) @foreach ($basicData['konturTanah'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kontur_tanah[]" type="checkbox" <input class="checkbox" name="kontur_tanah[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
@@ -170,8 +171,8 @@
<label class="form-label max-w-56">Beda Ketinggian Dengan Jalan</label> <label class="form-label max-w-56">Beda Ketinggian Dengan Jalan</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($ketinggianTanah)) @if (isset($basicData['ketinggianTanah']))
@foreach ($ketinggianTanah as $item) @foreach ($basicData['ketinggianTanah'] as $item)
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="ketinggian_jalan[]" type="checkbox" <input class="checkbox" name="ketinggian_jalan[]" type="checkbox"
@@ -228,8 +229,8 @@
<label class="form-label max-w-56">Posisi Kavling</label> <label class="form-label max-w-56">Posisi Kavling</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($posisiKavling)) @if (isset($basicData['posisiKavling']))
@foreach ($posisiKavling as $item) @foreach ($basicData['posisiKavling'] as $item)
<div class="flex items-center"> <div class="flex items-center">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="posisi_kavling[]" type="checkbox" <input class="checkbox" name="posisi_kavling[]" type="checkbox"
@@ -297,8 +298,8 @@
<label class="form-label max-w-56">Kondisi Fisik Tanah</label> <label class="form-label max-w-56">Kondisi Fisik Tanah</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($kondisiFisikTanah)) @if (isset($basicData['kondisiFisikTanah']))
@foreach ($kondisiFisikTanah as $item) @foreach ($basicData['kondisiFisikTanah'] as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_fisik_tanah[]" type="checkbox" <input class="checkbox" name="kondisi_fisik_tanah[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"