update menu penilai lpj dan perbaikan data pembanding
This commit is contained in:
@@ -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'],
|
||||
|
||||
Reference in New Issue
Block a user