diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 587dec6..0380fa6 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -6,6 +6,7 @@ use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Penilaian; + use Modules\Lpj\Models\JenisDokumen; function formatTanggalIndonesia($date, $time = false) { @@ -296,3 +297,17 @@ ->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; + } + diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 84fc00b..48b2635 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -9,6 +9,8 @@ use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\KertasKerjaExport; +use App\Http\Controllers\SurveyorController; + class PenilaiController extends Controller { 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(){ diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 32aca66..e87d454 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -62,7 +62,6 @@ use Modules\Lpj\Models\DetailDokumenJaminan; use Modules\Lpj\Models\JenisKapal; use Modules\Lpj\Models\JenisKendaraan; use Modules\Lpj\Models\RuteJaminan; - use Modules\Lpj\Models\HubunganPemilikJaminan; use Modules\Lpj\Models\HubunganPenghuniJaminan; use Modules\Lpj\Models\AnalisaUnit; @@ -216,8 +215,9 @@ class SurveyorController extends Controller public function storeDenah(Request $request) { try { + $maxSize = getMaxFileSize('Foto'); $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', 'permohonan_id' => 'required', 'jenis_jaminan_id' => 'required' @@ -381,26 +381,27 @@ class SurveyorController extends Controller */ public function validateFotoRequest(Request $request) { + $maxSize = getMaxFileSize('Foto'); return $request->validate([ 'permohonan_id' => 'required', 'jenis_jaminan_id' => 'required', - 'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', - 'foto_objek.*' => 'required|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:'. $maxSize, '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', - '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', - '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', - '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', - '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', + '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:'. $maxSize, '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', - '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', ]); } @@ -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) { $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++) { $pembanding = $this->formatSinglePembanding($request, $i); - - // Perbaikan penanganan foto pembanding - $fotoKey = "foto_objek_pembanding_{$i}"; // Sesuaikan dengan nama field di form - if ($request->hasFile($fotoKey)) { - $pembanding['foto_objek'] = $this->handleFileUpload( - $request->file($fotoKey), + + // Penanganan foto pembanding + if (isset($fotoPembanding[$i]) && $fotoPembanding[$i]->isValid()) { + $pembanding['foto_objek'] = $this->handleupdateOrDeleteFile( + $fotoPembanding[$i], 'pembanding', "pembanding_{$i}" ); } - + $dataPembanding[] = $pembanding; } - + return $dataPembanding; } - private function handleFileUpload($file, $folder, $prefix) - { - if (!$file) { - return null; - } - - try { - // Buat nama file yang unik - $extension = $file->getClientOriginalExtension(); - $fileName = $prefix . '_' . time() . '_' . uniqid() . '.' . $extension; - - // 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; + private function handleupdateOrDeleteFile($file, $type, $prefix) +{ + try { + if ($file) { + // Generate nama file unik + $fileName = $prefix . '_' . uniqid() . '_' . time() . '.' . $file->getClientOriginalExtension(); + $path = "{$type}/" . date('Y/m'); + Storage::makeDirectory("public/{$path}"); + $filePath = $file->storeAs("public/{$path}", $fileName); + return str_replace('public/', '', $filePath); } + + 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) { $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', 'status_nara_sumber', 'harga', '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; - } + $objekPenilaian = array_reduce($fields, function ($carry, $field) use ($request) { + $carry[$field] = $request->input($field); + return $carry; + }, ['foto_objek' => null]); - // Inisialisasi foto_objek sebagai null - $pembanding['foto_objek'] = null; - - return $pembanding; + return $objekPenilaian; } + 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) { try { DB::beginTransaction(); + $maxSize = getMaxFileSize('Foto'); $validator = $request->validate([ 'permohonan_id' => 'required|exists:permohonan,id', 'type' => 'required|string', 'jenis_jaminan_id' => 'required', - 'foto_objek' => 'nullable|image|max:2048', - 'foto_objek_pembanding_*' => 'nullable|image|max:2048', + 'foto_objek' => 'nullable|image|max:'.$maxSize, + '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); if ($request->hasFile('foto_objek')) { - $objekPenilaian['foto_objek'] = $this->handleFileUpload( + $objekPenilaian['foto_objek'] = $this->handleupdateOrDeleteFile( $request->file('foto_objek'), - 'pembanding', + $request['type'] = 'pembanding', 'objek_penilaian' ); } @@ -681,7 +702,7 @@ class SurveyorController extends Controller return response()->json([ 'success' => true, 'message' => 'Data berhasil disimpan', - 'data' => $formattedData + 'data' => $objekPenilaian ], 200); } catch (\Exception $e) { @@ -702,10 +723,6 @@ class SurveyorController extends Controller 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); @@ -719,39 +736,7 @@ class SurveyorController extends Controller $villages = Village::where('district_code', $debitur->district_code)->get(); $surveyor = $id; - $branches = Branch::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(); - $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(); - + $basicData = $this->getCommonData(); $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); $forminspeksi = null; @@ -767,38 +752,9 @@ class SurveyorController extends Controller 'cities', 'districts', 'villages', - 'bentukTanah', - 'konturTanah', - 'posisiKavling', - 'kondisiFisikTanah', - 'ketinggianTanah', - 'kondisiBangunan', - 'jenisBangunan', - 'sifatBangunan', - 'spekKategoriBagunan', - 'spekBangunan', - 'saranaPelengkap', - 'arahMataAngin', - 'lantai', - 'viewUnit', - 'golMasySekitar', - 'tingkatKeramaian', - 'laluLintasLokasi', - 'perkerasanJalan', 'link_url_region', 'forminspeksi', - 'jenisKendaraan', - 'jenisKapal', - 'jenisPesawat', - 'modelAlatBerat', - 'hubCadeb', - 'jenisJaminan', - 'fasilitasObjek', - 'merupakanDaerah', - 'terletakDiArea', - 'posisiUnit', - 'bentukUnit', - 'hubPenghuni' + 'basicData' )); } @@ -903,19 +859,26 @@ class SurveyorController extends Controller // Ambil data pendukung $data = $this->getCommonData(); - $branches = Branch::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( 'permohonan', 'id', - 'branches', - 'provinces', 'inspectionData', 'comparisons', 'data', 'jaminanId', - 'fotoForm' + 'fotoForm', + 'cities', + 'districts', + 'villages', + 'provinces' )); } 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 { @@ -1406,7 +1382,7 @@ class SurveyorController extends Controller { return [ 'branches' => Branch::all(), - 'provinces' => Province::all(), + 'bentukTanah' => BentukTanah::all(), 'konturTanah' => KonturTanah::all(), 'posisiKavling' => PosisiKavling::all(), @@ -1435,10 +1411,13 @@ class SurveyorController extends Controller 'merupakanDaerah' => MerupakanDaerah::all(), 'jenisUnit' => JenisUnit::all(), 'jenisJaminan' => JenisJaminan::all(), + 'hubCadeb' => HubunganPemilikJaminan::all(), + 'hubPenghuni' => HubunganPenghuniJaminan::all(), ]; } + private const HEADERS = [ 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], diff --git a/resources/views/penilai/components/lpj-sederhana-standard.blade.php b/resources/views/penilai/components/lpj-sederhana-standard.blade.php new file mode 100644 index 0000000..62ab78d --- /dev/null +++ b/resources/views/penilai/components/lpj-sederhana-standard.blade.php @@ -0,0 +1,176 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render(request()->route()->getName()) }} + --}} + Standard +@endsection + +@section('content') + @include('lpj::assetsku.includenya') +
{{ $permohonan->debiture->name }}
+ @endif +{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->branch->name }}
+ @endif +{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->user->name }}
+ @endif +