findOrFail($id); $surveyor = $id; $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(); $jenisJaminanIds = $permohonan->debiture->documents; $denah = Denah::where('permohonan_id', $id)->get(); $fotojaminan = FotoJaminan::where('permohonan_id', $id)->get(); $analisa = Analisa::with('analisaUnit', 'analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan') ->where('permohonan_id', $id) ->get(); $inpeksi = Inspeksi::where('permohonan_id', $id)->first(); if ($inpeksi) { $forminspeksi = json_decode($inpeksi->data_form, true); $formFoto = json_decode($inpeksi->foto_form, true); $formDenah = json_decode($inpeksi->denah_form, true); } else { $forminspeksi = null; $formFoto = null; $formDenah = null; } return view('lpj::surveyor.detail', compact( 'denah', 'analisa', 'permohonan', 'surveyor', 'branches', 'provinces', 'bentukTanah', 'konturTanah', 'posisiKavling', 'kondisiFisikTanah', 'ketinggianTanah', 'kondisiBangunan', 'jenisBangunan', 'sifatBangunan', 'spekKategoriBagunan', 'spekBangunan', 'saranaPelengkap', 'arahMataAngin', 'forminspeksi', 'formDenah', 'formFoto', )); } /** * Store form inspeksi. */ public function store(FormSurveyorRequest $request) { $data = $request->validated(); if (!$data) { return response()->json(['success' => false, 'message' => 'Invalid data'], 400); } try { DB::beginTransaction(); $action = $request->input('type'); $rules = $this->getActionSpecificRules($data, $action, $request); $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->first(); if ($inspeksi) { $inspeksi->update(['data_form' => json_encode($rules)]); } else { Inspeksi::create([ 'permohonan_id' => $request->permohonan_id, 'data_form' => json_encode($rules), 'name' => $request->type, ]); } DB::commit(); return response()->json(['success' => true, 'message' => 'Data saved successfully', 'data' => $rules], 200); } catch (Exception $e) { DB::rollBack(); return response()->json(['success' => false, 'message' => 'Failed to save data: ' . $e->getMessage()], 500); } } private function getActionSpecificRules($data, $action, $request): array { $pisah = explode(',', $action); $allRules = [ 'tanah' => $this->getTanahData($data, $request), 'bangunan' => $this->getBangunanData($data, $request), 'kapal' => $this->getKapalData($data, $request), 'kendaraan' => $this->getKendaraanData($data, $request), 'mesin' => $this->getMesinData($data, $request), 'pesawat' => $this->getPesawatData($data, $request), 'alat-berat' => $this->getAlatBeratData($data, $request), 'apartemen-kantor' => $this->getUnitData($data, $request), 'lingkungan' => $this->getLingkunganData($data, $request), 'fakta' => $this->getFactData($data, $request), ]; $rules = []; $hasAssetDescriptionRules = false; foreach ($pisah as $act) { if (isset($allRules[$act])) { $rules = array_merge($rules, $allRules[$act]); if ($act == 'tanah' || $act == 'bangunan') { $hasAssetDescriptionRules = true; } } } if ($hasAssetDescriptionRules) { $rules = array_merge($rules, $this->getAssetData($data)); } return $rules; } public function storeDenah(Request $request) { try { $validatedData = $request->validate([ 'foto_denah' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'luas' => 'required|numeric', 'permohonan_id' => 'required', 'jenis_jaminan_id' => 'required' ]); $validatedData['foto_denah'] = $this->uploadFile($request->file('foto_denah'), 'foto_denah'); $formatJsonDenah = [ 'foto_denah' => $validatedData['foto_denah'], 'luas' => $validatedData['luas'], ]; $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->first(); if ($request->input('permohonan_id') == $inspeksi->permohonan_id) { $inspeksi->update([ 'denah_form' => json_encode($formatJsonDenah) ]); } else { Inspeksi::create([ 'permohonan_id' => $request->input('permohonan_id'), 'denah_form' => json_encode($formatFotojson) ]); } return response()->json(['success' => true, 'message' => 'Data berhasil disimpan', 'data' => $formatJsonDenah], 200); } catch (Exception $e) { return response()->json(['success' => false, 'message' => 'Data gagal disimpan: ' . $e->getMessage()], 500); } } public function storeFoto(Request $request) { $validatedData = $request->validate([ 'permohonan_id' => 'required', 'jenis_jaminan_id' => 'required', 'analisa_type' => 'required|in:tanah_bangunan,unit', 'pendamping' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_objek.*' => 'required|string|max:255', 'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_lingkungan.*' => 'required|string|max:255', 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_rute.*' => 'required|string|max:255', 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_lantai_unit.*' => 'nullable|string|max:255', 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_rute_lainnya.*' => 'nullable|string', 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_lantai_lainnya.*' => 'nullable|string|max:255', 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_basement.*' => 'nullable|string|max:255', 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_gerbang' => 'nullable|string|max:255', ]); try { $rute_menuju_lokasi = []; $object_jaminan = []; $lingkungan = []; $foto_lantai_unit = []; $foto_lantai_lainnya = []; $foto_rute_lainnya = []; foreach ($request->file('foto_rute', []) as $key => $value) { $fotoRutePath = $this->uploadFile($request->file('foto_rute.' . $key), 'foto_rute.' . $key); $rute_menuju_lokasi[] = [ 'name_rute' => $request->input('name_rute.' . $key), 'foto_rute' => $fotoRutePath, ]; } foreach ($request->file('foto_objek', []) as $key => $value) { $fotoObjekPath = $this->uploadFile($request->file('foto_objek.' . $key), 'foto_objek.' . $key); $object_jaminan[] = [ 'nama_objek' => $request->input('name_objek.' . $key), 'foto_object' => $fotoObjekPath, 'deskripsi_objek' => $request->input('deskripsi_objek.' . $key), ]; } foreach ($request->file('foto_lingkungan', []) as $key => $value) { $fotoLingkunganPath = $this->uploadFile($request->file('foto_lingkungan.' . $key), 'foto_lingkungan.' . $key); $lingkungan[] = [ 'name_lingkungan' => $request->input('name_lingkungan.' . $key), 'foto_lingkungan' => $fotoLingkunganPath, ]; } foreach ($request->file('foto_lantai_unit', []) as $key => $value) { $foto_lantai_unit_Path = $this->uploadFile($request->file('foto_lantai_unit.' . $key), 'foto_lantai_unit.' . $key); $foto_lantai_unit[] = [ 'name_lantai_unit' => $request->input('name_lantai_unit.' . $key), 'foto_lantai_unit' => $foto_lantai_unit_Path, ]; } foreach ($request->file('foto_rute_lainnya', []) as $key => $value) { $foto_rute_lainnya_path = $this->uploadFile($request->file('foto_rute_lainnya.' . $key), 'foto_rute_lainnya.' . $key); $foto_rute_lainnya[] = [ 'name_rute_lainnya' => $request->input('name_rute_lainnya.' . $key), 'foto_rute_lainnya' => $foto_rute_lainnya_path, ]; } foreach ($request->file('foto_lantai_lainnya', []) as $key => $value) { $foto_lantai_lainnya_path = $this->uploadFile($request->file('foto_lantai_lainnya.' . $key), 'foto_lantai_lainnya.' . $key); $foto_lantai_lainnya[] = [ 'name_lantai_lainnya' => $request->input('name_lantai_lainnya.' . $key), 'foto_lantai_lainnya' => $foto_lantai_lainnya_path, ]; } $basement = $this->uploadFile($request->file('foto_basement'), 'foto_basement'); $gerbang = $this->uploadFile($request->file('foto_gerbang'), 'foto_gerbang'); $pendamping = $this->uploadFile($request->file('pendamping'), 'pendamping'); $formatFotojson = [ 'rute_menuju_lokasi' => $rute_menuju_lokasi, 'object_jaminan' => $object_jaminan, 'lingkungan' => $lingkungan ,'foto_lantai_unit' => $foto_lantai_unit, 'foto_lantai_lainnya' => $foto_lantai_lainnya, 'foto_rute_lainnya' => $foto_rute_lainnya, 'basement' => $basement, 'gerbang' => $gerbang, 'pendamping' => $pendamping ]; $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->first(); if ($request->input('permohonan_id') == $inspeksi->permohonan_id) { $inspeksi->update([ 'foto_form' => json_encode($formatFotojson) ]); } else { Inspeksi::create([ 'permohonan_id' => $request->input('permohonan_id'), 'foto_form' => json_encode($formatFotojson) ]); } return response()->json(['success' => true, 'message' => 'Data berhasil disimpan', 'data' => $formatFotojson], 200); } catch (Exception $e) { return response()->json(['success' => false, 'message' => 'Failed to upload: ' . $e->getMessage()], 500); } } public function submitSurveyor($id) { try { $cekButton = $this->checkButtonStatus($id)->getData(); if (!$cekButton->buttonDisable) { $permohonan = Permohonan::find($id); $permohonan->update([ 'status' => 'done', ]); return response()->json(['success' => true, 'message' => 'Form surveyor submitted successfully'], 200); } else { return response()->json(['error' => 'Something went wrong'], 400); } } catch (Exception $e) { return response()->json(['error' => 'Something went wrong', 'message' => $e->getMessage()], 500); } } public function checkButtonStatus($id) { try { $inpeksi = Inspeksi::where('permohonan_id', $id)->first(); if ($inpeksi) { $forminspeksi = json_decode($inpeksi->data_form, true); $formFoto = json_decode($inpeksi->foto_form, true); $buttonDisable = false; if ( $formFoto && count($formFoto) > 0 && $forminspeksi ) { $buttonDisable = false; } else { $buttonDisable = true; } return response()->json(['buttonDisable' => $buttonDisable]); } else { return response()->json(['buttonDisable' => true]); } } catch (\Exception $e) { return response()->json(['error' => 'Something went wrong', 'message' => $e->getMessage()], 500); } } public function storeJadwal(Request $request) { try { $validate = $request->validate([ 'id' => 'required', 'waktu_penilaian' => 'required', 'deskripsi_penilaian' => 'required' ]); // return response()->json([ // 'daa'=>$validate // ]); $id = $request->input('id'); $penilaian = Penilaian::findOrFail($id); $penilaian->update([ 'waktu_penilaian' => $validate['waktu_penilaian'], 'deskripsi_penilaian' => $validate['deskripsi_penilaian'], ]); return redirect() ->route('surveyor.index') ->with('success', 'Jadwal berhasil dibuat.'); } catch (\Exception $e) { return redirect() ->route('surveyor.index') ->with('error', 'Gagal membuat jadwal: ' . $e->getMessage()); } } public function storeAproved($id) { try { $penilaian = Penilaian::findOrFail($id); $penilaian->update([ 'authorized_status' => 1, ]); return redirect() ->route('permohonan.index') ->with('success', 'Jadwal berhasil di aprove.'); } catch (\Exception $e) { return redirect() ->route('permohonan.index') ->with('error', 'Gagal membuat jadwal: ' . $e->getMessage()); } } /** * Form inspeksi. */ public function formInspeksi($id, $jaminanId) { $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); // Auth::user()->id $link_url_region = Teams::with('regions', 'teamsUsers') ->whereHas('teamsUsers', function ($query) { $query->where('user_id', Auth::user()->id); })->first(); $branches = Branch::all(); $provinces = Province::all(); $surveyor = $id; $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(); $lantai = Lantai::all(); $viewUnit = ViewUnit::all(); $golMasySekitar = GolonganMasySekitar::all(); $tingkatKeramaian = TingkatKeramaian::all(); $laluLintasLokasi = LaluLintasLokasi::all(); $perkerasanJalan = PerkerasanJalan::all(); // return response()->json([ // 'per'=> // $permohonan]); $inpeksi = Inspeksi::where('permohonan_id', $id)->first(); $forminspeksi = null; if ($inpeksi) { $forminspeksi = json_decode($inpeksi->data_form, true); } return view('lpj::surveyor.components.inspeksi', compact( 'permohonan', 'surveyor', 'branches', 'provinces', 'bentukTanah', 'konturTanah', 'posisiKavling', 'kondisiFisikTanah', 'ketinggianTanah', 'kondisiBangunan', 'jenisBangunan', 'sifatBangunan', 'spekKategoriBagunan', 'spekBangunan', 'saranaPelengkap', 'arahMataAngin', 'lantai', 'viewUnit', 'golMasySekitar', 'tingkatKeramaian', 'laluLintasLokasi', 'perkerasanJalan', 'link_url_region', 'forminspeksi' )); } /** * Denah. */ public function denah($id, $jaminanId) { $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); $denah = null; $inpeksi = Inspeksi::where('permohonan_id', $id)->first(); $formDenah = null; if ($inpeksi) { $formDenah = json_decode($inpeksi->denah_form, true); } // return response()->json($formDenah); return view('lpj::surveyor.components.denah', compact('permohonan', 'denah', 'formDenah')); } /** * Foto. */ public function foto($id, $jaminanId) { $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); $surveyor = $id; $branches = Branch::all(); $provinces = Province::all(); $inpeksi = Inspeksi::where('permohonan_id', $id)->first(); $formFoto = null; if ($inpeksi) { $formFoto = json_decode($inpeksi->foto_form, true); } $fotoJaminan = null; // return response()->json([ // 'inspeksi' => $formFoto, // ]); return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan', 'formFoto')); } /** * Data pembanding. */ public function dataPembanding($id) { $permohonan = Permohonan::with( [ 'user', 'debiture.province', 'debiture.city', 'debiture.district', 'debiture.village', 'branch', 'tujuanPenilaian', 'penilaian' ], )->findOrFail($id); $surveyor = $id; $branches = Branch::all(); $provinces = Province::all(); return view('lpj::surveyor.detail', compact('permohonan', 'surveyor', 'branches', 'provinces')); } private function getHeader(string $type): array { return self::HEADERS[$type] ?? []; } public function data(Request $request) { $type = $request->route('type'); $header = $this->getHeader($request->route('type')); return view('lpj::surveyor.data.index', compact('header')); } public function createData($type) { $spekKategoriBagunan = SpekKategoritBangunan::all(); $header = $this->getHeader($type); return view('lpj::surveyor.data.form', compact('header', 'spekKategoriBagunan')); } public function storeData(SurveyorRequest $request, $type) { $validate = $request->validated(); if ($validate) { try { $type = $request->route('type'); $modelClass = $this->getModelClass($type); if (!$modelClass) { return redirect() ->route('basicdata.'. $type .'.index') ->with('error', 'Invalid type specified.'); } if ($type == 'spek-bangunan') { $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; } $data = array_merge($validate, ['status' => true]); $modelClass::create($data); return redirect() ->route('basicdata.' . $type .'.index') ->with('success', 'created successfully'); } catch (Exeception $e) { return redirect() ->route('basicdata.' . $type .'.index') ->with('error', $th->getMessage()); } } } public function editData($type, $id) { $dataMap = [ 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah', BentukTanah::class], 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah', KonturTanah::class], 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling', PosisiKavling::class], 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah', KetinggianTanah::class], 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah', KondisiFisikTanah::class], 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan', JenisBangunan::class], 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan', KondisiBangunan::class], 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan', SifatBangunan::class], 'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan', SpekBangunan::class], 'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan', SpekKategoritBangunan::class], 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap', SaranaPelengkap::class], 'lantai-unit' => ['Lantai Unit', 'lantai-unit', Lantai::class], 'view-unit' => ['View Unit', 'view-unit', ViewUnit::class], 'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar', GolonganMasySekitar::class], ]; if (!array_key_exists($type, $dataMap)) { return redirect()->back()->with('error', 'Invalid type specified.'); } [$headers, $routeName, $modelClass] = $dataMap[$type]; $header = $dataMap[$type] ?? ''; $model = $modelClass::findOrFail($id); $spekKategoriBagunan = null; if ($type == 'spek-bangunan') { $spekKategoriBagunan = SpekKategoritBangunan::all(); } return view('lpj::surveyor.data.form', compact('header', 'model', 'spekKategoriBagunan')); } public function updateData(SurveyorRequest $request, $type, $id) { $validate = $request->validated(); if ($validate) { $modelClass = $this->getModelClass($type); if ($type == 'spek-bangunan') { $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; } // Check if the provided type exists in the modelClasses if (!$modelClass) { return redirect() ->route('basicdata.' . $type . '.index') ->with('error', 'Invalid type specified.'); } $model = $modelClass::findOrFail($id); $model->update($validate); // Redirect back with a success message return redirect() ->route('basicdata.' . $type . '.index') ->with('success', 'Updated successfully'); } } public function dataForDatatables(Request $request) { if (is_null($this->user) || !$this->user->can('debitur.view')) { // abort(403, 'Sorry! You are not allowed to view users.'); } $query = Permohonan::query(); 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 . '%'); $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } $query->whereRaw('LOWER(status) = ?', ['assign']); $query->whereHas('penilaian.userPenilai', function ($q) { $q->where('user_id', Auth::user()->id); $q->where('role', 'surveyor'); }); if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); $query->orderBy($column, $order); } $totalRecords = $query->count(); $size = $request->get('size', 10); if ($size == 0) { $size = 10; } if ($request->has('page') && $request->has('size')) { $page = $request->get('page', 1); $offset = ($page - 1) * $size; $query->skip($offset)->take($size); } $filteredRecords = $query->count(); $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'jenisFasilitasKredit','penilaian'])->get(); $pageCount = ceil($totalRecords / $size); $currentPage = max(1, $request->get('page', 1)); return response()->json([ 'draw' => $request->get('draw'), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'pageCount' => $pageCount, 'page' => $currentPage, 'totalCount' => $totalRecords, 'data' => $data, ]); } public function dataForDatatablesData(Request $request, $type) { if (is_null($this->user) || !$this->user->can('jenis_aset.view')) { //abort(403, 'Sorry! You are not allowed to view users.'); } $models = [ 'Bentuk Tanah' => BentukTanah::class, 'Kontur Tanah' => KonturTanah::class, 'Posisi Kavling' => PosisiKavling::class, 'Ketinggian Tanah' => KetinggianTanah::class, 'Kondisi Fisik Tanah' => KondisiFisikTanah::class, 'Jenis Bangunan' => JenisBangunan::class, 'Kondisi Bangunan' => KondisiBangunan::class, 'Sifat Bangunan' => SifatBangunan::class, 'Spek Kategori Bangunan' => SpekKategoritBangunan::class, 'Spek Bangunan' => SpekBangunan::class, 'Sarana Pelengkap' => SaranaPelengkap::class, 'Lalu Lintas Depan Lokasi' => LaluLintasLokasi::class, 'Tingkat Keramaian' => TingkatKeramaian::class, 'Golongan Masyarakat Sekitar' => GolonganMasySekitar::class, 'Lantai Unit' => Lantai::class, 'View Unit' => ViewUnit::class, 'Perkerasan jalan' => PerkerasanJalan::class ]; if (array_key_exists($type, $models)) { $query = $models[$type]::query(); } else { throw new InvalidArgumentException("Invalid type: $type"); } if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('code', 'LIKE', "%$search%"); $q->orWhere('name', 'LIKE', "%$search%"); }); } // Apply sorting if provided if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); $query->orderBy($column, $order); } // Get the total count of records $totalRecords = $query->count(); // Apply pagination if provided if ($request->has('page') && $request->has('size')) { $page = $request->get('page'); $size = $request->get('size'); $offset = ($page - 1) * $size; // Calculate the offset $query->skip($offset)->take($size); } // Get the filtered count of records $filteredRecords = $query->count(); // Get the data for the current page $data = $query->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); // Calculate the current page number $currentPage = 0 + 1; // Return the response data as a JSON object return response()->json([ 'draw' => $request->get('draw'), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'pageCount' => $pageCount, 'page' => $currentPage, 'totalCount' => $totalRecords, 'data' => $data, ]); } public function destroy($id, $type) { try { $modelClass = $this->getModelClass($type); if (!$modelClass) { return response()->json(['success' => false, 'message' => 'Invalid type specified.'], 400); } $model = $modelClass::findOrFail($id); $model->delete(); return response()->json(['success' => true, 'message' => 'deleted successfully']); } catch (ModelNotFoundException $e) { return response()->json(['success' => false, 'message' => 'not found.'], 404); } catch (Exception $e) { return response()->json(['success' => false, 'message' => 'Failed to delete.'], 500); } } private function getPermohonanJaminanId($id, $jaminanId) { return Permohonan::with([ 'user', 'debiture.province', 'debiture.city', 'debiture.district', 'debiture.village', 'branch', 'tujuanPenilaian', 'penilaian', 'debiture.documents.jenisJaminan', 'debiture.documents' => function ($query) use ($jaminanId) { $query->where('jenis_jaminan_id', $jaminanId); } ]) ->whereHas('debiture.documents', function ($query) use ($jaminanId) { $query->where('jenis_jaminan_id', $jaminanId); }) ->findOrFail($id); } private function getModelClass(string $type): ?string { return $this->modelClasses[$type] ?? null; } private $modelClasses = [ 'bentuk-tanah' => BentukTanah::class, 'kontur-tanah' => KonturTanah::class, 'posisi-kavling' => PosisiKavling::class, 'ketinggian-tanah' => KetinggianTanah::class, 'kondisi-fisik-tanah' => KondisiFisikTanah::class, 'jenis-bangunan' => JenisBangunan::class, 'kondisi-bangunan' => KondisiBangunan::class, 'sifat-bangunan' => SifatBangunan::class, 'sarana-pelengkap' => SaranaPelengkap::class, 'lalu-lintas-lokasi' => LaluLintasLokasi::class, 'tingkat-keramaian' => TingkatKeramaian::class, 'gol-mas-sekitar' => GolonganMasySekitar::class, 'spek-kategori-bangunan' => SpekKategoritBangunan::class, 'spek-bangunan' => SpekBangunan::class, 'lantai-unit' => Lantai::class, 'view-unit' => ViewUnit::class, ]; private function getCommonData() { return [ '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(), 'spekKategoriBangunan' => 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(), ]; } private const HEADERS = [ 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], 'lalu-lintas-lokasi' => ['Lalu Lintas Depan Lokasi', 'lalu-lintas-lokasi'], 'tingkat-keramaian' => ['Tingkat Keramaian', 'tingkat-keramaian'], 'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar'], 'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan'], 'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan'], 'lantai-unit' => ['Lantai Unit', 'lantai-unit'], 'view-unit' => ['View Unit', 'view-unit'], 'perkerasan-jalan' => ['Perkerasan jalan', 'perkerasan-jalan'] ]; private function getAssetData($data) { return [ '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, '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, ]; } private function getTanahData($data,$request): array { return [ '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, ]; } private function getBangunanData($data, $request): array { return [ 'luas_tanah_bagunan' => $data['luas_tanah_bagunan'] ?? null, 'jenis_bangunan' => $data['jenis_bangunan'] ?? null, 'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null, 'sifat_bangunan' => $data['sifat_bangunan'] ?? null, 'sifat_bangunan_input' => $data['sifat_bagunan_input'] ?? null, 'spek_kategori_bagunan' => $data['spek_kategori_bagunan'] ?? null, 'spek_bangunan' => $data['spek_bangunan'] ?? null, 'sarana_pelengkap' => $data['sarana_pelengkap'] ?? [], 'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null, ]; } private function getLingkunganData($data, $request): array { return [ 'jarak_jalan_utama' => $data['jarak_jalan_utama'] ?? null, 'jalan_linkungan' => $data['jalan_linkungan'] ?? null, 'jarak_cbd_point' => $data['jarak_cbd_point'] ?? null, 'nama_cbd_point' => $data['nama_cbd_point'] ?? null, 'lebar_perkerasan_jalan' => $data['lebar_perkerasan_jalan'] ?? null, 'perkerasan_jalan' => $data['perkerasan_jalan'] ?? null, 'lalu_lintas' => $data['lalu_lintas'] ?? null, 'gol_mas_sekitar' => $data['gol_mas_sekitar'] ?? null, 'tingkat_keramaian' => $data['tingkat_keramaian'] ?? null, 'terletak_diarea' => $data['terletak_diarea'] ?? null, 'disekitar_lokasi' => $data['disekitar_lokasi'] ?? null, 'kondisi_bangunan_sekitar' => $data['kondisi_bangunan_sekitar'] ?? null, 'sifat_bangunan_sekitar' => $data['sifat_bangunan_sekitar'] ?? null, 'dekat_makam' => $data['dekat_makam'] ?? null, 'jarak_makam' => $data['jarak_makam'] ?? null, 'nama_makam' => $data['nama_makam'] ?? null, 'dekat_tps' => $data['dekat_tps'] ?? null, 'jarak_tps' => $data['jarak_tps'] ?? null, 'nama_tps' => $data['nama_tps'] ?? null, 'merupakan_daerah' => $data['merupakan_daerah'] ?? null, 'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null, ]; } private function getFactData($data, $request): array { $factData = [ 'fakta_positif' => $data['fakta_positif'] ?? null, 'fakta_negatif' => $data['fakta_negatif'] ?? null, 'rute_menuju' => $data['rute_menuju'] ?? null, 'batas_batas' => $data['batas_batas'] ?? null, 'kondisi_lingkungan' => $data['kondisi_lingkungan'] ?? null, 'kondisi_lain_bangunan' => $data['kondisi_lain_bangunan'] ?? null, 'informasi_dokument' => $data['informasi_dokument'] ?? null, 'peruntukan' => $data['peruntukan'] ?? null, 'kdb' => $data['kdb'] ?? null, 'kdh' => $data['kdh'] ?? null, 'gsb' => $data['gsb'] ?? null, 'max_lantai' => $data['max_lantai'] ?? null, 'klb' => $data['klb'] ?? null, 'gss' => $data['gss'] ?? null, 'pelebaran_jalan' => $data['pelebaran_jalan'] ?? null, 'nama_petugas' => $data['nama_petugas'] ?? null, 'lat' => $data['lat'] ?? null, 'lng' => $data['lng'] ?? null, 'keterangan' => $data['keterangan'] ?? null, ]; $factData['foto_gistaru'] = $this->updateOrDeleteFile($data, $request, 'foto_gistaru'); $factData['foto_bhumi'] = $this->updateOrDeleteFile($data, $request, 'foto_bhumi'); $factData['foto_argis_region'] = $this->updateOrDeleteFile($data, $request, 'foto_argis_region'); $factData['foto_tempat'] = $this->updateOrDeleteFile($data, $request, 'foto_tempat'); return $factData; } private function updateOrDeleteFile($data, $request, $fileKey) { if ($request->hasFile($fileKey)) { $file = $request->file($fileKey); if ($file->isValid()) { $fileName = time() . '_' . $file->getClientOriginalName(); $path = $file->storeAs("public/surveyor/{$request->type}", $fileName); if ($path === false) { throw new Exception("Failed to store file for {$fileKey}"); } if (isset($data[$fileKey]) && $data[$fileKey]) { $this->deleteFile($data[$fileKey]); } return str_replace('public/', '', $path); } else { throw new Exception("Invalid file upload for {$fileKey}"); } } elseif (isset($data[$fileKey]) && $data[$fileKey]) { return $data[$fileKey]; } else { return null; } } private function deleteFile($filePath) { $fullPath = storage_path('app/public/' . $filePath); if (file_exists($fullPath)) { unlink($fullPath); } } private function getKapalData($data): array { return [ 'keterangan' => $data['keterangan'] ]; } private function getKendaraanData($data): array { return [ 'keterangan' => $data['keterangan'] ]; } private function getMesinData($data): array { return [ 'keterangan' => $data['keterangan'] ]; } private function getPesawatData($data): array { return [ 'keterangan' => $data['keterangan'] ]; } private function getAlatBeratData($data): array { return [ 'keterangan' => $data['keterangan'] ]; } private function getUnitData($data): array { return [ 'keterangan' => $data['keterangan'] ]; } // function upload file to storage private function uploadFile($file, $type) { if (!$file->isValid()) { throw new Exception("Invalid file upload for {$type}"); } $fileName = time() . '_' . $file->getClientOriginalName(); $path = $file->storeAs("public/surveyor/{$type}", $fileName); if ($path === false) { throw new Exception("Failed to store file for {$type}"); } return str_replace('public/', '', $path); } }