fix(suveyor/penilai/so): perbaikan print out, form survey dan laporan dan paparan

This commit is contained in:
majid
2025-02-26 05:07:25 +07:00
parent 2045da36d8
commit 7766d127e0
21 changed files with 1317 additions and 550 deletions

View File

@@ -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)