update menu penilai lpj dan perbaikan data pembanding

This commit is contained in:
majid
2024-12-06 16:48:31 +07:00
parent e83cd4b167
commit e28d5ff9a4
13 changed files with 654 additions and 337 deletions

View File

@@ -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'],