fix(surveyor): update key dokument jaminan

This commit is contained in:
majid
2025-01-31 13:56:53 +07:00
parent d5311a944d
commit 9bdbd77f73

View File

@@ -2017,7 +2017,7 @@ class SurveyorController extends Controller
private function updateDetails($permohonan, $key, $newValue) private function updateDetails($permohonan, $key, $newValue)
{ {
$document = $permohonan->debiture->documents->first(); $document = $permohonan->documents->first();
if (!$document) { if (!$document) {
throw new \Exception("Document not found"); throw new \Exception("Document not found");
@@ -2031,18 +2031,18 @@ class SurveyorController extends Controller
$datas = json_decode($detailsUpdate->details, true) ?? []; $datas = json_decode($detailsUpdate->details, true) ?? [];
if (is_numeric($newValue)) { if (!is_scalar($newValue)) {
$newValue = [$key => $newValue]; throw new \InvalidArgumentException("New value must be a scalar (string/number)");
} }
if (!is_array($newValue)) { // Update nilai berdasarkan kunci
throw new \InvalidArgumentException("'{$key}' must be an array or valid JSON string"); if (array_key_exists($key, $datas)) {
} $datas[$key] = $newValue;
} else {
foreach ($newValue as $subKey => $value) { throw new \Exception("Key '{$key}' not found in details");
$datas[$subKey] = $value; // Update atau tambahkan key baru
} }
// Simpan kembali ke database
$detailsUpdate->update([ $detailsUpdate->update([
'details' => json_encode($datas), 'details' => json_encode($datas),
]); ]);
@@ -2414,19 +2414,41 @@ class SurveyorController extends Controller
]; ];
} }
private function updateFormData(array &$dataForm, array $data, $inspeksi, string $section, string $key, string $sesuaiKey, string $tidakSesuaiKey): void
{
if (isset($dataForm[$section][$key])) {
$dataForm[$section][$key] = []; // Reset data
if ($data[$key] == 'sesuai') {
$dataForm[$section][$key]['sesuai'] = $data[$sesuaiKey] ?? null;
} elseif ($data[$key] == 'tidak sesuai') {
$dataForm[$section][$key]['tidak sesuai'] = $data[$tidakSesuaiKey] ?? null;
}
if ($inspeksi) {
$inspeksi->data_form = json_encode($dataForm);
$inspeksi->save();
}
} else {
$data[$key] = $this->getFieldData($data, $key, true);
}
}
private function getTanahData(array $data): array private function getTanahData(array $data): array
{ {
$inspeksi = Inspeksi::where('permohonan_id', $data['permohonan_id'])->where('dokument_id', $data['dokument_id'])->first();
// Decode data_form dari inspeksi
$dataForm = $inspeksi ? json_decode($inspeksi->data_form, true) : [];
$this->updateFormData($dataForm, $data, $inspeksi, 'tanah', 'luas_tanah', 'luas_tanah_sesuai', 'luas_tanah_tidak_sesuai');
$this->updateFormData($dataForm, $data, $inspeksi, 'tanah', 'hadap_mata_angin', 'hadap_mata_angin_sesuai', 'hadap_mata_angin_tidak_sesuai');
// dd($dataForm);
return [ return [
'tanah' => [ 'tanah' => [
'luas_tanah' => $this->getFieldData( 'luas_tanah' => $dataForm['tanah']['luas_tanah'] ?? $data['luas_tanah'],
$data, 'hadap_mata_angin' => $dataForm['tanah']['hadap_mata_angin'] ?? $data['hadap_mata_angin'],
'luas_tanah',
true
),
'hadap_mata_angin' => [
$data['hadap_mata_angin'] => $data['hadap_mata_angin'] == 'sesuai' ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai'] ?? null
],
'bentuk_tanah' => $this->getFieldData( 'bentuk_tanah' => $this->getFieldData(
$data, $data,
'bentuk_tanah', 'bentuk_tanah',
@@ -2499,14 +2521,16 @@ class SurveyorController extends Controller
} }
} }
$inspeksi = Inspeksi::where('permohonan_id', $data['permohonan_id'])->where('dokument_id', $data['dokument_id'])->first();
// Decode data_form dari inspeksi
$dataForm = $inspeksi ? json_decode($inspeksi->data_form, true) : [];
$this->updateFormData($dataForm, $data, $inspeksi, 'bangunan', 'luas_tanah_bagunan', 'luas_tanah_bagunan_sesuai', 'luas_tanah_bagunan_tidak_sesuai');
return [ return [
'bangunan' => [ 'bangunan' => [
'luas_tanah_bagunan' => $this->getFieldData( 'luas_tanah_bagunan' => $dataForm['bangunan']['luas_tanah_bagunan'] ?? $data['luas_tanah_bagunan'],
$data,
'luas_tanah_bagunan',
true
),
'jenis_bangunan' => $data['jenis_bangunan'] ?? null, 'jenis_bangunan' => $data['jenis_bangunan'] ?? null,
'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null, 'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null,
'sifat_bangunan' => $data['sifat_bangunan'] ?? null, 'sifat_bangunan' => $data['sifat_bangunan'] ?? null,
@@ -3181,6 +3205,7 @@ class SurveyorController extends Controller
private function getUnitData($data, $request): array private function getUnitData($data, $request): array
{ {
return [ return [
'action' => $data['action'] ?? null, 'action' => $data['action'] ?? null,
'luas_unit' => $this->getFieldData( 'luas_unit' => $this->getFieldData(
@@ -3262,37 +3287,32 @@ class SurveyorController extends Controller
bool $checkKesesuaian = false, bool $checkKesesuaian = false,
?string $extraField = null ?string $extraField = null
): array { ): array {
$result = [];
if ($checkKesesuaian) { if ($checkKesesuaian) {
// Mengecek apakah status kesesuaian adalah 'sesuai'
$isSesuai = ($data[$fieldName] ?? '') === 'sesuai'; $isSesuai = ($data[$fieldName] ?? '') === 'sesuai';
$fieldKey = $isSesuai ? "{$fieldName}_sesuai" : "{$fieldName}_tidak_sesuai";
// Menggunakan key berdasarkan status kesesuaian // Hanya simpan key yang dipilih
$result = [ if ($isSesuai) {
$isSesuai ? 'sesuai' : 'tidak_sesuai' => $data[$fieldName] ?? null $result['sesuai'] = $data[$fieldKey] ?? null;
]; } else {
$result['tidak sesuai'] = $data[$fieldKey] ?? null;
}
} else {
$result[$fieldName] = $data[$fieldName] ?? null;
// Tambahkan field ekstra jika ada
if ($extraField) { if ($extraField) {
$result[$extraField] = $data["{$fieldName}_{$extraField}"] ?? null; $result[$extraField] = $data["{$fieldName}_{$extraField}"] ?? null;
} }
return $result;
} }
// Jika tidak melakukan pengecekan kesesuaian, hanya ambil data berdasarkan fieldName // Hapus key dengan nilai null untuk memastikan hanya key yang valid yang disimpan
$result = [ return array_filter($result, fn ($value) => $value !== null);
$fieldName => $data[$fieldName] ?? null,
];
// Jika ada extra field, tambahkan ke result
if ($extraField) {
$result[$extraField] = $data["{$fieldName}_{$extraField}"] ?? null;
}
return $result;
} }
public function export(string $type) public function export(string $type)
{ {
$modelClass = $this->getModelClass($type); $modelClass = $this->getModelClass($type);
@@ -3332,13 +3352,13 @@ class SurveyorController extends Controller
->where('dokument_id', $request->input('document_id')) ->where('dokument_id', $request->input('document_id'))
->first(); ->first();
if (!$inspeksi) { if (!$inspeksi) {
$inspeksi = new Inspeksi(); $inspeksi = new Inspeksi();
$inspeksi->permohonan_id = $request->input('permohonan_id'); $inspeksi->permohonan_id = $request->input('permohonan_id');
$inspeksi->dokument_id = $request->input('document_id'); $inspeksi->dokument_id = $request->input('document_id');
$inspeksi->data_form = json_encode([]); // Inisialisasi data_form kosong $inspeksi->data_form = json_encode([]); // Inisialisasi data_form kosong
$inspeksi->save(); $inspeksi->save();
} }
// Decode data form yang ada // Decode data form yang ada
$dataForm = json_decode($inspeksi->data_form, true) ?: []; $dataForm = json_decode($inspeksi->data_form, true) ?: [];
@@ -3497,40 +3517,40 @@ class SurveyorController extends Controller
// Ambil data permohonan dan data umum // Ambil data permohonan dan data umum
$permohonan = $this->getPermohonanJaminanId($permohonan_id, $dokument_id, $jenis_jaminan_id); $permohonan = $this->getPermohonanJaminanId($permohonan_id, $dokument_id, $jenis_jaminan_id);
$basicData = $this->getCommonData(); $basicData = $this->getCommonData();
// Ambil data inspeksi // Ambil data inspeksi
$inspeksi = Inspeksi::where('permohonan_id', $permohonan_id) $inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)
->where('dokument_id', $dokument_id) ->where('dokument_id', $dokument_id)
->first(); ->first();
if (!$inspeksi) { if (!$inspeksi) {
// Redirect jika inspeksi tidak ditemukan // Redirect jika inspeksi tidak ditemukan
return redirect()->back()->with('error', 'Data inspeksi tidak ditemukan.'); return redirect()->back()->with('error', 'Data inspeksi tidak ditemukan.');
} }
// Decode data form inspeksi // Decode data form inspeksi
$forminspeksi = json_decode($inspeksi->data_form, true); $forminspeksi = json_decode($inspeksi->data_form, true);
if (!$forminspeksi) { if (!$forminspeksi) {
// Redirect jika data form inspeksi kosong // Redirect jika data form inspeksi kosong
return redirect()->back()->with('error', 'Silahkan isi terlebih dahulu form inspeksi.'); return redirect()->back()->with('error', 'Silahkan isi terlebih dahulu form inspeksi.');
} }
// Pilih template PDF berdasarkan nama inspeksi // Pilih template PDF berdasarkan nama inspeksi
$templateView = strtolower($inspeksi->name) === 'rap' $templateView = strtolower($inspeksi->name) === 'rap'
? 'lpj::surveyor.components.print-out.main' ? 'lpj::surveyor.components.print-out.main'
: 'lpj::surveyor.components.print-out.main'; : 'lpj::surveyor.components.print-out.main';
// Generate PDF // Generate PDF
$pdf = PDF::loadView($templateView, compact('permohonan', 'basicData', 'forminspeksi')); $pdf = PDF::loadView($templateView, compact('permohonan', 'basicData', 'forminspeksi'));
$pdf->setPaper('A4', 'portrait'); $pdf->setPaper('A4', 'portrait');
// Tentukan nama file PDF // Tentukan nama file PDF
$namaDebiture = $permohonan->debiture->name . '-' . $permohonan->nomor_registrasi; $namaDebiture = $permohonan->debiture->name . '-' . $permohonan->nomor_registrasi;
$fileName = 'inspeksi-' . $namaDebiture . '-data.pdf'; $fileName = 'inspeksi-' . $namaDebiture . '-data.pdf';
return $pdf->download($fileName); return $pdf->download($fileName);
} }
} }