update export basic data dan tampilan awal form surveyor

This commit is contained in:
majid
2024-11-29 22:16:04 +07:00
parent b52ffa5106
commit 8287ce3963
15 changed files with 943 additions and 773 deletions

View File

@@ -5,6 +5,8 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\BasicDataSurveyorExport;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
@@ -99,22 +101,6 @@ class SurveyorController extends Controller
$branches = Branch::all();
$provinces = Province::all();
$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();
$jenisKendaraan = JenisKendaraan::all();
$jenisKapal = JenisKapal::all();
$jenisPesawat = JenisPesawat::all();
$modelAlatBerat = ModelAlatBerat::all();
$denah = Denah::where('permohonan_id', $id)->get();
$fotojaminan = FotoJaminan::where('permohonan_id', $id)->get();
@@ -122,8 +108,6 @@ class SurveyorController extends Controller
->where('permohonan_id', $id)
->get();
$jenisJaminanIds = $permohonan->debiture->documents->pluck('jenisJaminan.id')->toArray(); // Convert to array
$jaminanId = $jenisJaminanIds[0];
@@ -135,14 +119,14 @@ class SurveyorController extends Controller
$forminspeksi = json_decode($inpeksi->data_form, true);
$formFoto = json_decode($inpeksi->foto_form, true);
$formDenah = json_decode($inpeksi->denah_form, true);
$formPembanding = json_decode($inpeksi->data_pembanding, true);
} else {
$forminspeksi = null;
$formFoto = null;
$formDenah = null;
$formPembanding = null;
}
return view('lpj::surveyor.detail', compact(
'denah',
'analisa',
@@ -151,25 +135,12 @@ class SurveyorController extends Controller
'branches',
'provinces',
'bentukTanah',
'konturTanah',
'posisiKavling',
'kondisiFisikTanah',
'ketinggianTanah',
'kondisiBangunan',
'jenisBangunan',
'sifatBangunan',
'spekKategoriBagunan',
'spekBangunan',
'saranaPelengkap',
'arahMataAngin',
'forminspeksi',
'formDenah',
'formFoto',
'jaminanId',
'jenisKendaraan',
'jenisKapal',
'jenisPesawat',
'modelAlatBerat'
'formPembanding'
));
}
/**
@@ -179,7 +150,7 @@ class SurveyorController extends Controller
{
$data = $request->validated();
if (!$data) {
return response()->json(['success' => false, 'message' => 'Invalid data'], 400);
@@ -191,18 +162,22 @@ class SurveyorController extends Controller
$action = $request->input('type');
$rules = $this->getActionSpecificRules($data, $action, $request);
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first();
$data = $rules;
if (!$inspeksi) {
Inspeksi::create([
'permohonan_id' => $request->input('permohonan_id'),
'data_form' => json_encode($rules),
'name' => $request->input('type'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
]);
} else {
$inspeksi->update(['data_form' => json_encode($rules)]);
}
// $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first();
// if (!$inspeksi) {
// Inspeksi::create([
// 'permohonan_id' => $request->input('permohonan_id'),
// 'data_form' => json_encode($rules),
// 'name' => $request->input('type'),
// 'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
// ]);
// } else {
// $inspeksi->update(['data_form' => json_encode($rules)]);
// }
DB::commit();
@@ -570,7 +545,7 @@ class SurveyorController extends Controller
return response()->json(['success' => false, 'message' => 'Failed to save data: ' . $e->getMessage()], 500);
}
}
/**
* Form inspeksi.
*/
@@ -914,23 +889,23 @@ class SurveyorController extends Controller
'penilaian',
'documents',
])->findOrFail($id);
$jenisAssetUpdated = false;
if ($request->input('types') == 'jenis_asset') {
$this->updateJenisAsset($permohonan, $request);
$jenisAssetUpdated = true;
}
if (in_array($request->input('types'), ['analisa_tanah', 'analisa_bangunan', 'analisa_unit'])) {
$key = match ($request->input('types')) {
'analisa_tanah' => 'luas_tanah',
'analisa_bangunan' => 'luas_bangunan',
'analisa_unit' => 'luas_unit',
};
$this->updateDetails($permohonan, $key, $request->input($key));
}
return response()->json([
'success' => true,
'message' => 'Data berhasil disimpan',
@@ -940,8 +915,8 @@ class SurveyorController extends Controller
return response()->json(['error' => 'Something went wrong', 'message' => $e->getMessage()], 500);
}
}
private function updateJenisAsset($permohonan, $request)
{
$jenis_jaminan_id = $permohonan->debiture->documents->first()->jenis_jaminan_id;
@@ -951,35 +926,35 @@ class SurveyorController extends Controller
'jenis_jaminan_id' => $request->input('jenis_asset'),
]);
}
private function updateDetails($permohonan, $key, $newValue)
{
$document = $permohonan->debiture->documents->first();
if (!$document) {
throw new \Exception("Document not found");
}
$detailsUpdate = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->first();
if (!$detailsUpdate) {
throw new \Exception("DetailDokumenJaminan not found");
}
$datas = json_decode($detailsUpdate->details, true) ?? [];
if (is_numeric($newValue)) {
$newValue = [$key => $newValue];
}
if (!is_array($newValue)) {
throw new \InvalidArgumentException("'{$key}' must be an array or valid JSON string");
}
foreach ($newValue as $subKey => $value) {
$datas[$subKey] = $value; // Update atau tambahkan key baru
}
$detailsUpdate->update([
'details' => json_encode($datas),
]);
@@ -1230,6 +1205,7 @@ class SurveyorController extends Controller
'fasilitas-objek' => FasilitasObjek::class,
'merupakan-daerah' => MerupakanDaerah::class,
'jenis-unit' => JenisUnit::class,
'perkerasan-jalan' => PerkerasanJalan::class,
];
@@ -1303,74 +1279,103 @@ class SurveyorController extends Controller
'fasilitas-objek' => ['Fasilitas Umum Dekat Objek', 'fasilitas-objek'],
];
private function getAssetData($data)
private function getAssetData(array $data): array
{
return [
'asset' =>[
'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [],
'jenis_asset' => $data['jenis_asset'] ?? null,
'jenis_asset_tidak_sesuai' => $data['jenis_asset_tidak_sesuai'] ?? null,
'alamat_sesuai' => $data['alamat_sesuai'] ?? null,
'alamat_tidak_sesuai' => $data['alamat_tidak_sesuai'] ?? null,
$alamatData = [
'nama_jalan' => $data['nama_jalan'] ?? null,
'desa_kelurahan' => $data['desa_kelurahan'] ?? null,
'kecamatan' => $data['kecamatan'] ?? null,
'kota_kabupaten' => $data['kota_kabupaten'] ?? null,
'provinsi' => $data['provinsi'] ?? null,
'kordinat_lng' => $data['kordinat_lng'] ?? null,
'kordinat_lat' => $data['kordinat_lat'] ?? null,
]];
];
return [
'asset' => [
'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [],
'jenis_asset' => [
$data['jenis_asset'] => ($data['jenis_asset'] === 'sesuai')
? $data['jenis_asset']
: ($data['jenis_asset_tidak_sesuai'] ?? null)
],
'alamat' => [
$data['alamat_sesuai'] => $alamatData
],
'kordinat_lng' => $data['kordinat_lng'] ?? null,
'kordinat_lat' => $data['kordinat_lat'] ?? null,
]
];
}
private function getTanahData($data, $request): array
private function getTanahData(array $data): array
{
return [
'tanah' => [
'luas_tanah' => $data['luas_tanah'] ?? null,
'luas_tanah_tidak_sesuai' => $data['luas_tanah_tidak_sesuai'] ?? null,
'hadap_mata_angin' => $data['hadap_mata_angin'] ?? null,
'hadap_mata_angin_tidak_sesuai' => $data['hadap_mata_angin_tidak_sesuai'] ?? null,
'bentuk_tanah' => $data['bentuk_tanah'] ?? null,
'bentuk_tanah_lainnya' => $data['bentuk_tanah_lainnya'] ?? null,
'kontur_tanah' => $data['kontur_tanah'] ?? [],
'ketinggian_tanah' => $data['ketinggian_tanah'] ?? [],
'ketinggian_tanah_tidak_sesuai' => $data['ketinggian_tanah_tidak_sesuai'] ?? [],
'kontur_jalan' => $data['kontur_jalan'] ?? null,
'ketinggian_jalan' => $data['ketinggian_jalan'] ?? [],
'posisi_kavling' => $data['posisi_kavling'] ?? [],
'posisi_kavling_lainnya' => $data['posisi_kavling_lainnya'] ?? null,
'tusuk_sate' => $data['tusuk_sate'] ?? null,
'lockland' => $data['lockland'] ?? null,
'kondisi_fisik_tanah' => $data['kondisi_fisik_tanah'] ?? [],
'kondisi_fisik_tanah_lainnya' => $data['kondisi_fisik_tanah_lainnya'] ?? null,
],
'luas_tanah' => $this->getFieldData(
$data,
'luas_tanah',
true
),
'hadap_mata_angin' => $this->getFieldData(
$data,
'hadap_mata_angin',
true
),
'bentuk_tanah' => $this->getFieldData(
$data,
'bentuk_tanah',
false,
'lainnya'
),
'kontur_tanah' => $data['kontur_tanah'] ?? [],
'ketinggian_tanah' => [
'ketinggian' => $data['kontur_tanah'] ?? null,
'lebih_tinggi' => $data['ketinggian_lebih_tinggi'] ?? null,
'lebih_rendah' => $data['ketinggian_lebih_rendah'] ?? null
],
'kontur_jalan' => $data['kontur_jalan'] ?? null,
'ketinggian_jalan' => $data['ketinggian_jalan'] ?? [],
'posisi_kavling' => $this->getFieldData(
$data,
'posisi_kavling',
false,
'lainnya'
),
'tusuk_sate' => $data['tusuk_sate'] ?? null,
'lockland' => $data['lockland'] ?? null,
'kondisi_fisik_tanah' => $this->getFieldData(
$data,
'kondisi_fisik_tanah',
false,
'lainnya'
)
]
];
}
private function getBangunanData($data, $request): array
{
$data = $request->all();
$result = [];
// foreach ($data['nama_bagunan'] as $index => $bangunan) {
// $bangunanData = [
// 'bangunan' => $bangunan,
// 'kategori' => []
// ];
foreach ($data['nama_bagunan'] as $index => $bangunan) {
$bangunanData = [
'bangunan' => $bangunan,
'kategori' => []
];
// foreach ($data['spek_kategori_bangunan'] as $kategoriIndex => $kategori) {
// if (isset($data['spek_bangunan'][$kategori])) {
// $bangunanData['kategori'][] = [
// 'kategori' => $kategori,
// 'spesifikasi' => $data['spek_bangunan'][$kategori]
// ];
// }
// }
foreach ($data['spek_kategori_bangunan'] as $kategoriIndex => $kategori) {
if (isset($data['spek_bangunan'][$kategori])) {
$bangunanData['kategori'][] = [
'kategori' => $kategori,
'spesifikasi' => $data['spek_bangunan'][$kategori]
];
}
}
// $result[] = $bangunanData;
// }
$result[] = $bangunanData;
}
return [
'bangunan' => [
@@ -1380,10 +1385,11 @@ class SurveyorController extends Controller
'sifat_bangunan' => $data['sifat_bangunan'] ?? null,
'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null,
'spesifikasi_bangunan' => $result ?? null,
// 'spek_bangunan' => $data['spek_bangunan'] ?? [],
'sarana_pelengkap' => $data['sarana_pelengkap'] ?? [],
'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null,
],
'sarana_pelengkap' => $this->mapArrayWithInputs(
$data['sarana_pelengkap'] ?? [],
$data['sarana_pelengkap_input'] ?? []
),
],
];
}
@@ -1423,8 +1429,9 @@ class SurveyorController extends Controller
'fakta_positif' => $data['fakta_positif'] ?? null,
'fakta_negatif' => $data['fakta_negatif'] ?? null,
'rute_menuju' => $data['rute_menuju'] ?? null,
'batas_batas' => $data['batas_batas'] ?? null,
'batas_batas_input' => $data['batas_batas_input'] ?? null,
'batas_batas' => $this->mapArrayWithInputs(
$data['batas_batas'] ?? null, $data['batas_batas_input'] ?? null
),
'kondisi_lingkungan' => $data['kondisi_lingkungan'] ?? null,
'kondisi_lain_bangunan' => $data['kondisi_lain_bangunan'] ?? null,
'informasi_dokument' => $data['informasi_dokument'] ?? null,
@@ -1462,7 +1469,7 @@ class SurveyorController extends Controller
$factData[$fotoType] = $dataForm[$fotoType] ?? null;
}
}
}else{
} else {
foreach ($fotoTypes as $fotoType) {
$factData[$fotoType] = $this->updateOrDeleteFile($data, $request, $fotoType);
}
@@ -1865,9 +1872,15 @@ class SurveyorController extends Controller
/**
* Helper untuk upload file
*
* @param $file
* @param $type
* @return path name
*/
// function upload file to storage
private function uploadFile($file, $type)
{
if (!$file->isValid()) {
@@ -1884,5 +1897,76 @@ class SurveyorController extends Controller
return str_replace('public/', '', $path);
}
}
/**
* Helper untuk memetakan array dengan inputannya
*
* @param array $keys Array kunci
* @param array $values Array nilai/input
* @return array
*/
private function mapArrayWithInputs(array $keys, array $values): array
{
$result = [];
foreach ($keys as $index => $key) {
$result[$key] = $values[$index] ?? null;
}
return $result;
}
/**
* Helper method generic untuk mengambil data field
*
* @param array $data Array sumber data
* @param string $fieldName Nama field
* @param bool $checkKesesuaian Apakah perlu cek kesesuaian
* @param string|null $extraField Field tambahan (misal 'lainnya')
* @return array
*/
private function getFieldData(
array $data,
string $fieldName,
bool $checkKesesuaian = false,
?string $extraField = null
): array {
if ($checkKesesuaian) {
return [
$data[$fieldName] ?? '' => ($data[$fieldName] ?? '') === 'sesuai'
? ($data[$fieldName] ?? '')
: ($data["{$fieldName}_tidak_sesuai"] ?? '')
];
}
$result = [
$fieldName => $data[$fieldName] ?? null
];
if ($extraField) {
$result[$extraField] = $data["{$fieldName}_{$extraField}"] ?? null;
}
return $result;
}
public function export(string $type)
{
$modelClass = $this->getModelClass($type);
if (!$modelClass) {
return response()->json([
'message' => 'Invalid type provided.',
'available_types' => array_keys($this->modelClasses),
], 400);
}
// Return Excel download
return Excel::download(new BasicDataSurveyorExport($modelClass), $type . '.xlsx');
}
}