fix(surveyor/penilai): perbaikkan pembanding dan call report

This commit is contained in:
majid
2025-02-23 01:36:34 +07:00
parent 7c6f50265c
commit e4cec2a9a2
5 changed files with 121 additions and 222 deletions

View File

@@ -408,7 +408,7 @@ class PenilaiController extends Controller
$nomorLaporan = $this->generateNoLaporan($permohonan, $documentId, 'call-report');
$basicData = $this->surveyorController->getCommonData();
$inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
Penilai::updateOrCreate(
$call = Penilai::updateOrCreate(
[
'permohonan_id' => $permohonanId,
'dokument_id' => $documentId,
@@ -419,14 +419,15 @@ class PenilaiController extends Controller
]
);
$call = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
// $lpjData = null;
$callReport = null;
if ($call && isset($call->call_report)) {
$callReport = json_decode($call->call_report, true);
}
$forminspeksi = null;
if ($forminspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true);
$callReport = json_decode($call->call_report, true);
}
// Default: gunakan data dari debitur
$debitur = Debiture::find($permohonan->debiture_id);
@@ -1067,9 +1068,10 @@ class PenilaiController extends Controller
$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,
@@ -1099,7 +1101,8 @@ class PenilaiController extends Controller
'memo',
'resumeData',
'tanggalLaporan',
'rap'
'rap',
'report'
));
// return $pdf;
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);
@@ -1125,7 +1128,8 @@ class PenilaiController extends Controller
'memo',
'resumeData',
'tanggalLaporan',
'rap'
'rap',
'report'
));
// return $pdf;
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);

View File

