Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender
This commit is contained in:
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user