fix(suveyor/penilai/so): perbaikan print out, form survey dan laporan dan paparan
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user