@@ -177,6 +177,10 @@ class SurveyorController extends Controller
// Jika data sudah ada, merge dengan data yang baru
$existingData = json_decode($inspeksi->data_form, true) ?: [];
if (isset($existingData['signature']) && !isset($processedData['signature'])) {
$processedData['signature'] = $existingData['signature'];
}
$mergedData = $this->arrayMergeRecursive($existingData, $processedData);
// Update record
@@ -814,9 +818,9 @@ class SurveyorController extends Controller
// If validation passes, update permohonan status
$permohonan = Permohonan::findOrFail($id);
$permohonan->update([
'status' => 'survey-completed',
'submitted_at' => now()
@@ -2343,6 +2347,11 @@ class SurveyorController extends Controller
'province_code' => $data['province_code'] ?? null,
];
$alamatKey = ($data['alamat_sesuai'] === 'sesuai') ? 'sesuai' : 'tidak sesuai';
$alamat = [];
// Masukkan key baru yang sesuai
$alamat[$alamatKey] = $alamatData;
return [
'asset' => [
'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [],
@@ -2351,9 +2360,7 @@ class SurveyorController extends Controller
? $data['jenis_asset_name']
: ($data['jenis_asset_tidak_sesuai'] ?? null)
],
'alamat' => [
$data['alamat_sesuai'] => $alamatData
],
'alamat' => $alamat,
'hub_cadeb' => [
$data['hub_cadeb'] => ($data['hub_cadeb'] == 'sesuai') ? $data['hub_cadeb_sesuai'] : $data['hub_cadeb_tidak_sesuai']
],
@@ -2368,41 +2375,24 @@ class SurveyorController extends Controller
];
}
private function updateFormData(array &$dataForm, array $data, $inspeksi, string $section, string $key, string $sesuaiKey, string $tidakSesuaiKey): void
{
if (isset($dataForm[$section][$key])) {
$dataForm[$section][$key] = []; // Reset data
if ($data[$key] == 'sesuai') {
$dataForm[$section][$key]['sesuai'] = $data[$sesuaiKey] ?? null;
} elseif ($data[$key] == 'tidak sesuai') {
$dataForm[$section][$key]['tidak sesuai'] = $data[$tidakSesuaiKey] ?? null;
}
if ($inspeksi) {
$inspeksi->data_form = json_encode($dataForm);
$inspeksi->save();
}
} else {
$data[$key] = $this->getFieldData($data, $key, true);
}
}
private function getTanahData(array $data): array
{
//luas tanah key
$luas_tanah_key = ($data['luas_tanah'] === 'sesuai') ? 'sesuai' : 'tidak sesuai';
$luas_tanah = [];
$hasil_tanah = $luas_tanah_key === 'sesuai' ? $data['luas_tanah_sesuai'] : $data['luas_tanah_tidak_sesuai'];
$luas_tanah[$luas_tanah_key] = $hasil_tanah;
$inspeksi = Inspeksi::where('permohonan_id', $data['permohonan_id'])->where('dokument_id', $data['dokument_id'])->first();
// Decode data_form dari inspeksi
$dataForm = $inspeksi ? json_decode($inspeksi->data_form, true) : [];
$this->updateFormData($dataForm, $data, $inspeksi, 'tanah', 'luas_tanah', 'luas_tanah_sesuai', 'luas_tanah_tidak_sesuai');
$this->updateFormData($dataForm, $data, $inspeksi, 'tanah', 'hadap_mata_angin', 'hadap_mata_angin_sesuai', 'hadap_mata_angin_tidak_sesuai');
// dd($dataForm);
// hadap mata angin
$hadap_mata_angin_key = ($data['hadap_mata_angin'] === 'sesuai') ? 'sesuai' : 'tidak sesuai';
$hadap_mata_angin = [];
$hasil_hadap_mata_angin = $hadap_mata_angin_key === 'sesuai' ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai'];
$hadap_mata_angin[$hadap_mata_angin_key] = $hasil_hadap_mata_angin;
return [
'tanah' => [
'luas_tanah' => $dataForm['tanah']['luas_tanah'] ?? $data['luas_tanah'],
'hadap_mata_angin' => $dataForm['tanah']['hadap_mata_angin'] ?? $data['hadap_mata_angin'],
'luas_tanah' => $luas_tanah,
'hadap_mata_angin' => $hadap_mata_angin,
'bentuk_tanah' => $this->getFieldData(
$data,
'bentuk_tanah',
@@ -2475,16 +2465,19 @@ class SurveyorController extends Controller
}
}
$inspeksi = Inspeksi::where('permohonan_id', $data['permohonan_id'])->where('dokument_id', $data['dokument_id'])->first();
// Decode data_form dari inspeksi
$dataForm = $inspeksi ? json_decode($inspeksi->data_form, true) : [];
$this->updateFormData($dataForm, $data, $inspeksi, 'bangunan', 'luas_tanah_bagunan', 'luas_tanah_bagunan_sesuai', 'luas_tanah_bagunan_tidak_sesuai');
$luas_tanah_bagunan_key = ($data['luas_tanah_bagunan'] === 'sesuai') ? 'sesuai' : 'tidak sesuai';
$luas_tanah_bagunan = [];
$hasil_tanah_bagunan = $luas_tanah_bagunan_key === 'sesuai' ? $data['luas_bangunan_sesuai'] : $data['luas_tanah_bagunan_tidak_sesuai'];
// Masukkan key baru yang sesuai
$luas_tanah_bagunan[$luas_tanah_bagunan_key] = $hasil_tanah_bagunan;
return [
'bangunan' => [
'luas_tanah_bagunan' => $dataForm['bangunan']['luas_tanah_bagunan'] ?? $data['luas_tanah_bagunan'],
'luas_tanah_bagunan' => $luas_tanah_bagunan,
'jenis_bangunan' => $data['jenis_bangunan'] ?? null,
'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null,
'sifat_bangunan' => $data['sifat_bangunan'] ?? null,
@@ -3455,19 +3448,29 @@ class SurveyorController extends Controller
private function arrayMergeRecursive($arr1, $arr2)
{
foreach ($arr2 as $key => $value) {
if (is_array($value) && isset($arr1[$key]) && is_array($arr1[$key])) {
if ($key === 'signature' && isset($arr1['signature'])) {
// Jika key adalah signature, gabungkan secara spesifik
$arr1['signature'] = array_merge($arr1['signature'], $value);
} elseif (is_array($value) && isset($arr1[$key]) && is_array($arr1[$key])) {
// Rekursif untuk key lainnya
$arr1[$key] = $this->arrayMergeRecursive($arr1[$key], $value);
} else {
// Jika nilai baru adalah null, pertahankan nilai lama
if (!is_null($value)) {
$arr1[$key] = $value;
} elseif (!isset($arr1[$key])) {
$arr1[$key] = $value;
}
// Ganti nilai lama dengan nilai baru
$arr1[$key] = $value;
}
}
// Bersihkan key lama yang tidak ada di array baru
foreach ($arr1 as $key => $value) {
if (!array_key_exists($key, $arr2) && $key !== 'signature') {
unset($arr1[$key]);
}
}
return $arr1;
}
public function print_out_inspeksi($permohonan_id, $dokument_id, $jenis_jaminan_id)
{

View File

@@ -224,7 +224,7 @@
<label for="Lelang" class="form-label max-w-56">Lelang ke </label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="lelang" name="lelang" class="input w-full"
placeholder="Masukkan Lelang" value="{{ $memo->lokasi->penilai ?? old('lelang') }}">
placeholder="Masukkan Lelang" value="{{ $callReport['lelang'] ?? old('lelang') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
@@ -232,14 +232,14 @@
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="nilai-pasar" name="nilai_pasar"
class="input w-full nilai-pasar currency-format" placeholder="Masukkan likuidasi"
value="{{ old('likuidasi') }}">
value="{{ $callReport['nilai_pasar'] ?? old('likuidasi') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="likuidasi_nilai_1" class="form-label max-w-56">Nilai Likuidasi(%)</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="likuidasi" name="likuidasi" class="input w-full likuidasi"
placeholder="Masukkan likuidasi dalam bentuk persen" onkeyup="calculateTotal(this)">
placeholder="Masukkan likuidasi dalam bentuk persen" onkeyup="calculateTotal(this)" value="{{ $callReport['persentase_likuidasi'] ?? old('likuidasi') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
@@ -247,7 +247,7 @@
(NL)</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="total-likuidasi" name="likuidasi_nilai_1"
class="input w-full total-likuidasi" placeholder="Masukkan likuidasi" value="">
class="input w-full total-likuidasi currency-format" placeholder="Masukkan likuidasi" value="{{ $callReport['hasil_nilai_likuidasi'] ?? old('likuidasi') }}">
</div>
</div>
</div>
@@ -279,9 +279,9 @@
<label for="penilai" class="form-label max-w-56">Pihak KJPP</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="penilai" name="pihak_kjjpp"
class="input w-full cursor-not-allowed"
value="{{ $forminspeksi['signature']['kjjp']['name'] ?? '' }}"
@readonly(true) placeholder="Masukkan Nama KJPP">
class="input w-full "
value="{{ $forminspeksi['signature']['kjjp']['name'] ?? $callReport['pihak_kjjpp'] ?? '' }}"
placeholder="Masukkan Nama KJPP">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
@@ -422,6 +422,7 @@
tanggal: "",
nomor_laporan: "",
perihal: "",
pihak_kjjpp: "",
dari: "",
lelang: "",
fakta: {
@@ -456,9 +457,9 @@
jsonData.lelang = document.querySelector('input[name="lelang"]')?.value.trim() || "";
// Ambil nilai lainnya
jsonData.nilai_pasar = document.querySelector('input[name="nilai_pasar"]')?.value.trim() || "";
jsonData.persentase_likuidasi = document.querySelector('input[name="likuidasi"]')?.value.trim() || "";
jsonData.hasil_nilai_likuidasi = document.querySelector('input[name="likuidasi_nilai_1"]')?.value.trim() || "";
jsonData.nilai_pasar = cleanCurrencyValue(document.querySelector('input[name="nilai_pasar"]')?.value.trim() || "");
jsonData.persentase_likuidasi = cleanCurrencyValue(document.querySelector('input[name="likuidasi"]')?.value.trim() || "");
jsonData.hasil_nilai_likuidasi = cleanCurrencyValue(document.querySelector('input[name="likuidasi_nilai_1"]')?.value.trim() || "");
return jsonData;
}

View File

@@ -1,113 +1,4 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Call Report</title>
<style>
* {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
}
h2 {
font-size: 12px
}
/** Define the header rules **/
@page {
margin-top: 100px;
/* Ruang untuk header */
margin-bottom: 50px;
/* Ruang untuk footer */
}
#header {
position: fixed;
top: -100px;
/* Posisi header di luar konten */
left: 0;
right: 0;
height: 90px;
text-align: center;
padding-bottom: 10px;
}
.header-logo {
position: absolute;
left: 20px;
top: 10px;
max-height: 80px;
max-width: 150px;
}
.header-title {
margin-top: 20px;
}
#footer {
position: fixed;
bottom: -50px;
left: 0;
right: 0;
height: 50px;
text-align: center;
border-top: 1px solid #ddd;
padding-top: 10px;
}
.page-number:after {
content: counter(page) " dari " counter(pages);
}
.content {
margin-top: 20px;
}
.page-break {
page-break-after: always;
}
footer {
position: fixed;
bottom: 0cm;
left: 0cm;
right: 0cm;
}
body {
margin-top: 3cm;
/* Tambahkan margin top sedikit lebih besar dari tinggi header */
margin-bottom: 120px;
position: relative;
z-index: 1;
/* Pastikan konten berada di bawah header */
}
.border {
border: 1px solid #000;
}
.photo-item {
text-align: center;
margin-bottom: 20px;
}
.photo-image {
max-width: 80%;
height: auto;
display: block;
margin: 0 auto;
}
</style>
</head>
<body style="width: 80%; margin: auto">
@include('lpj::penilai.components.header')
@php
$data = '';
foreach ($permohonan->documents as $dokumen) {
@@ -136,22 +27,7 @@
}
$data = rtrim($data, ', ');
@endphp
<header id="header">
<table style="width: 100%; border: none;">
<tr>
<td style="width: 20%; text-align: left;" class="header-left">
@include('lpj::component.logo-bag')
</td>
<td style="text-align: right;">
<div style="">
<p>Tanggal: {{ date('Y-m-d') }}</p>
<p>Waktu: {{ date('H:i:s') }}</p>
<p>User: {{ Auth::user()->name }}</p>
</div>
</td>
</tr>
</table>
</header>
<main class="content">
<table style="width: 100%">
@@ -159,6 +35,7 @@
<td style="text-align: center; margin-top: 5px;">
<h2 style="text-decoration: underline; text-transform: uppercase; text-align: center; margin: 0;">
CALL Report</h2>
<p style="font-size: 12px; margin: 0;">NO: {{ $nomorLaporan ?? '' }}</p>
</td>
</tr>
</table>
@@ -173,11 +50,7 @@
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $report['dari'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">No Laporan</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $nomorLaporan ?? '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Tanggal</td>
<td style="width: 1%; padding: 2px;">:</td>
@@ -209,7 +82,7 @@
<tr>
<td style="width: 20%; padding: 2px;">KJPP</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
<td style="width: 79%; padding: 2px;">{{ preg_replace('/^K\\d+ - /', '', $permohonan->penawaran->nama_kjpp_sebelumnya ?? '-') }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Jenis Aset</td>
@@ -283,24 +156,30 @@
<tr>
<td style="width: 20%; padding: 2px;">Tanggal Penilaian</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
<td style="width: 79%; padding: 2px;">{{ isset($permohonan->penilaian->tanggal_kunjungan) ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Lelang ke</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
<td style="width: 79%; padding: 2px;">{{ $report['lelang'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Nilai Pasar Wajar (NPW)</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
<td style="width: 79%; padding: 2px;">{{ isset($report['nilai_pasar']) ? formatRupiah($report['nilai_pasar']) : '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Nilai Likuidasi (NL)</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
<td style="width: 20%; padding: 2px;">
Nilai Likuidasi
{{ isset($report['persentase_likuidasi']) ? '(' . $report['persentase_likuidasi'] . '%)' : '-' }}
</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">
{{ isset($report['hasil_nilai_likuidasi']) ? formatRupiah($report['hasil_nilai_likuidasi']) : '-' }}
</td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
@@ -322,7 +201,7 @@
<tr>
<td style="width: 20%; padding: 2px;">Pihak KJPP</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $surveyor->userPenilaiTeam->name ?? '' }}</td>
<td style="width: 79%; padding: 2px;">{{ $forminspeksi['signature']['kjjp']['name'] ?? $report['pihak_kjjpp'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak BAGI Cab </td>
@@ -346,6 +225,23 @@
</td>
</tr>
</table>
@isset($report['fakta']['fakta_positif'])
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Faktor positif</h2>
</td>
</tr>
<tr>
@foreach ($report['fakta']['fakta_positif'] as $key => $item)
<tr>
<td>{{ $item }}</td>
</tr>
@endforeach
</tr>
</table>
@endisset
@isset($report['fakta']['fakta_negatif'])
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
@@ -353,15 +249,14 @@
</td>
</tr>
<tr>
@isset($resumeData['fakta']['fakta_negatif'])
@foreach ($resumeData['fakta']['fakta_negatif'] as $key => $item)
@foreach ($report['fakta']['fakta_negatif'] as $key => $item)
<tr>
<td>{{ $item }}</td>
</tr>
@endforeach
@endisset
</tr>
</table>
@endisset
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
@@ -387,7 +282,6 @@
<table style="width: 100%; border-collapse: collapse; text-align: center;">
@php
use Modules\Usermanagement\Models\User;
$penilaiUser = User::where('id', $penilai->userPenilaiTeam->id)->first();
$imagePathPenilai = storage_path(
'app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign,
@@ -476,18 +370,15 @@
</table>
<div class="page-break"></div>
<div class="section">
<div class="judul">
<h6 class="border" style="text-align: center">
FOTO JAMINAN
</h6>
</div>
@include('lpj::penilai.components.foto-jaminan')
</div>
</main>
<footer id="footer">
Cabang : {{ $permohonan->debiture->branch->name ?? '' }}
</footer>
<script>
const data = @json($report);
console.log(data);
</script>
</body>
</html>
@include('lpj::penilai.components.footer')

View File

@@ -113,12 +113,12 @@
@endphp
<td class="px-4 py-2">
<input type="text" name="luas_tanah" class="input number-format"
<input type="text" name="luas_tanah" class="input "
value="{{ $inspectionData['tanah']['luas_tanah']['sesuai'] ?? ($inspectionData['tanah']['luas_tanah']['tidak sesuai'] ?? '') }}">
</td>
<td class="px-4 py-2">
<input type="text" name="luas_tanah_pembanding[]" class="input number-format">
<input type="text" name="luas_tanah_pembanding[]" class="input ">
</td>
</tr>
@@ -146,7 +146,7 @@
value="{{ $inspectionData['bangunan']['luas_tanah_bagunan']['sesuai'] ?? ($inspectionData['bangunan']['luas_tanah_bagunan']['tidak sesuai'] ?? '') }}">
</td>
<td class="px-4 py-2">
<input type="text" name="luas_bangunan_pembanding[]" class="input number-format">
<input type="text" name="luas_bangunan_pembanding[]" class="input ">
</td>
</tr>
@endif