✨ feat(lpj): peningkatan model & service inspeksi, penawaran, preview
- Models: Inspeksi tambah 'mig_detail_data_jaminan' pada 'fillable'. - Models: PersetujuanPenawaran ubah import User, hapus 3 field lama. - Models: PersetujuanPenawaran tambah relasi 'region' (belongsTo Region). - Services: PreviewLaporanService tambah 22 item kategori preview. - Services: SaveFormInspesksiService refaktor parsing action & rules. - Services: TypeLaporanService tambah helper alamat & lokasi wilayah. - Services: TypeLaporanService tambahkan updateOrCreate untuk Penilai. - Services: TypeLaporanService tambah getInspeksi dan stub updatePenilai. - Cleanup: penataan kode, trimming, kurangi nested kondisi; mohon cek namespace.
This commit is contained in:
@@ -14,7 +14,7 @@ class Inspeksi extends Base
|
|||||||
/**
|
/**
|
||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
*/
|
*/
|
||||||
protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding'];
|
protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding','mig_detail_data_jaminan'];
|
||||||
|
|
||||||
public function permohonan()
|
public function permohonan()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Modules\Lpj\Models;
|
namespace Modules\Lpj\Models;
|
||||||
|
|
||||||
use Modules\Usermanagement\Models\User;
|
use Modules\Usermanagemenet\Models\User;
|
||||||
|
|
||||||
class PersetujuanPenawaran extends Base
|
class PersetujuanPenawaran extends Base
|
||||||
{
|
{
|
||||||
@@ -13,9 +13,6 @@
|
|||||||
'permohonan_id',
|
'permohonan_id',
|
||||||
'penawaran_id',
|
'penawaran_id',
|
||||||
'nomor_proposal_penawaran',
|
'nomor_proposal_penawaran',
|
||||||
'nomor_tiket',
|
|
||||||
'nominal_kurang_bayar',
|
|
||||||
'bukti_ksl_kurang_bayar',
|
|
||||||
'tanggal_proposal_penawaran',
|
'tanggal_proposal_penawaran',
|
||||||
'biaya_final',
|
'biaya_final',
|
||||||
'sla_resume',
|
'sla_resume',
|
||||||
@@ -49,6 +46,12 @@
|
|||||||
return $this->belongsTo(Permohonan::class, 'permohonan_id');
|
return $this->belongsTo(Permohonan::class, 'permohonan_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Relationship with Region
|
||||||
|
public function region()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Region::class);
|
||||||
|
}
|
||||||
|
|
||||||
// Relationship with User (for authorized_by)
|
// Relationship with User (for authorized_by)
|
||||||
public function authorizedBy()
|
public function authorizedBy()
|
||||||
{
|
{
|
||||||
|
|||||||
733
app/Services/PreviewLaporanService.php
Normal file
733
app/Services/PreviewLaporanService.php
Normal file
@@ -0,0 +1,733 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Lpj\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use App\Helpers\Lpj;
|
||||||
|
use Modules\Lpj\Models\Denah;
|
||||||
|
use Modules\Lpj\Models\Teams;
|
||||||
|
use Modules\Lpj\Models\Branch;
|
||||||
|
use Modules\Lpj\Models\Lantai;
|
||||||
|
use Barryvdh\DomPDF\Facade\Pdf;
|
||||||
|
use Modules\Lpj\Models\Analisa;
|
||||||
|
use Modules\Lpj\Models\Penilai;
|
||||||
|
use Modules\Lpj\Models\Debiture;
|
||||||
|
use Modules\Lpj\Models\Inspeksi;
|
||||||
|
use Modules\Lpj\Models\Surveyor;
|
||||||
|
use Modules\Lpj\Models\ViewUnit;
|
||||||
|
use Modules\Location\Models\City;
|
||||||
|
use Modules\Lpj\Models\JenisUnit;
|
||||||
|
use Modules\Lpj\Models\Penilaian;
|
||||||
|
use Modules\Lpj\Models\Perizinan;
|
||||||
|
use Modules\Lpj\Models\BentukUnit;
|
||||||
|
use Modules\Lpj\Models\JenisKapal;
|
||||||
|
use Modules\Lpj\Models\LantaiUnit;
|
||||||
|
use Modules\Lpj\Models\Lingkungan;
|
||||||
|
use Modules\Lpj\Models\Permohonan;
|
||||||
|
use Modules\Lpj\Models\PosisiUnit;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Modules\Lpj\Models\AnalisaUnit;
|
||||||
|
use Modules\Lpj\Models\BentukTanah;
|
||||||
|
use Modules\Lpj\Models\FotoJaminan;
|
||||||
|
use Modules\Lpj\Models\KonturTanah;
|
||||||
|
use Modules\Lpj\Models\RuteJaminan;
|
||||||
|
use Modules\Location\Models\Village;
|
||||||
|
use Modules\Lpj\Models\AnalisaFakta;
|
||||||
|
use Modules\Lpj\Models\JenisJaminan;
|
||||||
|
use Modules\Lpj\Models\JenisPesawat;
|
||||||
|
use Modules\Lpj\Models\ObjekJaminan;
|
||||||
|
use Modules\Lpj\Models\SpekBangunan;
|
||||||
|
use Modules\Lpj\Models\TerletakArea;
|
||||||
|
use Modules\Location\Models\District;
|
||||||
|
use Modules\Location\Models\Province;
|
||||||
|
use Modules\Lpj\Models\ArahMataAngin;
|
||||||
|
use Modules\Lpj\Models\JenisBangunan;
|
||||||
|
use Modules\Lpj\Models\PosisiKavling;
|
||||||
|
use Modules\Lpj\Models\SifatBangunan;
|
||||||
|
use Modules\Lpj\Models\DokumenJaminan;
|
||||||
|
use Modules\Lpj\Models\FasilitasObjek;
|
||||||
|
use Modules\Lpj\Models\JenisKendaraan;
|
||||||
|
use Modules\Lpj\Models\ModelAlatBerat;
|
||||||
|
use Modules\Lpj\Models\KetinggianTanah;
|
||||||
|
use Modules\Lpj\Models\KondisiBangunan;
|
||||||
|
use Modules\Lpj\Models\LaporanExternal;
|
||||||
|
use Modules\Lpj\Models\MerupakanDaerah;
|
||||||
|
use Modules\Lpj\Models\PerkerasanJalan;
|
||||||
|
use Modules\Lpj\Models\SaranaPelengkap;
|
||||||
|
use Modules\Lpj\Models\TujuanPenilaian;
|
||||||
|
use Modules\Lpj\Models\FotoObjekJaminan;
|
||||||
|
use Modules\Lpj\Models\LaluLintasLokasi;
|
||||||
|
use Modules\Lpj\Models\TingkatKeramaian;
|
||||||
|
use Modules\Lpj\Models\AnalisaLingkungan;
|
||||||
|
use Modules\Lpj\Models\KondisiFisikTanah;
|
||||||
|
use Modules\Lpj\Models\AnalisaTanahBagunan;
|
||||||
|
use Modules\Lpj\Models\GolonganMasySekitar;
|
||||||
|
use Modules\Lpj\Models\SpekBangunanAnalisa;
|
||||||
|
use Modules\Lpj\Models\DetailDokumenJaminan;
|
||||||
|
use Modules\Lpj\Models\SpekKategoritBangunan;
|
||||||
|
use Modules\Lpj\Http\Requests\SurveyorRequest;
|
||||||
|
use Modules\Lpj\Models\HubunganPemilikJaminan;
|
||||||
|
use Modules\Lpj\Models\HubunganPenghuniJaminan;
|
||||||
|
use Modules\Lpj\Models\SpekBagunanAnalisaDetail;
|
||||||
|
use Modules\Lpj\Jobs\SendJadwalKunjunganEmailJob;
|
||||||
|
use Modules\Lpj\Http\Requests\FormSurveyorRequest;
|
||||||
|
|
||||||
|
class PreviewLaporanService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Preview Laporan dan unduh foto terkait dengan logika fallback path.
|
||||||
|
*
|
||||||
|
* Menghasilkan PDF atau paket unduhan foto berdasarkan status laporan.
|
||||||
|
* Jika file foto asli tidak ditemukan dan status LPJ adalah 1, maka
|
||||||
|
* sistem akan mencoba menggunakan fallback path dengan pola
|
||||||
|
* `surveyor/001/{lastTwoParts}` untuk meminimalisir gambar hilang.
|
||||||
|
*
|
||||||
|
* @param int $permohonan_id ID Permohonan
|
||||||
|
* @param int $dokumen_id ID Dokumen
|
||||||
|
* @param int $jaminan_id ID Jaminan
|
||||||
|
* @param string $back URL atau rute kembali
|
||||||
|
* @return \Symfony\Component\HttpFoundation\Response
|
||||||
|
*/
|
||||||
|
public function previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back)
|
||||||
|
{
|
||||||
|
$permohonan = $this->getPermohonanJaminanId(
|
||||||
|
$permohonan_id,
|
||||||
|
$dokumen_id,
|
||||||
|
$jaminan_id
|
||||||
|
);
|
||||||
|
// $tipeLaporanResponse = $this->checkPrintOutLaporan($permohonan_id, $document_id);
|
||||||
|
// $tipeLaporan = $tipeLaporanResponse->getData();
|
||||||
|
|
||||||
|
// if (!$tipeLaporan->status) {
|
||||||
|
// return redirect()->back()->with('error', 'Laporan tidak valid');
|
||||||
|
// }
|
||||||
|
$basicData = $this->getCommonData();
|
||||||
|
|
||||||
|
$inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)->where('dokument_id', $dokumen_id)->first();
|
||||||
|
$lpj = Penilai::where('permohonan_id', $permohonan_id)->where('dokument_id', $dokumen_id)->first();
|
||||||
|
|
||||||
|
$mig_permohonan = json_decode($permohonan->mig_permohonan);
|
||||||
|
|
||||||
|
$nomorLaporan = getNomorLaporan($permohonan_id, $dokumen_id);
|
||||||
|
$tanggalLaporan = $permohonan->is_mig
|
||||||
|
? ($mig_permohonan->mig_mst_jaminan_tgl_laporan ?? $mig_permohonan->mig_mst_jaminan_tgl_create ?? null)
|
||||||
|
: ($lpj->created_at ?? null);
|
||||||
|
$forminspeksi = null;
|
||||||
|
$lpjData = null;
|
||||||
|
$formFoto = null;
|
||||||
|
|
||||||
|
// if ($inspeksi) {
|
||||||
|
$forminspeksi = json_decode($inspeksi?->data_form, true) ?? null;
|
||||||
|
|
||||||
|
$formFoto = json_decode($inspeksi?->foto_form, true) ?? null;
|
||||||
|
// $denahForm = json_decode($data->denah_form, true);
|
||||||
|
$dataPembanding = json_decode($inspeksi?->data_pembanding, true) ?? null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if ($lpj) {
|
||||||
|
$lpjData = json_decode($lpj?->lpj, true) ?? null;
|
||||||
|
$memo = json_decode($lpj?->memo, true) ?? null;
|
||||||
|
$resumeData = json_decode($lpj?->resume, true) ?? null;
|
||||||
|
$rap = json_decode($lpj?->rap, true);
|
||||||
|
$report = json_decode($lpj?->call_report, true) ?? null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
$inputAddress = $forminspeksi['asset']['alamat']['sesuai'] ?? $forminspeksi['asset']['alamat']['tidak sesuai'] ?? [];
|
||||||
|
|
||||||
|
$alamat = [
|
||||||
|
'address' => $inputAddress['address'] ?? null,
|
||||||
|
'village_code' => getWilayahName($inputAddress['village_code'] ?? null, 'village'),
|
||||||
|
'district_code' => getWilayahName($inputAddress['district_code'] ?? null, 'district'),
|
||||||
|
'city_code' => getWilayahName($inputAddress['city_code'] ?? null, 'city'),
|
||||||
|
'province_code' => getWilayahName($inputAddress['province_code'] ?? null, 'province')
|
||||||
|
];
|
||||||
|
|
||||||
|
$statusLpj = 0;
|
||||||
|
|
||||||
|
// $viewLaporan = $this->getViewLaporan($tipeLaporan);
|
||||||
|
return view('lpj::component.show-laporan-inspeksi', compact('permohonan', 'basicData', 'forminspeksi', 'alamat', 'lpjData', 'memo', 'resumeData', 'rap', 'report', 'lpj', 'formFoto', 'nomorLaporan', 'tanggalLaporan', 'dataPembanding', 'inspeksi', 'statusLpj', 'permohonan_id', 'back', ));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function printOutLaporan($permohonan_id, $document_id, $jaminan_id)
|
||||||
|
{
|
||||||
|
$tipeLaporanResponse = $this->checkPrintOutLaporan($permohonan_id, $document_id);
|
||||||
|
$tipeLaporan = $tipeLaporanResponse->getData();
|
||||||
|
|
||||||
|
//dd($permohonan_id, $document_id, $tipeLaporan);
|
||||||
|
|
||||||
|
if (!$tipeLaporan->status) {
|
||||||
|
//return redirect()->back()->with('error', 'Laporan tidak valid');
|
||||||
|
}
|
||||||
|
$permohonan = $this->getPermohonanJaminanId(
|
||||||
|
$permohonan_id,
|
||||||
|
$document_id,
|
||||||
|
$jaminan_id
|
||||||
|
);
|
||||||
|
|
||||||
|
$basicData = $this->getCommonData();
|
||||||
|
|
||||||
|
$inspeksi = Inspeksi::where('permohonan_id', $permohonan_id)->where('dokument_id', $document_id)->first();
|
||||||
|
$lpj = Penilai::where('permohonan_id', $permohonan_id)->first(); //->where('dokument_id', $document_id)->first();
|
||||||
|
|
||||||
|
$mig_permohonan = json_decode($permohonan->mig_permohonan);
|
||||||
|
$nomorLaporan = getNomorLaporan($permohonan_id, $document_id);
|
||||||
|
|
||||||
|
//Carbon::createFromFormat('d/m/Y H:i:s', $mig_permohonan->mig_mst_jaminan_tgl_laporan)->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
$tanggalLaporan = $permohonan->is_mig
|
||||||
|
? ($mig_permohonan->mig_mst_jaminan_tgl_laporan
|
||||||
|
? Carbon::createFromFormat('d/m/Y H:i:s', $mig_permohonan->mig_mst_jaminan_tgl_laporan)->format('Y-m-d H:i:s')
|
||||||
|
: ($mig_permohonan->mig_mst_jaminan_tgl_oto
|
||||||
|
? Carbon::createFromFormat('d/m/Y H:i:s', $mig_permohonan->mig_mst_jaminan_tgl_oto)->format('Y-m-d H:i:s')
|
||||||
|
: null))
|
||||||
|
: ($lpj->created_at ?? null);
|
||||||
|
|
||||||
|
|
||||||
|
$forminspeksi = null;
|
||||||
|
$lpjData = null;
|
||||||
|
$formFoto = null;
|
||||||
|
|
||||||
|
$dataPembanding ='';
|
||||||
|
if ($inspeksi) {
|
||||||
|
$forminspeksi = json_decode($inspeksi->data_form, true);
|
||||||
|
$formFoto = json_decode($inspeksi->foto_form, true);
|
||||||
|
// $denahForm = json_decode($data->denah_form, true);
|
||||||
|
$dataPembanding = json_decode($inspeksi->data_pembanding, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($lpj) {
|
||||||
|
$lpjData = json_decode($lpj->lpj, true);
|
||||||
|
$memo = json_decode($lpj->memo, true);
|
||||||
|
$resumeData = json_decode($lpj->resume, true);
|
||||||
|
$rap = json_decode($lpj->rap, true);
|
||||||
|
$report = json_decode($lpj->call_report, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$inputAddress = $forminspeksi['asset']['alamat']['sesuai'] ?? $forminspeksi['asset']['alamat']['tidak sesuai'] ?? [];
|
||||||
|
|
||||||
|
$inputAddress = $forminspeksi['asset']['alamat']['sesuai'] ?? $forminspeksi['asset']['alamat']['tidak sesuai'] ?? [];
|
||||||
|
$alamat = [
|
||||||
|
'address' => $inputAddress['address'] ?? null,
|
||||||
|
'village_code' => getWilayahName($inputAddress['village_code'] ?? null, 'village'),
|
||||||
|
'district_code' => getWilayahName($inputAddress['district_code'] ?? null, 'district'),
|
||||||
|
'city_code' => getWilayahName($inputAddress['city_code'] ?? null, 'city'),
|
||||||
|
'province_code' => getWilayahName($inputAddress['province_code'] ?? null, 'province')
|
||||||
|
];
|
||||||
|
|
||||||
|
$viewLaporan = $this->getViewLaporan($tipeLaporan->status);
|
||||||
|
|
||||||
|
$statusLpj = 1;
|
||||||
|
|
||||||
|
$mig_permohonan = json_decode($permohonan->mig_permohonan);
|
||||||
|
if(($tipeLaporan->status === 'memo' && $permohonan->mig_permohonan) || $mig_permohonan->mig_mst_lpj_tot_nilai_pasar < 1){
|
||||||
|
$paths = $formFoto['upload_foto'] ?? null;
|
||||||
|
|
||||||
|
if (!is_array($paths) || empty($paths)) {
|
||||||
|
return response()->json(['error' => 'No files to download'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = [];
|
||||||
|
foreach ($paths as $path) {
|
||||||
|
if (!$path['path']) {
|
||||||
|
Log::warning('PreviewLaporanService: Path kosong terdeteksi dalam daftar paths.');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logika fallback untuk path file
|
||||||
|
$originalPath = $path['path'];
|
||||||
|
$fallbackPath = null;
|
||||||
|
|
||||||
|
// Jika file asli tidak ditemukan, buat fallback path
|
||||||
|
if ($statusLpj == 1) {
|
||||||
|
$fullOriginalPath = storage_path('app/public/' . $originalPath);
|
||||||
|
|
||||||
|
if (!file_exists($fullOriginalPath)) {
|
||||||
|
// Ekstrak bagian akhir path (contoh: 251051/251051_2_2.png)
|
||||||
|
$pathParts = explode('/', $originalPath);
|
||||||
|
if (count($pathParts) >= 2) {
|
||||||
|
$lastTwoParts = array_slice($pathParts, -2);
|
||||||
|
$fallbackPath = 'surveyor/001/' . implode('/', $lastTwoParts);
|
||||||
|
Log::info('PreviewLaporanService: Menggunakan fallback path kandidat.', [
|
||||||
|
'original' => $originalPath,
|
||||||
|
'fallback' => $fallbackPath,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tentukan path yang akan digunakan
|
||||||
|
$pathToUse = ($fallbackPath && $statusLpj == 1 && file_exists(storage_path('app/public/' . $fallbackPath)))
|
||||||
|
? $fallbackPath
|
||||||
|
: $originalPath;
|
||||||
|
|
||||||
|
$fullPath = storage_path('app/public/' . $pathToUse);
|
||||||
|
if (!file_exists($fullPath)) {
|
||||||
|
Log::warning('PreviewLaporanService: File tidak ditemukan untuk original maupun fallback.', [
|
||||||
|
'original' => $originalPath,
|
||||||
|
'fallback' => $fallbackPath,
|
||||||
|
'resolved' => $pathToUse,
|
||||||
|
]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log::info('PreviewLaporanService: Menambahkan file untuk diunduh.', [
|
||||||
|
'resolved' => $pathToUse,
|
||||||
|
'fullPath' => $fullPath,
|
||||||
|
]);
|
||||||
|
$files[] = $fullPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($files)) {
|
||||||
|
Log::warning('PreviewLaporanService: Tidak ada file valid ditemukan setelah resolusi path.');
|
||||||
|
return response()->json(['error' => 'No valid files found'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For single file, download directly
|
||||||
|
if (count($files) === 1) {
|
||||||
|
Log::info('PreviewLaporanService: Mengunduh single file.', ['file' => $files[0]]);
|
||||||
|
return response()->download($files[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For multiple files, create zip and download
|
||||||
|
$zipName = 'photos_' . time() . '.zip';
|
||||||
|
$zipPath = storage_path('app/public/' . $zipName);
|
||||||
|
|
||||||
|
$zip = new \ZipArchive();
|
||||||
|
if ($zip->open($zipPath, \ZipArchive::CREATE) === true) {
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$zip->addFile($file, basename($file));
|
||||||
|
}
|
||||||
|
$zip->close();
|
||||||
|
Log::info('PreviewLaporanService: Zip file berhasil dibuat.', ['zip' => $zipPath, 'count' => count($files)]);
|
||||||
|
return response()->download($zipPath)->deleteFileAfterSend(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log::error('PreviewLaporanService: Gagal membuat zip file.');
|
||||||
|
return response()->json(['error' => 'Failed to create zip file'], 500);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$pdf = $this->generatePDF($viewLaporan, compact(
|
||||||
|
'permohonan',
|
||||||
|
'forminspeksi',
|
||||||
|
'lpjData',
|
||||||
|
'formFoto',
|
||||||
|
'basicData',
|
||||||
|
'inspeksi',
|
||||||
|
'lpj',
|
||||||
|
'statusLpj',
|
||||||
|
'alamat',
|
||||||
|
'dataPembanding',
|
||||||
|
'nomorLaporan',
|
||||||
|
'memo',
|
||||||
|
'resumeData',
|
||||||
|
'tanggalLaporan',
|
||||||
|
'rap',
|
||||||
|
'report'
|
||||||
|
));
|
||||||
|
|
||||||
|
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);
|
||||||
|
$filename = 'Laporan_' . $tipeLaporan->status . '_' . $permohonan->debiture->name . '_' . $cleanNomorLaporan;
|
||||||
|
|
||||||
|
return $pdf->download($filename . '_data.pdf');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error('PDF generation failed: ' . $e->getMessage());
|
||||||
|
return response()->json(['error' => 'Failed to generate PDF. Please check the log for details.'], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generatePDF(string $viewLaporan, array $data)
|
||||||
|
{
|
||||||
|
//return view('lpj::' . $viewLaporan, $data);
|
||||||
|
|
||||||
|
$pdf = PDF::loadView('lpj::' . $viewLaporan, $data);
|
||||||
|
$pdf->setPaper('A4', 'portrait');
|
||||||
|
$pdf->set_option('isHtml5ParserEnabled', true);
|
||||||
|
$pdf->set_option('isPhpEnabled', true);
|
||||||
|
|
||||||
|
return $pdf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function getViewLaporan($tipe)
|
||||||
|
{
|
||||||
|
$viewMap = [
|
||||||
|
'sederhana' => 'penilai.components.print-out-sederhana',
|
||||||
|
'standar' => 'penilai.components.print-out-standar',
|
||||||
|
'resume' => 'penilai.components.print-resume',
|
||||||
|
'memo' => 'penilai.components.print-memo',
|
||||||
|
'rap' => 'penilai.components.print-out-rap',
|
||||||
|
'call-report' => 'penilai.components.print-out-call-report'
|
||||||
|
];
|
||||||
|
return $viewMap[$tipe] ?? 'penilai.components.print-resume';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkPrintOutLaporan($permohonan_id, $dokumen_id)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Ambil data berdasarkan ID
|
||||||
|
$statusLpj = Penilai::where('permohonan_id', $permohonan_id)
|
||||||
|
//->where('dokument_id', $dokumen_id)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
|
||||||
|
$permohonan = Permohonan::where('id', $permohonan_id)->first();
|
||||||
|
|
||||||
|
// Jika data tidak ditemukan, kembalikan status null
|
||||||
|
if (!$statusLpj) {
|
||||||
|
return response()->json(['status' => null]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tentukan tipe berdasarkan kondisi
|
||||||
|
$type = $statusLpj->type_penilai ?? null;
|
||||||
|
|
||||||
|
if ($type === 'memo' && $permohonan->is_mig!=1) {
|
||||||
|
return $this->checkDataMemo($type, $statusLpj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type === 'resume') {
|
||||||
|
return $this->checkDataResume($type, $statusLpj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($type === 'standar' || $type === 'sederhana') {
|
||||||
|
return $this->checkDataLpj($type, $statusLpj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type === 'rap') {
|
||||||
|
return $this->checkDataRap($type, $statusLpj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Kembalikan respons dengan tipe yang sesuai
|
||||||
|
return response()->json(['status' => $type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkDataMemo($type, $statusLpj)
|
||||||
|
{
|
||||||
|
// Ambil data JSON dari statusLpj
|
||||||
|
$data = json_decode($statusLpj->memo, true) ?? [];
|
||||||
|
|
||||||
|
|
||||||
|
$validationRules = [
|
||||||
|
'memo' => [
|
||||||
|
'kepada',
|
||||||
|
'dari',
|
||||||
|
'nomor_memo',
|
||||||
|
'tanggal',
|
||||||
|
'perihal',
|
||||||
|
'jenis_asset_tidak_sesuai',
|
||||||
|
'lokasi.lokasi',
|
||||||
|
'lokasi.province_code',
|
||||||
|
'lokasi.city_code',
|
||||||
|
'lokasi.district_code',
|
||||||
|
'lokasi.village_code',
|
||||||
|
'lokasi.penilai',
|
||||||
|
'terlampir',
|
||||||
|
'hasil_survey',
|
||||||
|
'kesimpulan_saran',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
// Validasi data JSON
|
||||||
|
if (isset($validationRules[$type])) {
|
||||||
|
$missingFields = [];
|
||||||
|
|
||||||
|
foreach ($validationRules[$type] as $field) {
|
||||||
|
$keys = explode('.', $field);
|
||||||
|
$value = $data;
|
||||||
|
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if (!isset($value[$key])) {
|
||||||
|
$missingFields[] = $field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$value = $value[$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika ada field yang kosong, kembalikan error
|
||||||
|
if (!empty($missingFields)) {
|
||||||
|
return response()->json([
|
||||||
|
'status' => null,
|
||||||
|
'message' => "Silahkan lengkapi data memo terlebih dahulu.",
|
||||||
|
'missing_fields' => $missingFields,
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika data valid
|
||||||
|
return response()->json([
|
||||||
|
'status' => $type,
|
||||||
|
'message' => "Data memo valid.",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function checkDataResume($type, $statusLpj)
|
||||||
|
{
|
||||||
|
// Ambil data JSON dari statusLpj
|
||||||
|
$data = json_decode($statusLpj->resume, true) ?? [];
|
||||||
|
|
||||||
|
$validationRules = [
|
||||||
|
'resume' => [
|
||||||
|
'fisik'
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
// Validasi data JSON
|
||||||
|
if (isset($validationRules[$type])) {
|
||||||
|
$missingFields = [];
|
||||||
|
|
||||||
|
foreach ($validationRules[$type] as $field) {
|
||||||
|
$keys = explode('.', $field);
|
||||||
|
$value = $data;
|
||||||
|
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if (!isset($value[$key])) {
|
||||||
|
$missingFields[] = $field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$value = $value[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validasi khusus untuk array fisik dan sesuai_imb
|
||||||
|
if ($field === 'fisik' || $field === 'sesuai_imb') {
|
||||||
|
if (empty($value) || !is_array($value)) {
|
||||||
|
$missingFields[] = $field;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validasi struktur data di dalam array
|
||||||
|
foreach ($value as $item) {
|
||||||
|
$requiredKeys = ['sertifikat', 'luas_tanah', 'nilai'];
|
||||||
|
foreach ($requiredKeys as $requiredKey) {
|
||||||
|
if (!isset($item[$requiredKey])) {
|
||||||
|
$missingFields[] = $field . '.' . $requiredKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika ada field yang kosong, kembalikan error
|
||||||
|
if (!empty($missingFields)) {
|
||||||
|
return response()->json([
|
||||||
|
'status' => null,
|
||||||
|
'message' => "Silahkan lengkapi data resume terlebih dahulu.",
|
||||||
|
'missing_fields' => $missingFields,
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika data valid
|
||||||
|
return response()->json([
|
||||||
|
'status' => $type,
|
||||||
|
'message' => "Data resume valid.",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkDataLpj($type, $statusLpj)
|
||||||
|
{
|
||||||
|
// Ambil data JSON dari statusLpj
|
||||||
|
$data = json_decode($statusLpj->lpj, true) ?? [];
|
||||||
|
|
||||||
|
$validationRules = [
|
||||||
|
'lpj' => [
|
||||||
|
'luas_tanah',
|
||||||
|
'nilai_tanah_1',
|
||||||
|
'nilai_tanah_2',
|
||||||
|
'luas_bangunan',
|
||||||
|
'nilai_bangunan_1',
|
||||||
|
'nilai_bangunan_2',
|
||||||
|
'total_nilai_pasar_wajar',
|
||||||
|
'likuidasi',
|
||||||
|
'likuidasi_nilai_1',
|
||||||
|
'likuidasi_nilai_2',
|
||||||
|
'asuransi_luas_bangunan',
|
||||||
|
'asuransi_nilai_1',
|
||||||
|
'asuransi_nilai_2',
|
||||||
|
'npw_tambahan'
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
// Validasi data JSON
|
||||||
|
if (isset($validationRules[$type])) {
|
||||||
|
$missingFields = [];
|
||||||
|
|
||||||
|
foreach ($validationRules[$type] as $field) {
|
||||||
|
// Penanganan khusus untuk field yang boleh null
|
||||||
|
if (in_array($field, ['sarana_pelengkap_penilai', 'nilai_sarana_pelengkap_1', 'nilai_sarana_pelengkap_2'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($data[$field])) {
|
||||||
|
$missingFields[] = $field;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validasi khusus untuk npw_tambahan
|
||||||
|
if ($field === 'npw_tambahan' && is_array($data[$field])) {
|
||||||
|
foreach ($data[$field] as $index => $item) {
|
||||||
|
$requiredKeys = ['name', 'luas', 'nilai_1', 'nilai_2'];
|
||||||
|
foreach ($requiredKeys as $key) {
|
||||||
|
if (!isset($item[$key])) {
|
||||||
|
$missingFields[] = "npw_tambahan[$index].$key";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Jika ada field yang kosong, kembalikan error
|
||||||
|
if (!empty($missingFields)) {
|
||||||
|
return response()->json([
|
||||||
|
'status' => null,
|
||||||
|
'message' => "Silahkan lengkapi data LPJ terlebih dahulu.",
|
||||||
|
'missing_fields' => $missingFields,
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika data valid
|
||||||
|
return response()->json([
|
||||||
|
'status' => $type,
|
||||||
|
'message' => "Data LPJ valid.",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkDataRap($type, $statusLpj)
|
||||||
|
{
|
||||||
|
// Ambil data JSON dari statusLpj
|
||||||
|
$data = json_decode($statusLpj->rap, true) ?? [];
|
||||||
|
|
||||||
|
$requiredFields = [
|
||||||
|
'dari',
|
||||||
|
'kepada',
|
||||||
|
'perihal',
|
||||||
|
'tanggal',
|
||||||
|
'nomor_rap'
|
||||||
|
];
|
||||||
|
|
||||||
|
// Cek apakah ada field yang kosong
|
||||||
|
$missingFields = [];
|
||||||
|
foreach ($requiredFields as $field) {
|
||||||
|
if (!isset($data[$field]) || empty($data[$field])) {
|
||||||
|
$missingFields[] = $field;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika ada field yang kosong, kembalikan error
|
||||||
|
if (!empty($missingFields)) {
|
||||||
|
return response()->json([
|
||||||
|
'status' => null,
|
||||||
|
'message' => "Silahkan lengkapi data RAP terlebih dahulu.",
|
||||||
|
'missing_fields' => $missingFields
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika semua data terisi
|
||||||
|
return response()->json([
|
||||||
|
'status' => $type,
|
||||||
|
'message' => "Data RAP valid."
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
private function getPermohonanJaminanId($id, $dokumentId, $jaminanId)
|
||||||
|
{
|
||||||
|
return Permohonan::with([
|
||||||
|
'user',
|
||||||
|
'debiture.province',
|
||||||
|
'debiture.city',
|
||||||
|
'debiture.district',
|
||||||
|
'debiture.village',
|
||||||
|
'branch',
|
||||||
|
'tujuanPenilaian',
|
||||||
|
'penilaian',
|
||||||
|
'penawaran',
|
||||||
|
'debiture.documents' => function ($query) use ($dokumentId, $jaminanId) {
|
||||||
|
$query->where('id', $dokumentId)
|
||||||
|
->where('jenis_jaminan_id', $jaminanId);
|
||||||
|
}
|
||||||
|
])->findOrFail($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCommonData()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'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(),
|
||||||
|
'spekKategoriBangunan' => 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(),
|
||||||
|
'jenisPesawat' => JenisPesawat::all(),
|
||||||
|
'modelAlatBerat' => ModelAlatBerat::all(),
|
||||||
|
'jenisKapal' => JenisKapal::all(),
|
||||||
|
'jenisKendaraan' => JenisKendaraan::all(),
|
||||||
|
'terletakArea' => TerletakArea::all(),
|
||||||
|
'posisiUnit' => PosisiUnit::all(),
|
||||||
|
'bentukUnit' => BentukUnit::all(),
|
||||||
|
'fasilitasObjek' => FasilitasObjek::all(),
|
||||||
|
'merupakanDaerah' => MerupakanDaerah::all(),
|
||||||
|
'jenisUnit' => JenisUnit::all(),
|
||||||
|
'jenisJaminan' => JenisJaminan::all(),
|
||||||
|
'hubCadeb' => HubunganPemilikJaminan::all(),
|
||||||
|
'hubPenghuni' => HubunganPenghuniJaminan::all(),
|
||||||
|
'perkerasanJalan' => PerkerasanJalan::all(),
|
||||||
|
'terletakDiArea' => TerletakArea::all(),
|
||||||
|
'tujuanPenilaian' => TujuanPenilaian::all(),
|
||||||
|
'perizinan' => Perizinan::all(),
|
||||||
|
'foto' => FotoObjekJaminan::all()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private const HEADERS = [
|
||||||
|
'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'],
|
||||||
|
'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'],
|
||||||
|
'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'],
|
||||||
|
'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'],
|
||||||
|
'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'],
|
||||||
|
'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'],
|
||||||
|
'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'],
|
||||||
|
'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'],
|
||||||
|
'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'],
|
||||||
|
'lalu-lintas-lokasi' => ['Lalu Lintas Depan Lokasi', 'lalu-lintas-lokasi'],
|
||||||
|
'tingkat-keramaian' => ['Tingkat Keramaian', 'tingkat-keramaian'],
|
||||||
|
'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar'],
|
||||||
|
'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan'],
|
||||||
|
'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan'],
|
||||||
|
'lantai-unit' => ['Lantai Unit', 'lantai-unit'],
|
||||||
|
'view-unit' => ['View Unit', 'view-unit'],
|
||||||
|
'perkerasan-jalan' => ['Perkerasan jalan', 'perkerasan-jalan'],
|
||||||
|
'jenis-pesawat' => ['Jenis pesawat', 'jenis-pesawat'],
|
||||||
|
'model-alat-berat' => ['Model alat berat', 'model-alat-berat'],
|
||||||
|
'jenis-kapal' => ['Jenis kapal', 'jenis-kapal'],
|
||||||
|
'jenis-kendaraan' => ['Jenis kendaraan', 'jenis-kendaraan'],
|
||||||
|
'jenis-unit' => ['Jenis unit', 'jenis-unit'],
|
||||||
|
'terletak-area' => ['Terletak di Area', 'terletak-area'],
|
||||||
|
'merupakan-daerah' => ['Merupakan Daerah', 'merupakan-daerah'],
|
||||||
|
'posisi-unit' => ['Posisi unit', 'posisi-unit'],
|
||||||
|
'bentuk-unit' => ['Bentuk unit', 'bentuk-unit'],
|
||||||
|
'fasilitas-objek' => ['Fasilitas Umum Dekat Objek', 'fasilitas-objek'],
|
||||||
|
'foto-objek-jaminan' => ['Foto Objek Jaminan', 'foto-objek-jaminan'],
|
||||||
|
'perizinan' => ['Perizinan', 'perizinan'],
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ namespace Modules\Lpj\Services;
|
|||||||
|
|
||||||
use Modules\Lpj\Models\Inspeksi;
|
use Modules\Lpj\Models\Inspeksi;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use \Illuminate\Support\Facades\Log;
|
|
||||||
|
|
||||||
class SaveFormInspesksiService
|
class SaveFormInspesksiService
|
||||||
{
|
{
|
||||||
@@ -21,7 +20,6 @@ class SaveFormInspesksiService
|
|||||||
$inspeksi->name = $request->input('type');
|
$inspeksi->name = $request->input('type');
|
||||||
|
|
||||||
$processedData = $this->getActionSpecificRules($validatedData, $type, $request, $inspeksi);
|
$processedData = $this->getActionSpecificRules($validatedData, $type, $request, $inspeksi);
|
||||||
Log::info($processedData);
|
|
||||||
|
|
||||||
// Merge data lama dengan data baru
|
// Merge data lama dengan data baru
|
||||||
$existingData = json_decode($inspeksi->data_form, true) ?: [];
|
$existingData = json_decode($inspeksi->data_form, true) ?: [];
|
||||||
@@ -35,7 +33,6 @@ class SaveFormInspesksiService
|
|||||||
'upload_gs'
|
'upload_gs'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
foreach ($fotoTypes as $fotoType) {
|
foreach ($fotoTypes as $fotoType) {
|
||||||
if (isset($existingData[$fotoType])) {
|
if (isset($existingData[$fotoType])) {
|
||||||
$processedData[$fotoType] = $existingData[$fotoType];
|
$processedData[$fotoType] = $existingData[$fotoType];
|
||||||
@@ -60,7 +57,7 @@ class SaveFormInspesksiService
|
|||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return [
|
return [
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'message' => 'Gagal menyimpan data : '.$e->getMessage(),
|
'message' => 'Gagal menyimpan data',
|
||||||
'error' => $e->getMessage()
|
'error' => $e->getMessage()
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -88,31 +85,36 @@ class SaveFormInspesksiService
|
|||||||
$hasAssetDescriptionRules = false;
|
$hasAssetDescriptionRules = false;
|
||||||
$hasFactaData = false;
|
$hasFactaData = false;
|
||||||
|
|
||||||
$actions = array_map('trim', explode(',', $action));
|
|
||||||
$pisah = array_filter($actions, function($act) use ($allowedActions) {
|
|
||||||
return isset($allowedActions[$act]);
|
$pisah = array_filter(
|
||||||
});
|
explode(',', $action),
|
||||||
|
function ($act) use ($allowedActions) {
|
||||||
|
return isset($allowedActions[trim($act)]);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// dd($pisah);
|
||||||
|
|
||||||
foreach ($pisah as $act) {
|
foreach ($pisah as $act) {
|
||||||
$act = trim($act); // Bersihkan spasi
|
$act = trim($act); // Bersihkan spasi
|
||||||
if($act){
|
if (isset($allowedActions[$act])) {
|
||||||
if (isset($allowedActions[$act])) {
|
$method = $allowedActions[$act];
|
||||||
$method = $allowedActions[$act];
|
|
||||||
|
|
||||||
$actionRules = $this->$method($data, $request, $inspeksi);
|
$actionRules = $this->$method($data, $request, $inspeksi);
|
||||||
$rules = array_merge($rules, $actionRules);
|
$rules = array_merge($rules, $actionRules);
|
||||||
// Cek apakah act memerlukan asset description rules
|
|
||||||
if($act){
|
|
||||||
if (in_array($act, ['apartemen-kantor', 'tanah', 'bangunan', 'rap'])) {
|
|
||||||
$hasAssetDescriptionRules = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_array($act, ['rap'])) {
|
// Cek apakah act memerlukan asset description rules
|
||||||
$hasFactaData = true;
|
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 ($hasAssetDescriptionRules) {
|
if ($hasAssetDescriptionRules) {
|
||||||
|
|||||||
107
app/Services/TypeLaporanService.php
Normal file
107
app/Services/TypeLaporanService.php
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Lpj\Services;
|
||||||
|
|
||||||
|
class TypeLaporanService
|
||||||
|
{
|
||||||
|
public function handleRequest($type, $permohonanId, $documentId, $jaminanId, $surveyorController)
|
||||||
|
{
|
||||||
|
$permohonan = $this->getPermohonanData($surveyorController, $permohonanId, $documentId, $jaminanId);
|
||||||
|
|
||||||
|
if ($permohonan->status == 'proses-laporan') {
|
||||||
|
throw new \Exception('Masih dalam proses laporan');
|
||||||
|
}
|
||||||
|
|
||||||
|
$nomorLaporan = $this->generateNomorLaporan($surveyorController, $permohonan, $documentId, $type);
|
||||||
|
$inspeksi = $this->getInspeksi($permohonanId, $documentId);
|
||||||
|
$this->updatePenilai($permohonanId, $documentId, $type);
|
||||||
|
|
||||||
|
$debitur = Debiture::find($permohonan->debiture_id);
|
||||||
|
$forminspeksi = $inspeksi ? json_decode($inspeksi->data_form, true) : null;
|
||||||
|
|
||||||
|
$locationCodes = $this->getAlamatData($debitur, $forminspeksi);
|
||||||
|
$locationData = $this->getLocationData(
|
||||||
|
$locationCodes['provinceCode'],
|
||||||
|
$locationCodes['cityCode'],
|
||||||
|
$locationCodes['districtCode'],
|
||||||
|
$forminspeksi
|
||||||
|
);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'permohonan' => $permohonan,
|
||||||
|
'nomorLaporan' => $nomorLaporan,
|
||||||
|
'basicData' => $surveyorController->getCommonData(),
|
||||||
|
'cities' => $locationData['cities'],
|
||||||
|
'districts' => $locationData['districts'],
|
||||||
|
'villages' => $locationData['villages'],
|
||||||
|
'forminspeksi' => $forminspeksi,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getPermohonanData($surveyorController, $permohonanId, $documentId, $jaminanId)
|
||||||
|
{
|
||||||
|
return $surveyorController->getPermohonanData($permohonanId, $documentId, $jaminanId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generateNomorLaporan($surveyorController, $permohonan, $documentId, $type)
|
||||||
|
{
|
||||||
|
return $surveyorController->generateNomorLaporan($permohonan, $documentId, $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getInspeksi($permohonanId, $documentId)
|
||||||
|
{
|
||||||
|
return Inspeksi::where('permohonan_id', $permohonanId)
|
||||||
|
->where('document_id', $documentId)
|
||||||
|
->first();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function updatePenilai($permohonanId, $documentId, $type)
|
||||||
|
{
|
||||||
|
// Logika untuk memperbarui data berdasarkan tipe laporan
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getAlamatData($debitur, $forminspeksi)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'provinceCode' => $debitur->province_id ?? $forminspeksi['province'],
|
||||||
|
'cityCode' => $debitur->city_id ?? $forminspeksi['city'],
|
||||||
|
'districtCode' => $debitur->district_id ?? $forminspeksi['district'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLocationData($provinceCode, $cityCode, $districtCode, $forminspeksi)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'cities' => $this->fetchCityData($provinceCode),
|
||||||
|
'districts' => $this->fetchDistrictData($cityCode),
|
||||||
|
'villages' => $this->fetchVillageData($districtCode),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function fetchCityData($provinceCode)
|
||||||
|
{
|
||||||
|
return City::where('province_code', $provinceCode)->get();
|
||||||
|
}
|
||||||
|
private function fetchDistrictData($cityCode)
|
||||||
|
{
|
||||||
|
return District::where('city_code', $cityCode)->get();
|
||||||
|
}
|
||||||
|
private function fetchVillageData($districtCode)
|
||||||
|
{
|
||||||
|
return Village::where('district_code', $districtCode)->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function updateOrCreatePenilai($permohonan_id, $document_id, $type, $data)
|
||||||
|
{
|
||||||
|
return Penilai::updateOrCreate(
|
||||||
|
[
|
||||||
|
'permohonan_id' => $permohonan_id,
|
||||||
|
'dokument_id' => $document_id,
|
||||||
|
|
||||||
|
],
|
||||||
|
[
|
||||||
|
$type => json_encode($data),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user