Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender

This commit is contained in:
2024-12-13 09:00:45 +07:00
17 changed files with 1436 additions and 936 deletions

View File

@@ -192,131 +192,19 @@ class PenilaiController extends Controller
]);
}
public function kertas_kerja()
public function kertas_kerja($id, $jeniJaminan)
{
$data = [
[
'Pendekatan pasar',
'Nama Pemilik Aset',
'',
],
[
'Metode Perbandingan Data Pasar',
'Nama Pemberi Tugas: ',
'',
'',
],
[
'Tanggal Penilaian: ',
'Lokasi: ',
'',
'',
],
[
'No.',
'Objek Penilaian',
'Data Pembanding 1',
'Data Pembanding 2',
'Data Pembanding 3'
],[
'1',
'Jenis Aset',
'Pembanding 1',
'Pembanding 1',
'Pembanding 1'
],
[
'2',
'Luas Tanah',
'Pembanding 2',
'Pembanding 2',
'Pembanding 2'
],
[
'3',
'Penawaran/Transaksi',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'4',
'Harga penawaran/Transaksi',
'',
'Pembanding 3',
'Pembanding 3'
],[
'5',
'Nomor Telepon',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'6',
'Estimasi Harga Transaksi',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'7',
'Nama Nara sumber',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'8',
'Status Nara sumber',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'9',
'Waktu Penawaran/Transaksi',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'10',
'Titik GPS',
'',
'Pembanding 3',
],
[
'11',
'Alamat',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'12',
'Jarak Pembanding dengan Objek (m)',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'13',
'Estimasi Rangking Tanah',
'',
'Pembanding 3',
'Pembanding 3'
],
[
'14',
'Estimasi Rangking Bangunan',
'',
'Pembanding 3',
'Pembanding 3'
]
$data = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$headerInfo = [
'tanggal_penilaian' => '',
'nama_pemilik' => '',
'nama_pemberi_tugas' => '',
'lokasi_lengkap' => '',
'nama_debitur' => ''
];
return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx');
return Excel::download(new KertasKerjaExport($data, $headerInfo), 'kertas-kerja.xlsx');
}

View File

@@ -353,39 +353,92 @@ class PenilaianController extends Controller
{
$type = $request->route('type');
$header = '';
switch ($type) {
case 'pelaporan':
$header = 'Pelaporan';
break;
case 'pembayaran':
$header = 'Pembayaran';
break;
case 'pembatalan':
$header = 'Pembatalan';
break;
case 'sla':
$header = 'SLA';
break;
default:
$header = 'Pelaporan';
break;
}
$headers = [
'pelaporan' => 'Pelaporan',
'pembayaran' => 'Pembayaran',
'pembatalan' => 'Pembatalan',
'sla' => 'SLA',
];
$header = $headers[$type] ?? 'Pelaporan';
return view('lpj::penilaian.otorisator.index', compact('header'));
}
public function show($id)
public function show($id, $type)
{
$headers = [
'Pelaporan' => 'Pelaporan',
'Pembayaran' => 'Pembayaran',
'Pembatalan' => 'Pembatalan',
'SLA' => 'SLA',
];
$header = $headers[$type] ?? 'Pelaporan';
$permohonan = Permohonan::find($id);
return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header'));
}
public function otorisatorUpdate($id, $context)
{
$permohonan = Permohonan::find($id);
if (!$permohonan) {
return response()->json([
'message' => 'Data permohonan tidak ditemukan.'
], 404);
}
return view('lpj::penilaian.otorisator.show', compact('permohonan'));
switch (strtolower($context)) {
case 'pembayaran':
$newStatus = $permohonan->status_bayar === 'sudah_bayar' ? 'belum_bayar' : 'sudah_bayar';
$permohonan->update([
'status_bayar' => $newStatus
]);
break;
case 'pembatalan':
$permohonan->update([
'authorized_status' => 1,
]);
break;
case 'pelaporan':
$permohonan->update([
'status' => 'disetujui',
]);
break;
case 'sla':
$permohonan->update([
'status' => 'order',
]);
break;
default:
return response()->json([
'message' => 'Konteks otorisasi tidak valid.'
], 400);
}
return response()->json([
'message' => 'Otorisasi berhasil dilakukan.',
'data' => $permohonan
]);
}
public function dataForAuthorization(Request $request, $otorisator)
{
@@ -394,22 +447,14 @@ class PenilaianController extends Controller
}
$status = '';
switch ($otorisator) {
case 'Pelaporan':
$status = 'proses paparan';
break;
case 'Pembayaran':
$status = 'proses';
break;
case 'Pembatalan':
$status = 'order';
break;
default:
$status = '';
break;
}
// Tentukan status berdasarkan otorisator
$status = match ($otorisator) {
'Pelaporan' => 'proses laporan',
'Pembayaran' => 'proses',
'Pembatalan' => 'proses',
'SLA' => 'proses',
default => '',
};
$query = Permohonan::query();
@@ -432,11 +477,18 @@ class PenilaianController extends Controller
if (!empty($otorisator)) {
if ($status == 'proses') {
$query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']);
} else {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
}
// else {
// $query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
// }
}
// Filter berdasarkan region user yang login
$query->whereHas('region.teams.teamsUsers', function ($q) {
$q->where('user_id', Auth::id());
});
// Sorting berdasarkan sortField dan sortOrder
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
@@ -464,7 +516,8 @@ class PenilaianController extends Controller
$filteredRecords = $query->count();
// Ambil data dengan relasi
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers'])->get();
// Hitung jumlah halaman
$pageCount = ceil($totalRecords / $size);

View File

@@ -283,7 +283,7 @@ class SurveyorController extends Controller
? json_decode($inspeksi->foto_form, true)
: [];
$formatFotojson = $existingData; // Start with existing data
$formatFotojson = $existingData;
// Process each photo category
foreach ($photoCategories as $category => $fields) {
@@ -566,9 +566,26 @@ class SurveyorController extends Controller
$pembandingCount = count($request->input('address_pembanding', []));
$fotoPembanding = $request->file('foto_objek_pembanding') ?? [];
$existingData = null;
if ($request->has('permohonan_id') && $request->has('jenis_jaminan_id')) {
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->first();
if ($inspeksi) {
$existingData = $inspeksi->data_pembanding ?? [];
}
}
for ($i = 0; $i < $pembandingCount; $i++) {
$pembanding = $this->formatSinglePembanding($request, $i);
$existingFoto = null;
if ($existingData && isset($existingData[$i]['foto_objek'])) {
$existingFoto = $existingData[$i]['foto_objek'];
}
// Penanganan foto pembanding
if (isset($fotoPembanding[$i]) && $fotoPembanding[$i]->isValid()) {
$pembanding['foto_objek'] = $this->handleupdateOrDeleteFile(
@@ -576,6 +593,8 @@ class SurveyorController extends Controller
'pembanding',
"pembanding_{$i}"
);
} else {
$pembanding['foto_objek'] = $existingFoto;
}
$dataPembanding[] = $pembanding;
@@ -583,6 +602,36 @@ class SurveyorController extends Controller
return $dataPembanding;
}
private function formatSinglePembanding($request, $index)
{
$fields = [
'address', 'village_code', 'district_code', 'city_code', 'province_code',
'tahun', 'luas_tanah', 'luas_bangunan', 'tahun_bangunan',
'status_nara_sumber', 'harga', 'harga_diskon', 'diskon', 'total', 'nama_nara_sumber',
'peruntukan', 'penawaran_transaksi', 'nomor_tlp',
'kordinat_lat', 'kordinat_lng', 'jenis_aset','foto_objek'
];
$pembanding = [];
foreach ($fields as $field) {
$inputName = "{$field}_pembanding";
$inputValue = $request->input($inputName);
// Pastikan input adalah array dan index valid
if (is_array($inputValue) && isset($inputValue[$index])) {
$pembanding[$field] = $inputValue[$index];
} else {
$pembanding[$field] = null;
}
}
return $pembanding;
}
private function handleupdateOrDeleteFile($file, $type, $prefix)
{
@@ -605,45 +654,137 @@ class SurveyorController extends Controller
}
private function formatSinglePembanding($request, $index)
{
$fields = [
'address', 'village_code', 'district_code', 'city_code', 'province_code',
'tahun', 'luas_tanah', 'luas_bangunan', 'tahun_bangunan',
'status_nara_sumber', 'harga', 'harga_diskon', 'diskon','total','nama_nara_sumber',
'peruntukan', 'penawaran_transaksi', 'nomor_tlp',
'kordinat_lat', 'kordinat_lng', 'jenis_aset',
];
$pembanding = [];
foreach ($fields as $field) {
$inputName = "{$field}_pembanding";
$pembanding[$field] = $request->input($inputName)[$index] ?? null;
}
// Inisialisasi foto_objek sebagai null
$pembanding['foto_objek'] = null;
return $pembanding;
}
private function formatObjekPenilaian($request)
{
$fields = [
'address', 'village_code', 'district_code', 'city_code', 'province_code',
'tahun', 'luas_tanah', 'luas_bangunan', 'tahun_bangunan',
'luas_tanah', 'luas_tanah_bagunan', 'total', 'diskon', 'harga_diskon',
'status_nara_sumber', 'harga', 'nama_nara_sumber',
'peruntukan', 'penawaran_transaksi', 'nomor_tlp',
'kordinat_lat', 'kordinat_lng', 'jenis_aset',
];
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->first();
if ($inspeksi) {
$needsSave = false;
// Handle foto_form
$fotoForm = json_decode($inspeksi->foto_form, true) ?: [];
if (!isset($fotoForm['object_jaminan'])) {
$fotoForm['object_jaminan'] = [['foto_objek' => null]];
$needsSave = true;
}
// Handle data_form
$dataForm = json_decode($inspeksi->data_form, true) ?: [];
// Inisialisasi struktur data jika belum ada
if(!isset($dataForm['bangunan'])) {
$dataForm['bangunan'] = [];
$needsSave = true;
}
if(!isset($dataForm['tanah'])) {
$dataForm['tanah'] = [];
$needsSave = true;
}
if (!isset($dataForm['asset'])) {
$dataForm['asset'] = [];
$needsSave = true;
}
// Update data dengan mempertahankan struktur sesuai/tidak sesuai
foreach ($fields as $field) {
if ($request->filled($field)) {
$newValue = $request->input($field);
// Fields untuk tanah
if (in_array($field, ['luas_tanah'])) {
$cekLuas = $dataForm['tanah']['luas_tanah'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
$dataForm['tanah'][$field][$cekLuas] = $newValue;
}
// Fields untuk bangunan
else if (in_array($field, ['luas_tanah_bagunan'])) {
$objekPenilaian = array_reduce($fields, function ($carry, $field) use ($request) {
$carry[$field] = $request->input($field);
return $carry;
}, ['foto_objek' => null]);
$cekBanguan = $dataForm['bangunan']['luas_tanah_bagunan'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
$dataForm['bangunan'][$field][$cekBanguan] = $newValue;
}
// Fields untuk alamat dalam asset
else if (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) {
if (!isset($dataForm['asset']['alamat'])) {
$dataForm['asset']['alamat'] = [];
}
$alamatStatus = $dataForm['asset']['alamat'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
if (!isset($dataForm['asset']['alamat'][$alamatStatus])) {
$dataForm['asset']['alamat'][$alamatStatus] = [];
}
$dataForm['asset']['alamat'][$alamatStatus][$field] = $newValue;
}
// Jenis asset dalam asset
else if ($field === 'jenis_asset') {
$assetStatus = $request->input('asset_status', 'sesuai');
$dataForm['asset']['jenis_asset'] = [
$assetStatus => $newValue
];
}
// Fields lainnya dalam asset
else {
$dataForm['asset'][$field] = $newValue;
}
$needsSave = true;
}
}
if ($needsSave) {
$inspeksi->foto_form = json_encode($fotoForm);
$inspeksi->data_form = json_encode($dataForm);
$inspeksi->save();
}
$existingFoto = $fotoForm['object_jaminan'][0]['foto_objek'] ?? null;
// Gabungkan data dari tanah, bangunan, dan asset
$objekPenilaian = array_merge(
['foto_objek' => $existingFoto],
$dataForm['tanah'] ?? [],
$dataForm['bangunan'] ?? [],
array_reduce($fields, function ($carry, $field) use ($request, $dataForm) {
if (isset($dataForm['asset'][$field])) {
if (is_array($dataForm['asset'][$field])) {
if (isset($dataForm['asset'][$field]['sesuai'])) {
$carry[$field] = $dataForm['asset'][$field]['sesuai'];
} elseif (isset($dataForm['asset'][$field]['tidak sesuai'])) {
$carry[$field] = $dataForm['asset'][$field]['tidak sesuai'];
}
} else {
$carry[$field] = $dataForm['asset'][$field];
}
} else {
$carry[$field] = $request->input($field);
}
return $carry;
}, [])
);
} else {
// Inisialisasi data baru
$objekPenilaian = array_reduce($fields, function ($carry, $field) use ($request) {
$carry[$field] = $request->input($field);
return $carry;
}, ['foto_objek' => null]);
}
return $objekPenilaian;
}
private function saveInspeksi($formattedData)
{
@@ -676,13 +817,36 @@ class SurveyorController extends Controller
$objekPenilaian = $this->formatObjekPenilaian($request);
if ($request->hasFile('foto_objek')) {
$objekPenilaian['foto_objek'] = $this->handleupdateOrDeleteFile(
$newFoto = $this->handleupdateOrDeleteFile(
$request->file('foto_objek'),
$request['type'] = 'pembanding',
'objek_penilaian'
);
// Update foto_form
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->first();
if ($inspeksi) {
$fotoForm = json_decode($inspeksi->foto_form, true) ?: [];
if (!isset($fotoForm['object_jaminan'])) {
$fotoForm['object_jaminan'] = [];
}
if (empty($fotoForm['object_jaminan'])) {
$fotoForm['object_jaminan'][] = ['foto_objek' => $newFoto];
} else {
$fotoForm['object_jaminan'][0]['foto_objek'] = $newFoto;
}
$inspeksi->foto_form = json_encode($fotoForm);
$inspeksi->save();
}
$objekPenilaian['foto_objek'] = $newFoto;
}
$formattedData = [
'permohonan_id' => $request->input('permohonan_id'),
'type' => $request->input('type'),
@@ -698,7 +862,7 @@ class SurveyorController extends Controller
return response()->json([
'success' => true,
'message' => 'Data berhasil disimpan',
'data' => $objekPenilaian
'data' => $formattedData
], 200);
} catch (\Exception $e) {
@@ -747,7 +911,7 @@ class SurveyorController extends Controller
// Jika alamat tidak sesuai, override dengan kode dari alamat
$cekAlamat = $forminspeksi['asset']['alamat']['tidak sesuai'] ?? null;
$cekAlamat = $forminspeksi['asset']['alamat']['tidak sesuai'] ?? null;
if ($cekAlamat) {
$provinceCode = $cekAlamat['province_code'] ?? $provinceCode;