diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index 9ee18bb..1fdbaa5 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -43,7 +43,7 @@ class LaporanController extends Controller 'penilai', 'dokumenjaminan', ])->find($id); - + if ($permohonan->penilai->type_penilai == 'memo') { return $this->penilaiController->print_out($request = new Request(['documentId' => $permohonan->penilai->dokument_id, 'jaminanId' => $permohonan->dokumenjaminan[0]->jenis_jaminan_id, 'permohonanId' => $permohonan->id, 'statusLpj' => 1, 'type' => 'memo'])); } @@ -75,7 +75,7 @@ class LaporanController extends Controller } // Retrieve data from the database - $query = Permohonan::query()->whereIn('status',['proses-laporan','done'])->whereNotNull('approval_so_at')->whereNotNull('approval_eo_at')->where(function ($q) { + $query = Permohonan::query()->whereIn('status',['proses-laporan','done', 'paparan', 'proses-paparan'])->whereNotNull('approval_so_at')->whereNotNull('approval_eo_at')->where(function ($q) { $q->whereIn('nilai_plafond_id', [1,4]) ->whereNotNull('approval_dd_at') ->orWhereIn('nilai_plafond_id', [2,3]); diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index d4a28bd..37c2bf9 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -496,7 +496,7 @@ class PenilaiController extends Controller }); } - $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?)', ['assign','survey-completed', 'proses-laporan', 'paparan', 'proses-paparan','paparan']); + $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?,?)', ['assign','survey-completed', 'proses-laporan', 'paparan', 'proses-paparan','paparan', 'revisi-laporan']); if (!Auth::user()->hasRole('administrator')) { $query->whereHas('penilaian.userPenilai', function ($q) { @@ -775,20 +775,23 @@ class PenilaiController extends Controller public function storeResume(Request $request) { try { - - // dd($request->all()); $validatedData = $request->validate([ 'permohonan_id' => 'required', - 'document_id' => 'required', + 'dokument_id' => 'required', 'inspeksi_id' => 'required', 'resume' => 'required|array', + 'fakta_positif' => 'nullable|array', + 'fakta_negatif' => 'nullable|array', + 'type' => 'required', + 'action' => 'required', + 'keterangan' => 'nullable|array' ]); - // Simpan atau update data + Penilai::updateOrCreate( [ 'permohonan_id' => $validatedData['permohonan_id'], - 'dokument_id' => $validatedData['document_id'], + 'dokument_id' => $validatedData['dokument_id'], 'inspeksi_id' => $validatedData['inspeksi_id'], ], [ @@ -796,10 +799,51 @@ class PenilaiController extends Controller ] ); + $inspeksi = Inspeksi::where('permohonan_id', $validatedData['permohonan_id']) + ->where('dokument_id', $validatedData['dokument_id']) + ->first(); + if ($inspeksi) { + // Get existing data_form + $existingData = json_decode($inspeksi->data_form, true) ?: []; + + // Structure the fakta data correctly + $existingFaktaData = $existingData['fakta'] ?? []; + + // Gabungkan data baru dengan data yang sudah ada + $updatedFaktaData = array_merge($existingFaktaData, [ + 'fakta_positif' => $validatedData['fakta_positif'] ?? $existingFaktaData['fakta_positif'] ?? null, + 'fakta_negatif' => $validatedData['fakta_negatif'] ?? $existingFaktaData['fakta_negatif'] ?? null, + 'keterangan' => $validatedData['keterangan'] ?? $existingFaktaData['keterangan'] ?? null, + ]); + $existingData['fakta'] = $updatedFaktaData; + + $inspeksi->update([ + 'data_form' => json_encode($existingData), + ]); + } else { + // If inspeksi + $newData = [ + 'fakta' => [ + 'fakta_positif' => $validatedData['fakta_positif'] ?? null, + 'fakta_negatif' => $validatedData['fakta_negatif'] ?? null, + 'keterangan' => $validatedData['keterangan'] ?? null, + ], + ]; + + + + Inspeksi::create([ + 'permohonan_id' => $validatedData['permohonan_id'], + 'dokument_id' => $validatedData['dokument_id'], + 'data_form' => json_encode($newData), + 'name' => $validatedData['type'] + ]); + } + return response()->json([ 'success' => true, - 'message' => 'Berhasil saved resume' + 'message' => 'Berhasil saved resume', ], 200); } catch (\Exception $e) { return response()->json([ @@ -1332,8 +1376,6 @@ class PenilaiController extends Controller $validationRules = [ 'resume' => [ - 'fakta.fakta_positif', - 'fakta.fakta_negatif', 'fisik' ], ]; @@ -1498,5 +1540,20 @@ class PenilaiController extends Controller } + public function revisiSurveyor(Request $request, $id) + { + $permohonan = Permohonan::findOrFail($id); + $permohonan->update([ + 'status' => 'revisi-survey', + 'keterangan' => $request->message, + 'submitted_at' => now() + ]); + + return response()->json([ + 'success' => true, + 'message' => 'Berhasil Revisi Ke surveyor', + ], 200); + } + } diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index b45d7b6..fedefe7 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -17,6 +17,7 @@ use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\Teams; use Modules\Lpj\Models\Inspeksi; use Modules\Lpj\Models\Penilai; +use Modules\Lpj\Models\Regions; use Modules\Location\Models\Province; use Modules\Location\Models\City; use Modules\Location\Models\District; @@ -26,6 +27,7 @@ use Modules\Lpj\Http\Controllers\SurveyorController; use Modules\Lpj\Http\Controllers\PenilaiController; use Modules\Lpj\Http\Requests\FormSurveyorRequest; + class PenilaianController extends Controller { public $user; @@ -404,6 +406,8 @@ class PenilaianController extends Controller 'paparan' => 'Paparan' ]; + $regions = Regions::all(); + $header = $headers[$type] ?? 'Pelaporan'; switch ($header) { @@ -412,7 +416,7 @@ class PenilaianController extends Controller case 'Paparan': return view('lpj::penilaian.paparan-so', compact('header')); default: - return view('lpj::penilaian.otorisator.index', compact('header')); + return view('lpj::penilaian.otorisator.index', compact('header', 'regions')); } } @@ -634,6 +638,7 @@ class PenilaianController extends Controller // Pencarian berdasarkan parameter search if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); + $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); @@ -641,6 +646,7 @@ class PenilaianController extends Controller $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('region', 'name', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -661,13 +667,29 @@ class PenilaianController extends Controller } // Filter berdasarkan region user yang login - if (Auth::user()->hasRole('senior-officer')) { - $query->whereHas('region.teams.teamsUsers', function ($q) { - $q->where('user_id', Auth::id()); - }); + if ($status == 'proses-laporan') { + $requestedRegion = $request->get('search'); + + if ($requestedRegion) { + $query->whereHas('region', function ($q) use ($requestedRegion) { + $q->where('name', $requestedRegion); + }); + } else { + $query->whereHas('region.teams.teamsUsers', function ($q) { + $q->where('user_id', Auth::id()); + }); + } + } else { + if (Auth::user()->hasRole('senior-officer')) { + $query->whereHas('region.teams.teamsUsers', function ($q) { + $q->where('user_id', Auth::id()); + }); + } } + + // Sorting berdasarkan sortField dan sortOrder if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 6654ed5..2255ed7 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -82,13 +82,17 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest; use Modules\Lpj\Emails\SendJadwalKunjunganEmail; use App\Helpers\Lpj; use Modules\Lpj\Models\Authorization; +use Modules\Lpj\Services\SurveyorValidateService; class SurveyorController extends Controller { public $user; + public $validateService; - - + public function __construct(SurveyorValidateService $validateService) + { + $this->validateService = $validateService; + } public function index() { @@ -156,11 +160,12 @@ class SurveyorController extends Controller /** * Store form inspeksi. */ - public function store(FormSurveyorRequest $request) + public function store(Request $request) { try { // Validate request data - $validatedData = $request->validated(); + $validatedData = $request->all(); + // Get action specific rules and process data $processedData = $this->getActionSpecificRules( @@ -237,6 +242,9 @@ class SurveyorController extends Controller $rules = []; $hasAssetDescriptionRules = false; $hasFactaData = false; + + + $pisah = array_filter( explode(',', $action), function ($act) use ($allowedActions) { @@ -244,20 +252,27 @@ class SurveyorController extends Controller } ); + // dd($pisah); + foreach ($pisah as $act) { - $act = trim($act); - $method = $allowedActions[$act]; + $act = trim($act); // Bersihkan spasi + if (isset($allowedActions[$act])) { + $method = $allowedActions[$act]; - $actionRules = $this->$method($data, $request); - $rules = array_merge($rules, $actionRules); + $actionRules = $this->$method($data, $request); + $rules = array_merge($rules, $actionRules); - if (in_array($act, ['apartemen-kantor', 'tanah', 'bangunan', 'rap'])) { - $hasAssetDescriptionRules = true; + // Cek apakah act memerlukan asset description rules + if (in_array($act, ['apartemen-kantor', 'tanah', 'bangunan', 'rap'])) { + $hasAssetDescriptionRules = true; + } + + // Cek apakah act memerlukan fakta data + if (in_array($act, ['rap'])) { + $hasFactaData = true; + } } - if (in_array($act, ['rap'])) { - $hasFactaData = true; - } } if ($hasAssetDescriptionRules) { @@ -499,52 +514,57 @@ class SurveyorController extends Controller $formatFotoData = []; $nomor_registrasi = $request->nomor_registrasi; - + // Generate a unique timestamp for this batch $batchTimestamp = time(); + + // Create a lookup map of existing file names for faster checking + $existingFileNames = []; + if (isset($formatFotojson[$paramName]) && is_array($formatFotojson[$paramName])) { + foreach ($formatFotojson[$paramName] as $existingFile) { + if (isset($existingFile['name'])) { + $existingFileNames[$existingFile['name']] = true; + } + } + } foreach ($files as $index => $file) { $originalName = $file->getClientOriginalName(); $extension = $file->getClientOriginalExtension(); - + $fileNameWithoutExt = pathinfo($originalName, PATHINFO_FILENAME); + // Validasi nama file - if (empty($originalName)) { - $originalName = "file_{$batchTimestamp}"; + if (empty($fileNameWithoutExt)) { + $fileNameWithoutExt = "file_{$batchTimestamp}_{$index}"; } - - // Use batchTimestamp and index to ensure uniqueness + + // Check if this file name already exists in formatFotojson + if (isset($existingFileNames[$fileNameWithoutExt])) { + // File already exists, skip it + continue; + } + + // Use batchTimestamp and index to ensure uniqueness in storage $uniqueFileName = "{$batchTimestamp}_{$index}.{$extension}"; // Simpan file $path = $file->storeAs("surveyor/{$paramName}/{$nomor_registrasi}", $uniqueFileName, 'public'); - // Check if this file already exists in formatFotojson - $fileExists = false; - if (isset($formatFotojson[$paramName]) && is_array($formatFotojson[$paramName])) { - foreach ($formatFotojson[$paramName] as $existingFile) { - // Check if the original file name matches - if (isset($existingFile['name']) && - $existingFile['name'] === pathinfo($originalName, PATHINFO_FILENAME)) { - $fileExists = true; - break; - } - } - } + // Add file data + $fotoData = [ + 'name' => $fileNameWithoutExt, + 'path' => $path, + 'category' => 'lainnya', + 'sub' => null, + 'description' => null, + 'created_by' => Auth::user()->name, + 'created_at' => now()->toDateTimeString(), + ]; - // Only add if this file doesn't already exist - if (!$fileExists) { - $fotoData = [ - 'name' => pathinfo($originalName, PATHINFO_FILENAME), - 'path' => $path, - 'category' => 'lainnya', - 'sub' => null, - 'description' => null, - 'created_by' => Auth::user()->name, - 'created_at' => now()->toDateTimeString(), - ]; - - $formatFotoData[] = $fotoData; - } + $formatFotoData[] = $fotoData; + + // Add to the lookup map to prevent duplicates within the same batch + $existingFileNames[$fileNameWithoutExt] = true; } // Only update if we have new photos to add @@ -756,6 +776,7 @@ class SurveyorController extends Controller $buttonStatusCheck = $this->checkButtonStatus($id); $buttonStatus = json_decode($buttonStatusCheck->getContent(), true); + // Check if button should be disabled if ($buttonStatus['buttonDisable']) { return response()->json([ @@ -764,19 +785,57 @@ class SurveyorController extends Controller ], 422); } + $inspeksiRecords = Inspeksi::with(['dokument.jenisJaminan']) + ->where('permohonan_id', $id) + ->get(); + + + $validateConfig = [ + 'tanah' => 'validateTanah', + 'bangunan' => 'validateBangunan', + 'lingkungan' => 'validateLingkungan', + 'fakta' => 'validateFactData', + 'rap' => 'validateRapData', + ]; + + // Ambil data inspeksi + $inspeksiRecords = Inspeksi::with(['dokument.jenisJaminan']) + ->where('permohonan_id', $id) + ->get(); + + foreach ($inspeksiRecords as $inspeksi) { + $cekname = $inspeksi->name; + + // Pecah nama menjadi array + $names = array_map('trim', explode(',', $cekname)); + $dataForm = json_decode($inspeksi->data_form, true); + + foreach ($names as $name) { + // Validasi hanya untuk nama yang ada dalam konfigurasi + if (array_key_exists($name, $validateConfig)) { + $validateMethod = $validateConfig[$name]; + $invalidFields = $this->validateService->{$validateMethod}($dataForm); + + // Jika validasi gagal, kembalikan respons error + if ($invalidFields) { + return response()->json([ + 'success' => false, + 'message' => ucfirst($name) . ' tidak valid: ' . implode(', ', $invalidFields), + ], 422); + } + } + } + } + // If validation passes, update permohonan status $permohonan = Permohonan::findOrFail($id); - - $permohonan->update([ 'status' => 'survey-completed', 'submitted_at' => now() ]); - - return response()->json([ 'success' => true, 'message' => 'Form surveyor berhasil disubmit' @@ -1384,7 +1443,8 @@ class SurveyorController extends Controller 'type' => $request->input('type'), 'dokument_id' => $request->input('dokument_id'), 'objek_penilaian' => $objekPenilaian, - 'data_pembanding' => $this->formatDataPembanding($request) + 'data_pembanding' => $this->formatDataPembanding($request), + 'keterangan' => $request->input('keterangan') ]; @@ -1974,7 +2034,7 @@ class SurveyorController extends Controller }); } - $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ? ,?,?)', ['assign', 'survey', 'proses-survey', 'request-reschedule', 'reschedule', 'rejected-reschedule', 'approved-reschedule', 'revisi-laporan' ]); + $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ? ,?,?)', ['assign', 'survey', 'proses-survey', 'request-reschedule', 'reschedule', 'rejected-reschedule', 'approved-reschedule', 'revisi-survey' ]); if (!Auth::user()->hasRole('administrator')) { @@ -2295,7 +2355,7 @@ class SurveyorController extends Controller 'province_code' => $data['province_code'] ?? null, ]; - $alamatKey = ($data['alamat_sesuai'] === 'sesuai') ? 'sesuai' : 'tidak sesuai'; + $alamatKey = ($data['alamat_sesuai'] ?? null) === 'sesuai' ? 'sesuai' : 'tidak sesuai'; $alamat = []; // Masukkan key baru yang sesuai @@ -2304,21 +2364,27 @@ class SurveyorController extends Controller 'asset' => [ 'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [], 'jenis_asset' => [ - $data['jenis_asset'] => ($data['jenis_asset'] === 'sesuai') - ? $data['jenis_asset_name'] - : ($data['jenis_asset_tidak_sesuai'] ?? null) - ], - 'alamat' => $alamat, - 'hub_cadeb' => [ - $data['hub_cadeb'] => ($data['hub_cadeb'] == 'sesuai') ? $data['hub_cadeb_sesuai'] : $data['hub_cadeb_tidak_sesuai'] - ], - 'hub_cadeb_penghuni' => [ - $data['hub_cadeb_penghuni'] => ($data['hub_cadeb_penghuni'] == 'sesuai') ? $data['hub_cadeb_penghuni_sesuai'] : $data['hub_penghuni_tidak_sesuai'] - ], + $data['jenis_asset'] ?? null => ($data['jenis_asset'] ?? null) === 'sesuai' + ? ($data['jenis_asset_name'] ?? null) + : ($data['jenis_asset_tidak_sesuai'] ?? null) + ], + 'alamat' => $alamat, + 'hub_cadeb' => [ + $data['hub_cadeb'] ?? null => ($data['hub_cadeb'] ?? null) === 'sesuai' + ? ($data['hub_cadeb_sesuai'] ?? null) + : ($data['hub_cadeb_tidak_sesuai'] ?? null) + ], + 'hub_cadeb_penghuni' => [ + $data['hub_cadeb_penghuni'] ?? null => ($data['hub_cadeb_penghuni'] ?? null) === 'sesuai' + ? ($data['hub_cadeb_penghuni_sesuai'] ?? null) + : ($data['hub_penghuni_tidak_sesuai'] ?? null) + ], + 'pihak_bank' => $data['pihak_bank'] ?? null, 'kordinat_lng' => $data['kordinat_lng'] ?? null, 'kordinat_lat' => $data['kordinat_lat'] ?? null, + 'nomor_nib' => $data['nomor_nib'] ?? null ] ]; } @@ -2326,16 +2392,22 @@ class SurveyorController extends Controller private function getTanahData(array $data): array { //luas tanah key - $luas_tanah_key = ($data['luas_tanah'] === 'sesuai') ? 'sesuai' : 'tidak sesuai'; + // Luas tanah key + $luas_tanah_key = ($data['luas_tanah'] ?? null) === 'sesuai' ? 'sesuai' : 'tidak sesuai'; $luas_tanah = []; - $hasil_tanah = $luas_tanah_key === 'sesuai' ? $data['luas_tanah_sesuai'] : $data['luas_tanah_tidak_sesuai']; + $hasil_tanah = $luas_tanah_key === 'sesuai' + ? ($data['luas_tanah_sesuai'] ?? null) + : ($data['luas_tanah_tidak_sesuai'] ?? null); $luas_tanah[$luas_tanah_key] = $hasil_tanah; - // hadap mata angin - $hadap_mata_angin_key = ($data['hadap_mata_angin'] === 'sesuai') ? 'sesuai' : 'tidak sesuai'; - $hadap_mata_angin = []; - $hasil_hadap_mata_angin = $hadap_mata_angin_key === 'sesuai' ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai']; - $hadap_mata_angin[$hadap_mata_angin_key] = $hasil_hadap_mata_angin; + // Hadap mata angin key + $hadap_mata_angin_key = ($data['hadap_mata_angin'] ?? null) === 'sesuai' ? 'sesuai' : 'tidak sesuai'; + $hadap_mata_angin = []; + $hasil_hadap_mata_angin = $hadap_mata_angin_key === 'sesuai' + ? ($data['hadap_mata_angin_sesuai'] ?? null) + : ($data['hadap_mata_angin_tidak_sesuai'] ?? null); + $hadap_mata_angin[$hadap_mata_angin_key] = $hasil_hadap_mata_angin; + return [ 'tanah' => [ @@ -2415,14 +2487,17 @@ class SurveyorController extends Controller - $luas_tanah_bagunan_key = ($data['luas_tanah_bagunan'] === 'sesuai') ? 'sesuai' : 'tidak sesuai'; + $luas_tanah_bagunan_key = ($data['luas_tanah_bagunan'] ?? null) === 'sesuai' ? 'sesuai' : 'tidak sesuai'; $luas_tanah_bagunan = []; - $hasil_tanah_bagunan = $luas_tanah_bagunan_key === 'sesuai' ? $data['luas_bangunan_sesuai'] : $data['luas_tanah_bagunan_tidak_sesuai']; + $hasil_tanah_bagunan = $luas_tanah_bagunan_key === 'sesuai' + ? ($data['luas_bangunan_sesuai'] ?? null) + : ($data['luas_tanah_bagunan_tidak_sesuai'] ?? null); // Masukkan key baru yang sesuai $luas_tanah_bagunan[$luas_tanah_bagunan_key] = $hasil_tanah_bagunan; + return [ 'bangunan' => [ 'luas_tanah_bagunan' => $luas_tanah_bagunan, @@ -2461,10 +2536,11 @@ class SurveyorController extends Controller false, 'lainnya' ), - 'disekitar_lokasi' => $data['disekitar_lokasi'] === 'yes' ? [ - 'kondisi' => $data['kondisi_bagunan_disekitar_lokasi'] ?? null, - 'sifat' => $data['sifat_bagunan_disekitar_lokasi'] ?? null, - ] : $data['disekitar_lokasi'], + 'disekitar_lokasi' => ($data['disekitar_lokasi'] ?? null) === 'yes' ? [ + 'kondisi' => $data['kondisi_bagunan_disekitar_lokasi'] ?? null, + 'sifat' => $data['sifat_bagunan_disekitar_lokasi'] ?? null, +] : ($data['disekitar_lokasi'] ?? null), + 'kondisi_bagunan_disekitar_lokasi' => $data['kondisi_bagunan_disekitar_lokasi'] ?? null, 'sifat_bagunan_disekitar_lokasi' => $data['sifat_bagunan_disekitar_lokasi'] ?? null, 'dekat_makam' => $data['dekat_makam'] ?? null, @@ -3407,17 +3483,17 @@ class SurveyorController extends Controller $arr1[$key] = $value; } } - + // Bersihkan key lama yang tidak ada di array baru foreach ($arr1 as $key => $value) { if (!array_key_exists($key, $arr2) && $key !== 'signature') { unset($arr1[$key]); } } - + return $arr1; } - + public function print_out_inspeksi($permohonan_id, $dokument_id, $jenis_jaminan_id) diff --git a/app/Services/SurveyorValidateService.php b/app/Services/SurveyorValidateService.php new file mode 100644 index 0000000..8ee8506 --- /dev/null +++ b/app/Services/SurveyorValidateService.php @@ -0,0 +1,392 @@ + $value) { + if (empty($key) || empty($value)) { + $invalidFields[] = "jenis_asset[$key]"; + } + } + + // Validasi data `alamat` + $alamat = $assetData['asset']['alamat'] ?? []; + foreach ($alamat as $key => $alamatData) { + if (empty($key)) { + $invalidFields[] = "alamat[$key]"; + } + + foreach ($alamatData as $field => $value) { + if (empty($value)) { + $invalidFields[] = "alamat[$key][$field]"; + } + } + } + + // Validasi data `hub_cadeb` + $hubCadeb = $assetData['asset']['hub_cadeb'] ?? []; + foreach ($hubCadeb as $key => $value) { + if (empty($key) || empty($value)) { + $invalidFields[] = "Hubungan cadeb/debitur dengan Pemilik Jaminan"; + } + } + + // Validasi data `hub_cadeb_penghuni` + $hubCadebPenghuni = $assetData['asset']['hub_cadeb_penghuni'] ?? []; + foreach ($hubCadebPenghuni as $key => $value) { + if (empty($key) || empty($value)) { + $invalidFields[] = "Hubungan Cadeb/Debitur dengan Penghuni Jaminan"; + } + } + + // Validasi data tambahan lainnya + $fieldsToValidate = [ + 'pihak_bank', + 'kordinat_lng', + 'kordinat_lat', + 'nomor_nib', + ]; + + foreach ($fieldsToValidate as $field) { + if (empty($assetData['asset'][$field])) { + $invalidFields[] = $field; + } + } + + // validasi signature + + $signature = [ + 'penilai', + 'cabang', + 'debitur', + ]; + foreach ($signature as $value) { + if (empty($assetData['signature'][$value])) { + $invalidFields[] = 'Tanda tangan' . $value . ' tidak ada'; + } + } + + // Kembalikan daftar field yang tidak valid + return $invalidFields; + } + + + public function validateTanah(array $data): array + { + $invalidFields = []; + + if (empty($data['tanah']['luas_tanah'])) { + $invalidFields[] = 'luas tanah'; + } + + if (empty($data['tanah']['hadap_mata_angin'])) { + $invalidFields[] = 'hadap mata angin'; + } + + // Validasi bentuk tanah + if (empty($data['tanah']['bentuk_tanah'])) { + $invalidFields[] = 'bentuk tanah'; + } + + // Validasi kontur tanah + if (empty($data['tanah']['kontur_tanah'])) { + $invalidFields[] = 'kontur tanah'; + } + + // Validasi ketinggian tanah + if (empty($data['tanah']['ketinggian_jalan']) && empty($data['tanah']['ketinggian_lebih_tinggi']) && empty($data['tanah']['ketinggian_lebih_rendah'])) { + $invalidFields[] = 'ketinggian tanah'; + } + + // Validasi kontur jalan + if (empty($data['tanah']['kontur_jalan'])) { + $invalidFields[] = 'kontur jalan'; + } + + // Validasi posisi kavling + if (empty($data['tanah']['posisi_kavling'])) { + $invalidFields[] = 'posisi kavling'; + } + + // Validasi tusuk sate + if (!isset($data['tanah']['tusuk_sate'])) { + $invalidFields[] = 'tusuk sate'; + } + + // Validasi lockland + if (!isset($data['tanah']['lockland'])) { + $invalidFields[] = 'lockland'; + } + + // Validasi kondisi fisik tanah + if (empty($data['tanah']['kondisi_fisik_tanah'])) { + $invalidFields[] = 'kondisi fisik tanah'; + } + + return $invalidFields; + } + + + public function validateBangunan(array $data): array + { + $invalidFields = []; + + // Validasi luas tanah banguna + + if (empty($data['bangunan']['luas_tanah_bagunan'])) { + $invalidFields[] = 'luas bangunan'; + } + + + // Validasi jenis bangunan + if (empty($data['bangunan']['jenis_bangunan'])) { + $invalidFields[] = 'jenis bangunan'; + } + + // Validasi kondisi bangunan + if (empty($data['bangunan']['kondisi_bangunan'])) { + $invalidFields[] = 'kondisi bangunan'; + } + + // Validasi sifat bangunan + if (empty($data['bangunan']['sifat_bangunan'])) { + $invalidFields[] = 'sifat bangunan'; + } + + // Validasi sifat bangunan input + if (empty($data['bangunan']['sifat_bangunan_input'])) { + $invalidFields[] = 'sifat bangunan input'; + } + + // Validasi sarana pelengkap + if (empty($data['bangunan']['sarana_pelengkap'])) { + $invalidFields[] = 'sarana pelengkap'; + } + + // Validasi sarana pelengkap input + if (empty($data['bangunan']['sarana_pelengkap_input'])) { + $invalidFields[] = 'sarana pelengkap input'; + } + + return $invalidFields; + } + + public function validateLingkungan(array $data): array + { + $invalidFields = []; + + // Validasi jarak jalan utama + if (empty($data['lingkungan']['jarak_jalan_utama'])) { + $invalidFields[] = 'jarak jalan utama'; + } + + // Validasi jalan lingkungan + if (empty($data['lingkungan']['jalan_linkungan'])) { + $invalidFields[] = 'jalan lingkungan'; + } + + // Validasi jarak CBD point + if (empty($data['lingkungan']['jarak_cbd_point'])) { + $invalidFields[] = 'jarak CBD point'; + } + + // Validasi nama CBD point + if (empty($data['lingkungan']['nama_cbd_point'])) { + $invalidFields[] = 'nama CBD point'; + } + + // Validasi lebar perkerasan jalan + if (empty($data['lingkungan']['lebar_perkerasan_jalan'])) { + $invalidFields[] = 'lebar perkerasan jalan'; + } + + // Validasi perkerasan jalan + if (empty($data['lingkungan']['perkerasan_jalan'])) { + $invalidFields[] = 'perkerasan jalan'; + } + + // Validasi lalu lintas + if (empty($data['lingkungan']['lalu_lintas'])) { + $invalidFields[] = 'lalu lintas'; + } + + // Validasi golongan masyarakat sekitar + if (empty($data['lingkungan']['gol_mas_sekitar'])) { + $invalidFields[] = 'golongan masyarakat sekitar'; + } + + // Validasi tingkat keramaian + if (empty($data['lingkungan']['tingkat_keramaian'])) { + $invalidFields[] = 'tingkat keramaian'; + } + + // Validasi terletak di area + if (empty($data['lingkungan']['terletak_diarea'])) { + $invalidFields[] = 'terletak di area'; + } + + // Validasi lokasi sekitar + if (isset($data['lingkungan']['disekitar_lokasi']) && $data['lingkungan']['disekitar_lokasi'] === 'yes') { + if (empty($data['lingkungan']['kondisi_bagunan_disekitar_lokasi'])) { + $invalidFields[] = 'kondisi bangunan di sekitar lokasi'; + } + + if (empty($data['lingkungan']['sifat_bagunan_disekitar_lokasi'])) { + $invalidFields[] = 'sifat bangunan di sekitar lokasi'; + } + } + + // Validasi dekat makam + if (isset($data['lingkungan']['dekat_makam']) && $data['lingkungan']['dekat_makam'] === 'yes') { + if (empty($data['lingkungan']['jarak_makam'])) { + $invalidFields[] = 'jarak makam'; + } + + if (empty($data['lingkungan']['nama_makam'])) { + $invalidFields[] = 'nama makam'; + } + } + + // Validasi dekat TPS + if (isset($data['lingkungan']['dekat_tps']) && $data['lingkungan']['dekat_tps'] === 'yes') { + if (empty($data['lingkungan']['jarak_tps'])) { + $invalidFields[] = 'jarak TPS'; + } + + if (empty($data['lingkungan']['nama_tps'])) { + $invalidFields[] = 'nama TPS'; + } + } + + // Validasi fasilitas dekat object + if (empty($data['lingkungan']['fasilitas_dekat_object'])) { + $invalidFields[] = 'fasilitas dekat object'; + } + + // Validasi fasilitas dekat object input + if (empty($data['lingkungan']['fasilitas_dekat_object_input'])) { + $invalidFields[] = 'fasilitas dekat object input'; + } + + return $invalidFields; + } + + + public function validateFactData(array $data): array + { + $invalidFields = []; + + // Validasi fakta_positif dan fakta_negatif + if (empty($data['fakta']['fakta_positif'])) { + $invalidFields[] = 'fakta_positif harus diisi'; + } + if (empty($data['fakta']['fakta_negatif'])) { + $invalidFields[] = 'fakta_negatif harus diisi'; + } + + // Validasi rute_menuju + if (empty($data['fakta']['rute_menuju'])) { + $invalidFields[] = 'rute_menuju harus diisi'; + } + + // Validasi batas_batas dan batas_batas_input + if (empty($data['fakta']['batas_batas']) && empty($data['fakta']['batas_batas_input'])) { + $invalidFields[] = 'Batas batas'; + } + + // Validasi kondisi_lingkungan + if (empty($data['fakta']['kondisi_lingkungan'])) { + $invalidFields[] = 'kondisi_lingkungan harus diisi'; + } + + return $invalidFields; + } + + + public function validateRapData(array $data): array + { + $invalidFields = []; + + // Validasi pengalaman_developer + if (empty($data['pengalaman_developer'])) { + $invalidFields[] = 'Pengalaman developer harus diisi'; + } + + // Validasi kondisi_perumahan + if (empty($data['kondisi_perumahan'])) { + $invalidFields[] = 'Kondisi perumahan harus diisi'; + } + + // Validasi progres_pembangunan + if (empty($data['progres_pembangunan'])) { + $invalidFields[] = 'Progres pembangunan harus diisi'; + } + + // Validasi partisi + if (isset($data['partisi'])) { + foreach ($data['partisi'] as $name => $values) { + if (empty($values['value'])) { + $invalidFields[] = "Partisi '{$name}' harus memiliki nilai"; + } + } + } + + // Validasi jumlah_unit + if (empty($data['jumlah_unit'])) { + $invalidFields[] = 'Jumlah unit harus diisi'; + } + + // Validasi batas_batas_perumahan + if (empty($data['batas_batas_perumahan'])) { + $invalidFields[] = 'Batas batas perumahan harus diisi'; + } + + // Validasi fasus_fasum + if (empty($data['fasus_fasum'])) { + $invalidFields[] = 'Fasus fasum harus diisi'; + } + + // Validasi harga_unit + if (empty($data['harga_unit'])) { + $invalidFields[] = 'Harga unit harus diisi'; + } + + // Validasi target_market + if (empty($data['target_market'])) { + $invalidFields[] = 'Target market harus diisi'; + } + + // Validasi kerjasama_dengan_bank + if (empty($data['kerjasama_dengan_bank'])) { + $invalidFields[] = 'Kerjasama dengan bank harus diisi'; + } + + // Validasi rute_menuju_lokasi + if (empty($data['rute_menuju_lokasi'])) { + $invalidFields[] = 'Rute menuju lokasi harus diisi'; + } + + return $invalidFields; + } + + + +} diff --git a/resources/views/component/form-penilai.blade.php b/resources/views/component/form-penilai.blade.php index eb31be3..9629021 100644 --- a/resources/views/component/form-penilai.blade.php +++ b/resources/views/component/form-penilai.blade.php @@ -662,8 +662,8 @@ -