fix: tampilan detail laporan, dan ganti route print out, penambahan service
This commit is contained in:
@@ -10,7 +10,7 @@ use Modules\Lpj\Models\StatusPermohonan;
|
|||||||
use Modules\Lpj\Exports\LaporanPenilaiJaminanExport;
|
use Modules\Lpj\Exports\LaporanPenilaiJaminanExport;
|
||||||
use Maatwebsite\Excel\Facades\Excel;
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
use Modules\Lpj\Models\Branch;
|
use Modules\Lpj\Models\Branch;
|
||||||
use Modules\Lpj\Http\Controllers\SurveyorController;
|
use Modules\Lpj\Services\PreviewLaporanService;
|
||||||
use Modules\Lpj\Models\Inspeksi;
|
use Modules\Lpj\Models\Inspeksi;
|
||||||
use Modules\Lpj\Models\Penilai;
|
use Modules\Lpj\Models\Penilai;
|
||||||
|
|
||||||
@@ -21,11 +21,11 @@ class LaporanPenilaiJaminanController extends Controller
|
|||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
protected $surveyorController;
|
protected $previewLaporanService;
|
||||||
|
|
||||||
public function __construct(SurveyorController $surveyorController)
|
public function __construct(PreviewLaporanService $previewLaporanService)
|
||||||
{
|
{
|
||||||
$this->surveyorController = $surveyorController;
|
$this->previewLaporanService = $previewLaporanService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
@@ -40,54 +40,8 @@ class LaporanPenilaiJaminanController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function show($permohonan_id, $dokumen_id, $jaminan_id)
|
public function show($permohonan_id, $dokumen_id, $jaminan_id)
|
||||||
{
|
{
|
||||||
$permohonan = $this->surveyorController->getPermohonanJaminanId(
|
$back = route('laporan-penilai-jaminan.index');
|
||||||
$permohonan_id,
|
return $this->previewLaporanService->previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back);
|
||||||
$dokumen_id,
|
|
||||||
$jaminan_id
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$basicData = $this->surveyorController->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();
|
|
||||||
|
|
||||||
$nomorLaporan = getNomorLaporan($permohonan_id, $dokumen_id);
|
|
||||||
$tanggalLaporan = $lpj->created_at ?? null;
|
|
||||||
$forminspeksi = null;
|
|
||||||
$lpjData = null;
|
|
||||||
$formFoto = null;
|
|
||||||
|
|
||||||
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'] ?? [];
|
|
||||||
|
|
||||||
$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::laporan-penilai-jaminan.show', compact('permohonan', 'basicData', 'forminspeksi', 'alamat', 'lpjData', 'memo', 'resumeData', 'rap', 'report', 'lpj', 'formFoto', 'nomorLaporan', 'tanggalLaporan', 'dataPembanding', 'inspeksi', 'statusLpj'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,18 +26,21 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest;
|
|||||||
use Modules\Lpj\Models\Authorization;
|
use Modules\Lpj\Models\Authorization;
|
||||||
use Modules\Lpj\Models\Debiture;
|
use Modules\Lpj\Models\Debiture;
|
||||||
use Modules\Lpj\Services\SaveFormInspesksiService;
|
use Modules\Lpj\Services\SaveFormInspesksiService;
|
||||||
|
use Modules\Lpj\Services\PreviewLaporanService;
|
||||||
|
|
||||||
class PenilaiController extends Controller
|
class PenilaiController extends Controller
|
||||||
{
|
{
|
||||||
public $user;
|
public $user;
|
||||||
protected $surveyorController;
|
protected $surveyorController;
|
||||||
protected $inspeksiService;
|
protected $inspeksiService;
|
||||||
|
protected $previewLaporanService;
|
||||||
|
|
||||||
|
|
||||||
public function __construct(SurveyorController $surveyorController, SaveFormInspesksiService $inspeksiService)
|
public function __construct(SurveyorController $surveyorController, SaveFormInspesksiService $inspeksiService, PreviewLaporanService $previewLaporanService)
|
||||||
{
|
{
|
||||||
$this->surveyorController = $surveyorController;
|
$this->surveyorController = $surveyorController;
|
||||||
$this->inspeksiService = $inspeksiService;
|
$this->inspeksiService = $inspeksiService;
|
||||||
|
$this->previewLaporanService = $previewLaporanService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -548,13 +551,7 @@ class PenilaiController extends Controller
|
|||||||
return view('lpj::penilai.components.call-report', compact('permohonan', 'basicData', 'nomorLaporan', 'forminspeksi', 'cities', 'districts', 'villages', 'cekAlamat', 'callReport'));
|
return view('lpj::penilai.components.call-report', compact('permohonan', 'basicData', 'nomorLaporan', 'forminspeksi', 'cities', 'districts', 'villages', 'cekAlamat', 'callReport'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the specified resource from storage.
|
|
||||||
*/
|
|
||||||
public function destroy($id)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dataForDatatables(Request $request)
|
public function dataForDatatables(Request $request)
|
||||||
{
|
{
|
||||||
@@ -1277,132 +1274,13 @@ class PenilaiController extends Controller
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function print_out(Request $request)
|
public function print_out_laporan($permohonan_id, $document_id, $jaminan_id)
|
||||||
{
|
{
|
||||||
$documentId = $request->query('documentId');
|
// jika tidak ada id kembalikan ke halaman sebelumnya
|
||||||
$jaminanId = $request->query('jaminanId');
|
if (!$permohonan_id || !$document_id || !$jaminan_id) {
|
||||||
$permohonanId = $request->query('permohonanId');
|
return redirect()->back()->with('error', 'Laporan tidak valid');
|
||||||
$statusLpj = $request->query('statusLpj');
|
|
||||||
$tipeLaporan = $request->query('type');
|
|
||||||
|
|
||||||
$permohonan = $this->surveyorController->getPermohonanJaminanId(
|
|
||||||
$permohonanId,
|
|
||||||
$documentId,
|
|
||||||
$jaminanId
|
|
||||||
);
|
|
||||||
|
|
||||||
$basicData = $this->surveyorController->getCommonData();
|
|
||||||
|
|
||||||
$inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
|
|
||||||
$lpj = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
|
|
||||||
|
|
||||||
$nomorLaporan = getNomorLaporan($permohonanId, $documentId);
|
|
||||||
$tanggalLaporan = $lpj->created_at ?? null;
|
|
||||||
$forminspeksi = null;
|
|
||||||
$lpjData = null;
|
|
||||||
$formFoto = null;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
return $this->previewLaporanService->printOutLaporan($permohonan_id, $document_id, $jaminan_id);
|
||||||
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'] ?? [];
|
|
||||||
|
|
||||||
$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);
|
|
||||||
try {
|
|
||||||
|
|
||||||
if ($statusLpj) {
|
|
||||||
// $pdf = view('lpj::' . $viewLaporan, compact(
|
|
||||||
$pdf = PDF::loadView('lpj::' . $viewLaporan, compact(
|
|
||||||
'permohonan',
|
|
||||||
'forminspeksi',
|
|
||||||
'lpjData',
|
|
||||||
'formFoto',
|
|
||||||
'basicData',
|
|
||||||
'inspeksi',
|
|
||||||
'lpj',
|
|
||||||
'statusLpj',
|
|
||||||
'alamat',
|
|
||||||
'dataPembanding',
|
|
||||||
'nomorLaporan',
|
|
||||||
'memo',
|
|
||||||
'resumeData',
|
|
||||||
'tanggalLaporan',
|
|
||||||
'rap',
|
|
||||||
'report'
|
|
||||||
));
|
|
||||||
// return $pdf;
|
|
||||||
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);
|
|
||||||
$pdf->setPaper('A4', 'portrait');
|
|
||||||
$pdf->set_option('isHtml5ParserEnabled', true);
|
|
||||||
$pdf->set_option('isPhpEnabled', true);
|
|
||||||
return response($pdf->output(), 200)
|
|
||||||
->header('Content-Type', 'application/pdf')
|
|
||||||
->header('Content-Disposition', 'inline; filename="Laporan_' . $tipeLaporan . '_' . $permohonan->debiture->name . '_' . $cleanNomorLaporan . '.pdf"');
|
|
||||||
// return $pdf->stream();
|
|
||||||
} else {
|
|
||||||
// $pdf = view('lpj::' . $viewLaporan, compact(
|
|
||||||
$pdf = PDF::loadView('lpj::' . $viewLaporan, compact(
|
|
||||||
'permohonan',
|
|
||||||
'forminspeksi',
|
|
||||||
'lpjData',
|
|
||||||
'formFoto',
|
|
||||||
'basicData',
|
|
||||||
'inspeksi',
|
|
||||||
'lpj',
|
|
||||||
'statusLpj',
|
|
||||||
'alamat',
|
|
||||||
'dataPembanding',
|
|
||||||
'nomorLaporan',
|
|
||||||
'memo',
|
|
||||||
'resumeData',
|
|
||||||
'tanggalLaporan',
|
|
||||||
'rap',
|
|
||||||
'report'
|
|
||||||
));
|
|
||||||
// return $pdf;
|
|
||||||
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);
|
|
||||||
$pdf->setPaper('A4', 'portrait');
|
|
||||||
$pdf->set_option('isHtml5ParserEnabled', true);
|
|
||||||
$pdf->set_option('isPhpEnabled', true);
|
|
||||||
return $pdf->download('Laporan_' . $tipeLaporan . '_' . $permohonan->debiture->name . '_' . $cleanNomorLaporan . '_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.' . $e->getMessage()], 500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1429,48 +1307,7 @@ class PenilaiController extends Controller
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkPrintOutLaporan($permohonan_id, $dokumen_id)
|
|
||||||
{
|
|
||||||
// $permohonanId = $request->query('permohonanId');
|
|
||||||
// $documentId = $request->query('documentId');
|
|
||||||
$permohonanId = $permohonan_id;
|
|
||||||
$documentId = $request->query('documentId');
|
|
||||||
|
|
||||||
// Ambil data berdasarkan ID
|
|
||||||
$statusLpj = Penilai::where('permohonan_id', $permohonanId)
|
|
||||||
->where('dokument_id', $documentId)
|
|
||||||
->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') {
|
|
||||||
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 generateNoLaporan($permohonan, $documentId, $type)
|
public function generateNoLaporan($permohonan, $documentId, $type)
|
||||||
@@ -1510,239 +1347,6 @@ class PenilaiController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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."
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function revisiSurveyor(Request $request, $id)
|
public function revisiSurveyor(Request $request, $id)
|
||||||
{
|
{
|
||||||
$permohonan = Permohonan::findOrFail($id);
|
$permohonan = Permohonan::findOrFail($id);
|
||||||
@@ -1773,4 +1377,24 @@ class PenilaiController extends Controller
|
|||||||
'message' => 'Berhasil Revisi Ke surveyor',
|
'message' => 'Berhasil Revisi Ke surveyor',
|
||||||
], 200);
|
], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function showLaporanInspeksi(
|
||||||
|
$permohonan_id,
|
||||||
|
$dokumen_id,
|
||||||
|
$jaminan_id,
|
||||||
|
Request $request)
|
||||||
|
{
|
||||||
|
if ($request->type == 'penilai') {
|
||||||
|
$back = route('penilai.show', $permohonan_id);
|
||||||
|
}else{
|
||||||
|
$back = route('surveyor.show', $permohonan_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->previewLaporanService->previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function showInspectionReportReview($permohonan_id, $dokumen_id, $jaminan_id)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2718,7 +2718,7 @@ class SurveyorController extends Controller
|
|||||||
$fileName = 'inspeksi-' . $namaDebiture . '-data.pdf';
|
$fileName = 'inspeksi-' . $namaDebiture . '-data.pdf';
|
||||||
$pdf->set_option('isHtml5ParserEnabled', true);
|
$pdf->set_option('isHtml5ParserEnabled', true);
|
||||||
$pdf->set_option('isPhpEnabled', true);
|
$pdf->set_option('isPhpEnabled', true);
|
||||||
return $pdf->stream($fileName);
|
return $pdf->download($fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function approveReschedule(Request $request, $id)
|
public function approveReschedule(Request $request, $id)
|
||||||
|
|||||||
597
app/Services/PreviewLaporanService.php
Normal file
597
app/Services/PreviewLaporanService.php
Normal file
@@ -0,0 +1,597 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Lpj\Services;
|
||||||
|
|
||||||
|
use Modules\Lpj\Models\Debiture;
|
||||||
|
use Modules\Lpj\Models\LaporanExternal;
|
||||||
|
use Modules\Lpj\Models\Permohonan;
|
||||||
|
use Modules\Lpj\Models\Branch;
|
||||||
|
use Modules\Lpj\Models\Surveyor;
|
||||||
|
use Modules\Lpj\Models\BentukTanah;
|
||||||
|
use Modules\Lpj\Models\KonturTanah;
|
||||||
|
use Modules\Location\Models\Province;
|
||||||
|
use Modules\Location\Models\City;
|
||||||
|
use Modules\Location\Models\District;
|
||||||
|
use Modules\Location\Models\Village;
|
||||||
|
use Modules\Lpj\Models\PosisiKavling;
|
||||||
|
use Modules\Lpj\Models\KondisiFisikTanah;
|
||||||
|
use Modules\Lpj\Models\FotoObjekJaminan;
|
||||||
|
use Modules\Lpj\Models\Perizinan;
|
||||||
|
use Modules\Lpj\Models\KetinggianTanah;
|
||||||
|
use Modules\Lpj\Models\SifatBangunan;
|
||||||
|
use Modules\Lpj\Models\JenisJaminan;
|
||||||
|
use Modules\Lpj\Models\JenisBangunan;
|
||||||
|
use Modules\Lpj\Models\KondisiBangunan;
|
||||||
|
use Modules\Lpj\Models\SpekBangunan;
|
||||||
|
use Modules\Lpj\Models\SpekKategoritBangunan;
|
||||||
|
use Modules\Lpj\Models\SaranaPelengkap;
|
||||||
|
use Modules\Lpj\Models\ArahMataAngin;
|
||||||
|
use Modules\Lpj\Models\Analisa;
|
||||||
|
use Modules\Lpj\Models\Penilaian;
|
||||||
|
use Modules\Lpj\Models\PerkerasanJalan;
|
||||||
|
use Modules\Lpj\Models\AnalisaFakta;
|
||||||
|
use Modules\Lpj\Models\AnalisaLingkungan;
|
||||||
|
use Modules\Lpj\Models\AnalisaTanahBagunan;
|
||||||
|
use Modules\Lpj\Models\SpekBangunanAnalisa;
|
||||||
|
use Modules\Lpj\Models\Denah;
|
||||||
|
use Modules\Lpj\Models\FotoJaminan;
|
||||||
|
use Modules\Lpj\Models\Lingkungan;
|
||||||
|
use Modules\Lpj\Models\LantaiUnit;
|
||||||
|
use Modules\Lpj\Models\Teams;
|
||||||
|
use Modules\Lpj\Models\Lantai;
|
||||||
|
use Modules\Lpj\Models\Inspeksi;
|
||||||
|
use Modules\Lpj\Models\ViewUnit;
|
||||||
|
use Modules\Lpj\Models\JenisUnit;
|
||||||
|
use Modules\Lpj\Models\BentukUnit;
|
||||||
|
use Modules\Lpj\Models\PosisiUnit;
|
||||||
|
use Modules\Lpj\Models\TerletakArea;
|
||||||
|
use Modules\Lpj\Models\FasilitasObjek;
|
||||||
|
use Modules\Lpj\Models\MerupakanDaerah;
|
||||||
|
use Modules\Lpj\Models\ObjekJaminan;
|
||||||
|
use Modules\Lpj\Models\ModelAlatBerat;
|
||||||
|
use Modules\Lpj\Models\JenisPesawat;
|
||||||
|
use Modules\Lpj\Models\DokumenJaminan;
|
||||||
|
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;
|
||||||
|
use Modules\Lpj\Models\GolonganMasySekitar;
|
||||||
|
use Modules\Lpj\Models\TingkatKeramaian;
|
||||||
|
use Modules\Lpj\Models\TujuanPenilaian;
|
||||||
|
use Modules\Lpj\Models\LaluLintasLokasi;
|
||||||
|
use Modules\Lpj\Models\SpekBagunanAnalisaDetail;
|
||||||
|
use Modules\Lpj\Http\Requests\SurveyorRequest;
|
||||||
|
use Modules\Lpj\Http\Requests\FormSurveyorRequest;
|
||||||
|
use Modules\Lpj\Jobs\SendJadwalKunjunganEmailJob;
|
||||||
|
use App\Helpers\Lpj;
|
||||||
|
use Modules\Lpj\Models\Penilai;
|
||||||
|
use Barryvdh\DomPDF\Facade\Pdf;
|
||||||
|
class PreviewLaporanService
|
||||||
|
{
|
||||||
|
public function previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back)
|
||||||
|
{
|
||||||
|
$permohonan = $this->getPermohonanJaminanId(
|
||||||
|
$permohonan_id,
|
||||||
|
$dokumen_id,
|
||||||
|
$jaminan_id
|
||||||
|
);
|
||||||
|
|
||||||
|
$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();
|
||||||
|
|
||||||
|
$nomorLaporan = getNomorLaporan($permohonan_id, $dokumen_id);
|
||||||
|
$tanggalLaporan = $lpj->created_at ?? null;
|
||||||
|
$forminspeksi = null;
|
||||||
|
$lpjData = null;
|
||||||
|
$formFoto = null;
|
||||||
|
|
||||||
|
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'] ?? [];
|
||||||
|
|
||||||
|
$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();
|
||||||
|
|
||||||
|
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)->where('dokument_id', $document_id)->first();
|
||||||
|
|
||||||
|
$nomorLaporan = getNomorLaporan($permohonan_id, $document_id);
|
||||||
|
$tanggalLaporan = $lpj->created_at ?? null;
|
||||||
|
|
||||||
|
$forminspeksi = null;
|
||||||
|
$lpjData = null;
|
||||||
|
$formFoto = null;
|
||||||
|
|
||||||
|
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;
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
$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();
|
||||||
|
|
||||||
|
// 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') {
|
||||||
|
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'],
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
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),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
<a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => $dokumen->id, 'jenis_jaminan_id' => $dokumen->jenis_jaminan_id ]) }}" class="btn btn-light">
|
<a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => $dokumen->id, 'jenis_jaminan_id' => $dokumen->jenis_jaminan_id ]) }}" class="btn btn-light">
|
||||||
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
|
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-success" onclick="checkLaporan('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }}, 0 )">
|
<a class="btn btn-success" href="{{ route('penilai.print-out-laporan', ['permohonan_id' => $permohonan->id, 'dokument_id' => $dokumen->id, 'jenis_jaminan_id' => $dokumen->jenis_jaminan_id ]) }}">
|
||||||
<i class="ki-filled ki-printer"></i> Print Laporan
|
<i class="ki-filled ki-printer"></i> Print Laporan
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -100,4 +100,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
@include('lpj::surveyor.js.utils')
|
{{-- @include('lpj::surveyor.js.utils') --}}
|
||||||
|
|||||||
117
resources/views/component/show-laporan-inspeksi.blade.php
Normal file
117
resources/views/component/show-laporan-inspeksi.blade.php
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
@extends('layouts.main')
|
||||||
|
|
||||||
|
@section('breadcrumbs')
|
||||||
|
{{-- {{ Breadcrumbs::render(request()->route()->getName()) }} --}}
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header py-5 flex-wrap">
|
||||||
|
<div class="card-title flex flex-row gap-1.5">
|
||||||
|
<button id="tab-laporan" class="btn btn-sm btn-primary">Laporan</button>
|
||||||
|
<button id="tab-hasil" class="btn btn-sm btn-light">Hasil Inspeksi</button>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-wrap gap-2.5">
|
||||||
|
<a href="{{ $back ?? route()->previous()}}" class="btn btn-xs btn-info"><i
|
||||||
|
class="ki-filled ki-exit-left"></i>
|
||||||
|
Back</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
@php
|
||||||
|
$permohonan_id = request()->segment(3);
|
||||||
|
$dokumen_id = request()->segment(4);
|
||||||
|
$jenis_jaminan_id = request()->segment(5);
|
||||||
|
@endphp
|
||||||
|
|
||||||
|
<div id="laporan" class="tab-content">
|
||||||
|
<div class="floating-button">
|
||||||
|
<a href="penilai/print-out-laporan/{{ $permohonan_id }}/{{ $dokumen_id }}/{{ $jenis_jaminan_id }}" class="btn btn-primary">
|
||||||
|
Cetak Laporan
|
||||||
|
<i class="ki-filled ki-printer"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@php
|
||||||
|
$laporan = [
|
||||||
|
'sederhana' => 'lpj::penilai.components.print-out-sederhana',
|
||||||
|
'standar' => 'lpj::penilai.components.print-out-standar',
|
||||||
|
'resume' => 'lpj::penilai.components.print-resume',
|
||||||
|
'memo' => 'lpj::penilai.components.print-memo',
|
||||||
|
'rap' => 'lpj::penilai.components.print-out-rap',
|
||||||
|
'call-report' => 'penilai.components.print-out-call-report',
|
||||||
|
];
|
||||||
|
@endphp
|
||||||
|
@if (array_key_exists($lpj->type_penilai, $laporan))
|
||||||
|
@include($laporan[$lpj->type_penilai])
|
||||||
|
@else
|
||||||
|
<p>Tipe laporan tidak ditemukan.</p>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
<div id="hasil-inspeksi" class="tab-content hidden-tab">
|
||||||
|
<div class="floating-button">
|
||||||
|
<a href="surveyor/print-out-inspeksi/{{ $permohonan_id }}/{{ $dokumen_id }}/{{ $jenis_jaminan_id }}"
|
||||||
|
class="btn btn-primary">
|
||||||
|
Cetak Laporan
|
||||||
|
<i class="ki-filled ki-printer"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
@include('lpj::surveyor.components.print-out.main')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
const tabLaporan = document.getElementById('tab-laporan');
|
||||||
|
const tabHasil = document.getElementById('tab-hasil');
|
||||||
|
const laporanContent = document.getElementById('laporan');
|
||||||
|
const hasilContent = document.getElementById('hasil-inspeksi');
|
||||||
|
|
||||||
|
tabLaporan.addEventListener('click', () => {
|
||||||
|
tabLaporan.classList.add('btn-primary');
|
||||||
|
tabLaporan.classList.remove('btn-light');
|
||||||
|
tabHasil.classList.add('btn-light');
|
||||||
|
tabHasil.classList.remove('btn-primary');
|
||||||
|
laporanContent.classList.remove('hidden-tab');
|
||||||
|
hasilContent.classList.add('hidden-tab');
|
||||||
|
});
|
||||||
|
|
||||||
|
tabHasil.addEventListener('click', () => {
|
||||||
|
tabHasil.classList.add('btn-primary');
|
||||||
|
tabHasil.classList.remove('btn-light');
|
||||||
|
tabLaporan.classList.add('btn-light');
|
||||||
|
tabLaporan.classList.remove('btn-primary');
|
||||||
|
laporanContent.classList.add('hidden-tab');
|
||||||
|
hasilContent.classList.remove('hidden-tab');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.hidden-tab {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-button {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 20px;
|
||||||
|
right: 20px;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-button .btn {
|
||||||
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 50px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-button .btn:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
transition: transform 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{{-- @include('lpj::surveyor.js.utils') --}}
|
||||||
|
@endsection
|
||||||
@@ -358,7 +358,7 @@
|
|||||||
<a class="btn btn-sm btn-info" href="laporan-penilai-jaminan/show/${data.id}/${dokumen.id}/${dokumen.jenis_jaminan_id}" >
|
<a class="btn btn-sm btn-info" href="laporan-penilai-jaminan/show/${data.id}/${dokumen.id}/${dokumen.jenis_jaminan_id}" >
|
||||||
<i class="ki-filled ki-eye"></i>Lihat
|
<i class="ki-filled ki-eye"></i>Lihat
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-sm btn-success" onclick="checkLaporan('${data.id}', '${dokumen.id}', '${dokumen.jenis_jaminan_id}', 0)">
|
<a class="btn btn-sm btn-success" href="penilai/print-out-laporan/${data.id}/${dokumen.id}/${dokumen.jenis_jaminan_id}">
|
||||||
<i class="ki-filled ki-printer"></i>Laporan
|
<i class="ki-filled ki-printer"></i>Laporan
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@@ -516,38 +516,5 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
|
||||||
function checkLaporan(permohonanId, documentId, statusLpj) {
|
|
||||||
// showLoadingSwal('Tunggu...');
|
|
||||||
fetch(
|
|
||||||
`{{ url('/penilai/check-laporan') }}?permohonanId=${permohonanId}&documentId=${documentId}`
|
|
||||||
)
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.status) {
|
|
||||||
window.location.href =
|
|
||||||
`{{ route('penilai.print-out') }}?permohonanId=${permohonanId}&documentId=${documentId}&statusLpj=${0}&type=${data.status}`;
|
|
||||||
} else {
|
|
||||||
// Jika laporan belum ada, tampilkan pesan peringatan
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Laporan Belum Ada',
|
|
||||||
text: data.message,
|
|
||||||
icon: 'warning',
|
|
||||||
confirmButtonText: 'OK',
|
|
||||||
confirmButtonColor: '#3085d6',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Error:', error);
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Terjadi Kesalahan',
|
|
||||||
text: 'Tidak dapat memproses permintaan. Silakan coba lagi nanti.',
|
|
||||||
icon: 'error',
|
|
||||||
confirmButtonText: 'OK',
|
|
||||||
confirmButtonColor: '#d33',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -8,7 +8,10 @@
|
|||||||
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
|
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header py-5 flex-wrap">
|
<div class="card-header py-5 flex-wrap">
|
||||||
<h3 class="card-title">Lihat Laporan</h3>
|
<div class="card-title flex flex-row gap-1.5">
|
||||||
|
<button id="tab-laporan" class="btn btn-sm btn-primary">Laporan</button>
|
||||||
|
<button id="tab-hasil" class="btn btn-sm btn-light">Hasil Inspeksi</button>
|
||||||
|
</div>
|
||||||
<div class="flex items-wrap gap-2.5">
|
<div class="flex items-wrap gap-2.5">
|
||||||
<a href="{{ route('laporan-penilai-jaminan.index') }}" class="btn btn-xs btn-info"><i
|
<a href="{{ route('laporan-penilai-jaminan.index') }}" class="btn btn-xs btn-info"><i
|
||||||
class="ki-filled ki-exit-left"></i>
|
class="ki-filled ki-exit-left"></i>
|
||||||
@@ -17,6 +20,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@php
|
||||||
|
$permohonan_id = request()->segment(3);
|
||||||
|
$dokumen_id = request()->segment(4);
|
||||||
|
$jenis_jaminan_id = request()->segment(5);
|
||||||
|
@endphp
|
||||||
|
|
||||||
|
<div id="laporan" class="tab-content">
|
||||||
|
<div class="floating-button">
|
||||||
|
<a href="penilai/print-out-laporan/{{ $permohonan_id }}/{{ $dokumen_id }}/{{ $jenis_jaminan_id }}" class="btn btn-primary">
|
||||||
|
Cetak Laporan
|
||||||
|
<i class="ki-filled ki-printer"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
@php
|
@php
|
||||||
$laporan = [
|
$laporan = [
|
||||||
@@ -28,12 +44,74 @@
|
|||||||
'call-report' => 'penilai.components.print-out-call-report',
|
'call-report' => 'penilai.components.print-out-call-report',
|
||||||
];
|
];
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
@if (array_key_exists($lpj->type_penilai, $laporan))
|
@if (array_key_exists($lpj->type_penilai, $laporan))
|
||||||
@include($laporan[$lpj->type_penilai])
|
@include($laporan[$lpj->type_penilai])
|
||||||
@else
|
@else
|
||||||
<p>Tipe laporan tidak ditemukan.</p>
|
<p>Tipe laporan tidak ditemukan.</p>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
<div id="hasil-inspeksi" class="tab-content hidden-tab">
|
||||||
|
<div class="floating-button">
|
||||||
|
<a href="surveyor/print-out-inspeksi/{{ $permohonan_id }}/{{ $dokumen_id }}/{{ $jenis_jaminan_id }}"
|
||||||
|
class="btn btn-primary">
|
||||||
|
Cetak Laporan
|
||||||
|
<i class="ki-filled ki-printer"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
@include('lpj::surveyor.components.print-out.main')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
@endsection
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
const tabLaporan = document.getElementById('tab-laporan');
|
||||||
|
const tabHasil = document.getElementById('tab-hasil');
|
||||||
|
const laporanContent = document.getElementById('laporan');
|
||||||
|
const hasilContent = document.getElementById('hasil-inspeksi');
|
||||||
|
|
||||||
|
tabLaporan.addEventListener('click', () => {
|
||||||
|
tabLaporan.classList.add('btn-primary');
|
||||||
|
tabLaporan.classList.remove('btn-light');
|
||||||
|
tabHasil.classList.add('btn-light');
|
||||||
|
tabHasil.classList.remove('btn-primary');
|
||||||
|
laporanContent.classList.remove('hidden-tab');
|
||||||
|
hasilContent.classList.add('hidden-tab');
|
||||||
|
});
|
||||||
|
|
||||||
|
tabHasil.addEventListener('click', () => {
|
||||||
|
tabHasil.classList.add('btn-primary');
|
||||||
|
tabHasil.classList.remove('btn-light');
|
||||||
|
tabLaporan.classList.add('btn-light');
|
||||||
|
tabLaporan.classList.remove('btn-primary');
|
||||||
|
laporanContent.classList.add('hidden-tab');
|
||||||
|
hasilContent.classList.remove('hidden-tab');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.hidden-tab {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-button {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 20px;
|
||||||
|
right: 20px;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-button .btn {
|
||||||
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 50px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-button .btn:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
transition: transform 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{{-- @include('lpj::surveyor.js.utils') --}}
|
||||||
|
@endsection
|
||||||
|
|||||||
@@ -251,7 +251,7 @@
|
|||||||
|
|
||||||
if(data.penilai.resume) {
|
if(data.penilai.resume) {
|
||||||
resumeButton = `
|
resumeButton = `
|
||||||
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" class="btn btn-sm btn-success">
|
<a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-success">
|
||||||
Resume
|
Resume
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
@@ -266,12 +266,12 @@
|
|||||||
if((data.status_bayar=="sudah_bayar" || data.status_bayar=="tidak_bayar") && data.nilai_liquidasi >0) {
|
if((data.status_bayar=="sudah_bayar" || data.status_bayar=="tidak_bayar") && data.nilai_liquidasi >0) {
|
||||||
if(data.penilai.type_penilai=='resume' && !data.penilai.resume){
|
if(data.penilai.type_penilai=='resume' && !data.penilai.resume){
|
||||||
laporanButton = `
|
laporanButton = `
|
||||||
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0&type=${type}" class="btn btn-sm btn-primary">
|
<a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-primary">
|
||||||
Laporan
|
Laporan
|
||||||
</a>`;
|
</a>`;
|
||||||
} else {
|
} else {
|
||||||
laporanButton = `
|
laporanButton = `
|
||||||
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0&type=${typePenilaian}" class="btn btn-sm btn-primary">
|
<a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-primary">
|
||||||
Laporan
|
Laporan
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
@endforeach
|
@endforeach
|
||||||
</table>
|
</table>
|
||||||
@else
|
@else
|
||||||
<p>Tidak ada faktor negatif yang teridentifikasi.</p>
|
<p></p>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -93,10 +93,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- <footer id="footer"> --}}
|
<footer id="footer">
|
||||||
{{-- Cabang : {{ $permohonan->debiture->branch->name ?? '' }} --}}
|
{{-- Cabang : {{ $permohonan->debiture->branch->name ?? '' }} --}}
|
||||||
{{-- </footer> --}}
|
</footer>
|
||||||
{{-- <script type="text/php">
|
<script type="text/php">
|
||||||
if (isset($pdf)) {
|
if (isset($pdf)) {
|
||||||
$pdf->page_script('
|
$pdf->page_script('
|
||||||
$font = $fontMetrics->get_font("Arial, Helvetica, sans-serif", "normal");
|
$font = $fontMetrics->get_font("Arial, Helvetica, sans-serif", "normal");
|
||||||
@@ -107,8 +107,8 @@
|
|||||||
$pdf->text($x, $y, $pageText, $font, $size);
|
$pdf->text($x, $y, $pageText, $font, $size);
|
||||||
');
|
');
|
||||||
}
|
}
|
||||||
</script> --}}
|
</script>
|
||||||
{{-- <script>
|
<script>
|
||||||
const datas = @json($forminspeksi);
|
const datas = @json($forminspeksi);
|
||||||
console.log(datas);
|
console.log(datas);
|
||||||
const lpjData = @json($lpjData);
|
const lpjData = @json($lpjData);
|
||||||
@@ -138,4 +138,4 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html> --}}
|
</html>
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
|
|
||||||
/* Image Styling */
|
/* Image Styling */
|
||||||
.photo-item img {
|
.photo-item img {
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
width: auto;
|
width: auto;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
@@ -97,13 +99,14 @@
|
|||||||
style="align-content: center; text-align: center; margin-bottom: 20px">
|
style="align-content: center; text-align: center; margin-bottom: 20px">
|
||||||
@foreach ($chunkedPhotos as $item)
|
@foreach ($chunkedPhotos as $item)
|
||||||
@php
|
@php
|
||||||
|
$filePath = $statusLpj == 1 ? storage_path('app/public/' . $item['path']) : asset('storage/' . $item['path']);
|
||||||
$filePath = asset('storage/' . $item['path']);
|
$filePath = asset('storage/' . $item['path']);
|
||||||
$extension = strtolower(pathinfo($item['path'], PATHINFO_EXTENSION));
|
$extension = strtolower(pathinfo($item['path'], PATHINFO_EXTENSION));
|
||||||
$isImage = in_array($extension, ['jpg', 'jpeg', 'png', 'gif']);
|
$isImage = in_array($extension, ['jpg', 'jpeg', 'png', 'gif']);
|
||||||
$isPdf = $extension === 'pdf';
|
$isPdf = $extension === 'pdf';
|
||||||
@endphp
|
@endphp
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 100%; padding: 10px; text-align: center" class="photo-item border" >
|
<td style="width: 100%; padding: 10px; align-content: center; text-align: center" class="photo-item border " >
|
||||||
<p style="font-weight: medium; font-size: 10px">{{ $category }} -
|
<p style="font-weight: medium; font-size: 10px">{{ $category }} -
|
||||||
@isset($subcategory)
|
@isset($subcategory)
|
||||||
@if (trim($subcategory) !== '')
|
@if (trim($subcategory) !== '')
|
||||||
@@ -114,7 +117,7 @@
|
|||||||
</p>
|
</p>
|
||||||
@if ($statusLpj || file_exists(public_path('storage/' . $item['path'])))
|
@if ($statusLpj || file_exists(public_path('storage/' . $item['path'])))
|
||||||
@if ($isImage)
|
@if ($isImage)
|
||||||
<img src="{{ $filePath }}" alt="{{ $item['path'] }}" class="photo-image" style="text-align: center;">
|
<img src="{{ $filePath }}" alt="{{ $item['path'] }}" class="photo-image" style="align-content: center; text-align: center;">
|
||||||
@elseif ($isPdf)
|
@elseif ($isPdf)
|
||||||
<a href="{{ $filePath }}" download="{{ basename($filePath) }}" style="font-size:12px; color:#1a73e8; text-decoration: underline;">
|
<a href="{{ $filePath }}" download="{{ basename($filePath) }}" style="font-size:12px; color:#1a73e8; text-decoration: underline;">
|
||||||
⬇️ Unduh File PDF
|
⬇️ Unduh File PDF
|
||||||
@@ -149,7 +152,8 @@
|
|||||||
style="align-content: center; text-align: center; margin-bottom: 20px">
|
style="align-content: center; text-align: center; margin-bottom: 20px">
|
||||||
@foreach ($chunkedPhotos as $item)
|
@foreach ($chunkedPhotos as $item)
|
||||||
@php
|
@php
|
||||||
$filePath = asset('storage/' . $item['path']);
|
$filePath = $statusLpj == 1 ? storage_path('app/public/' . $item['path']) : asset('storage/' . $item['path']);
|
||||||
|
|
||||||
$extension = strtolower(pathinfo($item['path'], PATHINFO_EXTENSION));
|
$extension = strtolower(pathinfo($item['path'], PATHINFO_EXTENSION));
|
||||||
$isPdf = $extension === 'pdf';
|
$isPdf = $extension === 'pdf';
|
||||||
@endphp
|
@endphp
|
||||||
|
|||||||
@@ -8,12 +8,16 @@
|
|||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<title>Laporan Penilai Jaminan</title>
|
<title>Laporan Penilai Jaminan</title>
|
||||||
|
|
||||||
|
@if ($statusLpj == 1)
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
* {
|
* {
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Define the header rules **/
|
/** Define the header rules **/
|
||||||
@page {
|
@page {
|
||||||
margin-top: 100px;
|
margin-top: 100px;
|
||||||
@@ -21,7 +25,7 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #header {
|
#header {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: -80px;
|
top: -80px;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -29,15 +33,15 @@
|
|||||||
height: 50px;
|
height: 50px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
} */
|
}
|
||||||
|
|
||||||
/* .header-logo {
|
.header-logo {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 20px;
|
left: 20px;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
max-height: 80px;
|
max-height: 80px;
|
||||||
max-width: 150px;
|
max-width: 150px;
|
||||||
} */
|
}
|
||||||
|
|
||||||
.header-title {
|
.header-title {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
@@ -88,9 +92,9 @@
|
|||||||
page-break-before: always;
|
page-break-before: always;
|
||||||
break-before: page;
|
break-before: page;
|
||||||
}
|
}
|
||||||
/* .border {
|
.border {
|
||||||
border: 1px solid #000;
|
border: 1px solid #000;
|
||||||
} */
|
}
|
||||||
|
|
||||||
.no-break {
|
.no-break {
|
||||||
page-break-inside: avoid;
|
page-break-inside: avoid;
|
||||||
@@ -99,6 +103,7 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@endif
|
||||||
</head>
|
</head>
|
||||||
{{-- @php
|
{{-- @php
|
||||||
$data = '';
|
$data = '';
|
||||||
|
|||||||
@@ -55,17 +55,13 @@
|
|||||||
href="{{ route('penilai.lampiran') }}?permohonanId={{ $permohonan->id }}&documentId={{ request('documentId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
|
href="{{ route('penilai.lampiran') }}?permohonanId={{ $permohonan->id }}&documentId={{ request('documentId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
|
||||||
Lampiran Foto dan Dokumen
|
Lampiran Foto dan Dokumen
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => request('documentId'), 'jenis_jaminan_id' => request('jaminanId')]) }}" class="btn btn-light"
|
|
||||||
>
|
|
||||||
<i class="ki-filled ki-printer"></i> Cetak Hasil Inspeksi
|
|
||||||
</a>
|
|
||||||
<a class="btn btn-success"
|
<a class="btn btn-success"
|
||||||
onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', {{ request('jaminanId') }}, 0)">
|
href="penilai/show-laporan-inspeksi/{{ $permohonan->id }}/{{ request('documentId') }}/{{ request('jaminanId') }}?type=detail-penilai">
|
||||||
<i class="ki-filled ki-printer"></i> Cetak Laporan
|
<i class="ki-filled ki-eye"></i> Lihat Laporan dan Inspeksi
|
||||||
</a>
|
</a>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@include('lpj::surveyor.js.utils')
|
{{-- @include('lpj::surveyor.js.utils') --}}
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
foreach ($team_users as $team_user) {
|
foreach ($team_users as $team_user) {
|
||||||
$user = $team_user->user;
|
$user = $team_user->user;
|
||||||
|
|
||||||
if ($user && $user->hasRole('senior-officer')) {
|
if ($user) {
|
||||||
$senior_officer = $user;
|
$senior_officer = $user;
|
||||||
break 3;
|
break 3;
|
||||||
}
|
}
|
||||||
@@ -101,12 +101,12 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 2px; vertical-align: top;">Pemeriksa</td>
|
<td style="padding: 2px; vertical-align: top;">Pemeriksa</td>
|
||||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||||
<td style="padding: 2px; vertical-align: top;">{{ $senior_officer->name ?? '' }}</td>
|
<td style="padding: 2px; vertical-align: top;">{{ $permohonan->approveSo->name ?? '' }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 2px; vertical-align: top;">Menyetujui</td>
|
<td style="padding: 2px; vertical-align: top;">Menyetujui</td>
|
||||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||||
<td style="padding: 2px; vertical-align: top;">{{ $senior_officer->name ?? '' }}</td>
|
<td style="padding: 2px; vertical-align: top;">{{ $permohonan->approveSo->name ?? '' }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 2px; vertical-align: top;">Tanggal Laporan</td>
|
<td style="padding: 2px; vertical-align: top;">Tanggal Laporan</td>
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
|
|
||||||
<div class="no-break">
|
<div class="no-break">
|
||||||
|
|
||||||
<table>
|
<table width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%; border: 1px solid #000;">
|
<td style="width: 50%; border: 1px solid #000;">
|
||||||
STATUS KEPEMILIKAN, HUBUNGAN DAN PENGHUNI
|
STATUS KEPEMILIKAN, HUBUNGAN DAN PENGHUNI
|
||||||
@@ -326,7 +326,7 @@
|
|||||||
{{ implode(', ', $lingkungan['tingkat_keramaian']['tingkat_keramaian'] ?? $lingkungan['tingkat_keramaian'] ?? ['-']) }}
|
{{ implode(', ', $lingkungan['tingkat_keramaian']['tingkat_keramaian'] ?? $lingkungan['tingkat_keramaian'] ?? ['-']) }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
< <tr>
|
<tr>
|
||||||
<td style="padding: 2px; vertical-align: top;">Terletak di Area</td>
|
<td style="padding: 2px; vertical-align: top;">Terletak di Area</td>
|
||||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||||
<td style="padding: 2px; vertical-align: top;">
|
<td style="padding: 2px; vertical-align: top;">
|
||||||
@@ -538,115 +538,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="no-break">
|
<div class="no-break">
|
||||||
<table style="width: 100%;">
|
<table style="width: 100%;">
|
||||||
<tr>
|
|
||||||
<td style="border: 1px solid #000;">
|
|
||||||
F. ANALISA FAKTA
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<table>
|
|
||||||
@if (isset($forminspeksi['fakta']['fakta_positif']) && count($forminspeksi['fakta']['fakta_positif']) > 0)
|
|
||||||
<tr>
|
|
||||||
<td width="25%" style="vertical-align: top;"><strong>Faktor Positif</strong></td>
|
|
||||||
<td>
|
|
||||||
@isset($forminspeksi['fakta']['fakta_positif'])
|
|
||||||
<table style="width: 100%; border-collapse: collapse;">
|
|
||||||
@foreach ($forminspeksi['fakta']['fakta_positif'] as $key => $item)
|
|
||||||
<tr>
|
|
||||||
<td>{!! nl2br(e($item)) !!}</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</table>
|
|
||||||
@endisset
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endif
|
|
||||||
@if (isset($forminspeksi['fakta']['fakta_negatif']) && count($forminspeksi['fakta']['fakta_negatif']) > 0)
|
|
||||||
<tr>
|
|
||||||
<td width="25%" style="vertical-align: top;"><strong>Faktor Negatif</strong></td>
|
|
||||||
<td>
|
|
||||||
@isset($forminspeksi['fakta']['fakta_negatif'])
|
|
||||||
<table style="width: 100%; border-collapse: collapse;">
|
|
||||||
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $key => $item)
|
|
||||||
<tr>
|
|
||||||
<td>{!! nl2br(e($item)) !!}</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</table>
|
|
||||||
@endisset
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endif
|
|
||||||
@if (isset($forminspeksi['fakta']['batas_batas_input']) && count($forminspeksi['fakta']['batas_batas_input']) > 0)
|
|
||||||
<tr>
|
|
||||||
<td width="25%" style="vertical-align: top;"><strong>Batas batas</strong></td>
|
|
||||||
<td>
|
|
||||||
@foreach ($forminspeksi['fakta']['batas_batas_input'] ?? [] as $arah => $batas)
|
|
||||||
@if ($batas)
|
|
||||||
<p> - {{ $arah }} : {{ $batas }}</p>
|
|
||||||
@endif
|
|
||||||
@endforeach
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endif
|
|
||||||
<tr>
|
|
||||||
<td width="25%" style="vertical-align: top;"><strong>Informasi Dinas Tata Ruang</strong>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@php
|
|
||||||
$informasi = [
|
|
||||||
'peruntukan',
|
|
||||||
'kdb',
|
|
||||||
'kdh',
|
|
||||||
'gsb',
|
|
||||||
'max_lantai',
|
|
||||||
'klb',
|
|
||||||
'gss',
|
|
||||||
'pelebaran_jalan',
|
|
||||||
'nama_petugas',
|
|
||||||
];
|
|
||||||
@endphp
|
|
||||||
|
|
||||||
@foreach ($informasi as $key)
|
|
||||||
@if (isset($forminspeksi['fakta'][$key]) && $forminspeksi['fakta'][$key] !== '-')
|
|
||||||
@php
|
|
||||||
$displayKey = ucfirst(str_replace('_', ' ', $key));
|
|
||||||
if (strlen($key) == 3) {
|
|
||||||
$displayKey = strtoupper($key);
|
|
||||||
}
|
|
||||||
@endphp
|
|
||||||
<p> - {{ $displayKey }}: {{ $forminspeksi['fakta'][$key] }}</p>
|
|
||||||
@endif
|
|
||||||
@endforeach
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
@if (!empty($forminspeksi['fakta']['keterangan']))
|
|
||||||
<tr>
|
|
||||||
<td width="25%" style="vertical-align: top;"><strong>Catatan yang Perlu
|
|
||||||
Diperhatikan</strong></td>
|
|
||||||
<td>
|
|
||||||
@php
|
|
||||||
$keterangan = $forminspeksi['fakta']['keterangan'] ?? '';
|
|
||||||
if (is_array($keterangan)) {
|
|
||||||
$keterangan = implode(', ', array_filter($keterangan));
|
|
||||||
}
|
|
||||||
@endphp
|
|
||||||
|
|
||||||
@if (!empty($keterangan))
|
|
||||||
<table style="width: 100%; border-collapse: collapse;">
|
|
||||||
<tr>
|
|
||||||
<td>{{ $keterangan }}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endif
|
|
||||||
</table>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<table>
|
<table>
|
||||||
|
|||||||
@@ -106,13 +106,19 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td style="width: 25%; padding: 2px; vertical-align: top;">Debitur / Wakil Debitur</td>
|
<td style="width: 25%; padding: 2px; vertical-align: top;">Debitur / Wakil Debitur</td>
|
||||||
<td style="width: 1%; vertical-align: top;">:</td>
|
<td style="width: 1%; vertical-align: top;">:</td>
|
||||||
|
|
||||||
@if (isset($forminspeksi['asset']['debitur_perwakilan']))
|
@if (isset($forminspeksi['asset']['debitur_perwakilan']))
|
||||||
<td>
|
<td>
|
||||||
|
@if (is_array($forminspeksi['asset']['debitur_perwakilan']))
|
||||||
@foreach ($forminspeksi['asset']['debitur_perwakilan'] as $item)
|
@foreach ($forminspeksi['asset']['debitur_perwakilan'] as $item)
|
||||||
{{ $item ?? $permohonan->debiture->name ?? '' }}<br>
|
{{ $item ?? $permohonan->debiture->name ?? '' }}<br>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
@else
|
||||||
|
{{ $forminspeksi['asset']['debitur_perwakilan'] ?? $permohonan->debiture->name ?? '' }}
|
||||||
|
@endif
|
||||||
</td>
|
</td>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 25%; padding: 2px; vertical-align: top;">Pihak Bank selain Appraisal</td>
|
<td style="width: 25%; padding: 2px; vertical-align: top;">Pihak Bank selain Appraisal</td>
|
||||||
|
|||||||
@@ -370,13 +370,13 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a class="btn btn-outline btn-info "
|
<a class="btn btn-outline btn-info "
|
||||||
onclick="checkLaporan('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }}, 1 )">
|
href="penilai/show-laporan-inspeksi/{{ $permohonan->id }}/{{ $dokumen->id }}/{{ $dokumen->jenis_jaminan_id }}">
|
||||||
<i class="ki-filled ki-eye"></i>
|
<i class="ki-filled ki-eye"></i>
|
||||||
Lihat Laporan
|
Lihat Laporan
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a class="btn btn-success"
|
<a class="btn btn-success"
|
||||||
onclick="checkLaporan('{{ $permohonan->id }}', '{{ $dokumen->id }}', {{ $dokumen->jenis_jaminan_id }}, 0 )">
|
href="penilai/print-out-laporan/{{ $permohonan->id }}/{{ $dokumen->id }}/{{ $dokumen->jenis_jaminan_id }}?type=penilai">
|
||||||
<i class="ki-filled ki-printer"></i>
|
<i class="ki-filled ki-printer"></i>
|
||||||
Cetak Laporan
|
Cetak Laporan
|
||||||
</a>
|
</a>
|
||||||
@@ -751,4 +751,4 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@include('lpj::surveyor.js.utils')
|
{{-- @include('lpj::surveyor.js.utils') --}}
|
||||||
|
|||||||
@@ -82,14 +82,14 @@
|
|||||||
@if (isset($forminspeksi['asset']['debitur_perwakilan']) && !empty($forminspeksi['asset']['debitur_perwakilan']))
|
@if (isset($forminspeksi['asset']['debitur_perwakilan']) && !empty($forminspeksi['asset']['debitur_perwakilan']))
|
||||||
|
|
||||||
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5">
|
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5">
|
||||||
@foreach ($forminspeksi['asset']['debitur_perwakilan'] as $key => $item)
|
{{-- @foreach ($forminspeksi['asset']['debitur_perwakilan'] as $key => $item)
|
||||||
<div class="perwakilan flex flex-wrap w-full items-baseline gap-2 ">
|
<div class="perwakilan flex flex-wrap w-full items-baseline gap-2 ">
|
||||||
<input type="text" class="input form-control" name="debitur_perwakilan[]"
|
<input type="text" class="input form-control" name="debitur_perwakilan[]"
|
||||||
value="{{ old('debitur_perwakilan.' . $key, $item) }}"
|
value="{{ old('debitur_perwakilan.' . $key, $item) }}"
|
||||||
placeholder="Masukkan Debitur/Perwakilan" />
|
placeholder="Masukkan Debitur/Perwakilan" />
|
||||||
<button type="button" class="btn btn-danger btn-outline btn-xs remove-btn">Hapus</button>
|
<button type="button" class="btn btn-danger btn-outline btn-xs remove-btn">Hapus</button>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach --}}
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5">
|
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5">
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#header {
|
/* #header {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: -80px;
|
top: -80px;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -32,9 +32,9 @@
|
|||||||
height: 50px;
|
height: 50px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.header-logo {
|
/* .header-logo {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 20px;
|
left: 20px;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
.header-title {
|
.header-title {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
} */
|
||||||
|
|
||||||
#footer {
|
#footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@@ -82,16 +82,16 @@
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
/* body {
|
||||||
margin-top: 3cm;
|
margin-top: 3cm;
|
||||||
margin-bottom: 120px;
|
margin-bottom: 120px;
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.border {
|
/* .border {
|
||||||
border: 1px solid #000;
|
border: 1px solid #000;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.no-break {
|
.no-break {
|
||||||
page-break-inside: avoid;
|
page-break-inside: avoid;
|
||||||
@@ -657,7 +657,7 @@
|
|||||||
<footer id="footer">
|
<footer id="footer">
|
||||||
{{-- Cabang : {{ $permohonan->debiture->branch->name ?? '' }} --}}
|
{{-- Cabang : {{ $permohonan->debiture->branch->name ?? '' }} --}}
|
||||||
</footer>
|
</footer>
|
||||||
<script type="text/php">
|
{{-- <script type="text/php">
|
||||||
if (isset($pdf)) {
|
if (isset($pdf)) {
|
||||||
$pdf->page_script('
|
$pdf->page_script('
|
||||||
$font = $fontMetrics->get_font("Arial, Helvetica, sans-serif", "normal");
|
$font = $fontMetrics->get_font("Arial, Helvetica, sans-serif", "normal");
|
||||||
@@ -668,7 +668,7 @@
|
|||||||
$pdf->text($x, $y, $pageText, $font, $size);
|
$pdf->text($x, $y, $pageText, $font, $size);
|
||||||
');
|
');
|
||||||
}
|
}
|
||||||
</script>
|
</script> --}}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -309,38 +309,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function checkLaporan(permohonanId, documentId, inspeksiId, statusLpj) {
|
|
||||||
// showLoadingSwal('Tunggu...');
|
|
||||||
fetch(
|
|
||||||
`{{ url('/penilai/check-laporan') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}`
|
|
||||||
)
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.status) {
|
|
||||||
window.location.href =
|
|
||||||
`{{ route('penilai.print-out') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&statusLpj=${statusLpj}&type=${data.status}`;
|
|
||||||
} else {
|
|
||||||
// Jika laporan belum ada, tampilkan pesan peringatan
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Laporan Belum Ada',
|
|
||||||
text: data.message,
|
|
||||||
icon: 'warning',
|
|
||||||
confirmButtonText: 'OK',
|
|
||||||
confirmButtonColor: '#3085d6',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Error:', error);
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Terjadi Kesalahan',
|
|
||||||
text: 'Tidak dapat memproses permintaan. Silakan coba lagi nanti.',
|
|
||||||
icon: 'error',
|
|
||||||
confirmButtonText: 'OK',
|
|
||||||
confirmButtonColor: '#d33',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateAnalisa(params) {
|
function updateAnalisa(params) {
|
||||||
const inputMap = {
|
const inputMap = {
|
||||||
|
|||||||
@@ -615,7 +615,8 @@ Route::middleware(['auth'])->group(function () {
|
|||||||
|
|
||||||
Route::get('lampiran', [PenilaiController::class, 'lampiran'])->name('lampiran');
|
Route::get('lampiran', [PenilaiController::class, 'lampiran'])->name('lampiran');
|
||||||
Route::get('export/kertas-kerja', [PenilaiController::class, 'export_kertas_kerja'])->name('export.kertas-kerja');
|
Route::get('export/kertas-kerja', [PenilaiController::class, 'export_kertas_kerja'])->name('export.kertas-kerja');
|
||||||
Route::get('print-out', [PenilaiController::class, 'print_out'])->name('print-out');
|
Route::get('print-out-laporan/{permohonan_id}/{dokument_id}/{jenis_jaminan_id}', [PenilaiController::class, 'print_out_laporan'])->name('print-out-laporan');
|
||||||
|
Route::get('show-laporan-inspeksi/{permohonan_id}/{dokument_id}/{jenis_jaminan_id}', [PenilaiController::class, 'showLaporanInspeksi'])->name('show-laporan-inspeksi');
|
||||||
|
|
||||||
Route::post('import/kertas-kerja', [PenilaiController::class, 'import_kertas_kerja'])->name('import.kertas-kerja');
|
Route::post('import/kertas-kerja', [PenilaiController::class, 'import_kertas_kerja'])->name('import.kertas-kerja');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user