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

This commit is contained in:
2024-12-18 09:01:36 +07:00
25 changed files with 2547 additions and 1174 deletions

View File

@@ -2,271 +2,279 @@
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
// use Maatwebsite\Excel\Concerns\FromCollection;
// use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStyles;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
class KertasKerjaExport implements FromCollection, WithHeadings, WithStyles, WithColumnWidths, WithEvents
// use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
// use Maatwebsite\Excel\Concerns\WithHeadings;
// use Maatwebsite\Excel\Concerns\WithStyles;
// use Maatwebsite\Excel\Concerns\WithColumnWidths;
// use Maatwebsite\Excel\Concerns\WithEvents;
// use Maatwebsite\Excel\Events\AfterSheet;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class KertasKerjaExport implements FromView
{
// class KertasKerjaExport implements FromCollection, WithHeadings, WithStyles, WithColumnWidths, WithEvents
// {
protected $data;
protected $headerInfo;
public function __construct($data, $headerInfo)
public function __construct($data)
{
$this->data = $data;
$this->headerInfo = $headerInfo;
}
public function collection()
public function view(): View
{
$rows = [];
$nomor = 1;
$fields = [
'jenis_aset' => 'Jenis Aset',
'luas_tanah' => 'Luas Tanah (M²)',
'luas_bangunan' => 'Luas Bangunan (M²)',
'harga' => 'Harga Transaksi/Penawaran',
'tanggal_penawaran' => 'Tanggal Penawaran/Transaksi',
'diskon' => 'Diskon %',
'esitmasi_harga' => 'Esitmasi Harga Transaksi (Rp)',
'no_telepon' => 'Telepon Contact Person',
'nama_nara_sumbr' => 'Nama Nara Sumber',
'status_nara_sumbr' => 'Status Nara Sumber',
'waktu_transaksi' => 'Waktu Transaksi/Penawaran',
'alamat' => 'Alamat Titik Gps',
'jalan' => 'Jalan',
'desa' => 'Desa/Kelurahan',
'kecamatan' => 'Kecamatan',
'kabupaten' => 'Kabupaten',
'provinsi' => 'Provinsi',
'jarak_pembanding' => 'Jarak Pembanding dengan Objek',
'elevasi' => 'Estimasi Ranking Tanah',
'peruntukan' => 'Estiamsi Rangkin Bangunan'
];
foreach ($fields as $key => $label) {
$rows[] = [
$nomor++,
$label,
$this->data['objek'][$key] ?? '',
$this->data['pembanding1'][$key] ?? '',
$this->data['pembanding2'][$key] ?? '',
$this->data['pembanding3'][$key] ?? ''
];
}
// B. Perhitungan Penyesuaian
$rows[] = [''];
$rows[] = [''];
$rows[] = ['B. Estimasi Nilai Tanah Pembanding dengan Teknik Penyisaan Tanah untuk mendapatkan per meter persegi estimasi Nilai Tanah Pembanding'];
$rows[] = ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3'];
$nostimasi = 1;
$filedEstimasi = [
'estimasi' => 'Estimasi Biaya Pengganti Baru Bangunan (Rp)',
'estimasi_spl' => 'Estimasi Biaya Pengganti Baru SPL (Rp)',
'penyusutan' => 'Penyusutan Fisik Banguna',
'a' => 'a. rincian ttipe bangunan (MAPPI)',
'b' => 'b. umur ekonomis (MAPPI)',
'c' => 'c. estimasi Tahun tahun visual dengan mempertimbangkan renovasi',
'd' => 'd. Sehingga sisa umur efektif',
'e' => 'e. kondisi bagunan',
'f' => 'f.sehinggan penyusutan fisik',
'penyusutan_fungsi' => 'Penyusutan fungsi Bangunan (%)',
'penyusutan_ekonomi' => 'Penyusutan Ekonomi Bangunan (%)',
'total_penyusutan' => 'Total Penyusutan (%)',
'estimasi_nilai' => 'Estimasi Nilai Bangunan dan SPL (Rp)',
'estimasi_tanah' => 'Estimasi Nilai Tanah Pembanding (Rp)',
'estimasi_nilai' => 'Estimasi Nilai Tanah Pembanding (Rp)',
];
foreach ($filedEstimasi as $key => $label) {
$rows[] = [
$nostimasi++,
$label,
$this->data['estimasi'][$key] ?? '',
$this->data['estimasi1'][$key] ?? '',
$this->data['estimasi2'][$key] ?? '',
$this->data['estimasi3'][$key] ?? ''
];
}
$row[] = [''];
$row[] = [''];
$rows[] = ['INDIKASI NILAI TANAHATAS OBJEK PENILAIAN'];
$indikasi=[
'luas_tanah' => 'Luas Tanah ',
'indikasi_per' => 'INDIKASI TANAH PER M2 (RP/M2)',
'indikasi_total' => 'INDIKASI TANAH TOTAL(RP)',
'varian' => 'VARIANT(%)',
];
foreach ($indikasi as $key => $label) {
$rows[] = [
$label,
$this->data['indikasi'][$key] ?? '',
];
}
// C. Peta Lokasi
$rows[] = [''];
$rows[] = [''];
$rows[] = ['C. Peta Lokasi'];
$rows[] = [$this->data['foto_objek']['foto_objek_peta'] ?? ''];
// D. Foto Objek dan Data Pembanding
$rows[] = [''];
$rows[] = ['D. Foto Objek dan Data Pembanding'];
$rows[] = [
$this->data['foto_objek1']['foto_objek'] ?? '',
$this->data['foto_objek2']['foto_objek'] ?? '',
'', '', ''
];
// E. Foto Objek
$rows[] = [''];
$rows[] = ['E. Foto Objek'];
$rows[] = [
$this->data['foto']['foto_objek'] ?? '',
$this->data['foto']['foto_objek'] ?? '',
'', '', ''
];
return collect($rows);
return view('lpj::component.kertas-kerja', [
'data' => $this->data,
]);
}
public function headings(): array
{
return [
['KERTAS KERJA PENILAIAN'],
['Pendekatan Pasar'],
['Metode Perbandingan Data Pasar'],
['Tanggal Penilaian: ' . ($this->headerInfo['tanggal_penilaian'] ?? '')],
['Nama Pemilik Aset: ' . ($this->headerInfo['nama_pemilik'] ?? '')],
['Nama Pemberi Tugas: ' . ($this->headerInfo['nama_pemberi_tugas'] ?? '')],
['Lokasi: ' . ($this->headerInfo['lokasi_lengkap'] ?? '')],
['Nama Debitur: ' . ($this->headerInfo['nama_debitur'] ?? '')],
[''],
['A. INFORMASI UMUM'],
['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3']
// public function collection()
// {
// $rows = [];
// $nomor = 1;
// $fields = [
// 'jenis_aset' => 'Jenis Aset',
// 'luas_tanah' => 'Luas Tanah (M²)',
// 'luas_bangunan' => 'Luas Bangunan (M²)',
// 'harga' => 'Harga Transaksi/Penawaran',
// 'tanggal_penawaran' => 'Tanggal Penawaran/Transaksi',
// 'diskon' => 'Diskon %',
// 'esitmasi_harga' => 'Esitmasi Harga Transaksi (Rp)',
// 'no_telepon' => 'Telepon Contact Person',
// 'nama_nara_sumbr' => 'Nama Nara Sumber',
// 'status_nara_sumbr' => 'Status Nara Sumber',
// 'waktu_transaksi' => 'Waktu Transaksi/Penawaran',
// 'alamat' => 'Alamat Titik Gps',
// 'jalan' => 'Jalan',
// 'desa' => 'Desa/Kelurahan',
// 'kecamatan' => 'Kecamatan',
// 'kabupaten' => 'Kabupaten',
// 'provinsi' => 'Provinsi',
// 'jarak_pembanding' => 'Jarak Pembanding dengan Objek',
// 'elevasi' => 'Estimasi Ranking Tanah',
// 'peruntukan' => 'Estiamsi Rangkin Bangunan'
// ];
// foreach ($fields as $key => $label) {
// $rows[] = [
// $nomor++,
// $label,
// $this->data['objek'][$key] ?? '',
// $this->data['pembanding1'][$key] ?? '',
// $this->data['pembanding2'][$key] ?? '',
// $this->data['pembanding3'][$key] ?? ''
// ];
// }
// // B. Perhitungan Penyesuaian
// $rows[] = [''];
// $rows[] = [''];
// $rows[] = ['B. Estimasi Nilai Tanah Pembanding dengan Teknik Penyisaan Tanah untuk mendapatkan per meter persegi estimasi Nilai Tanah Pembanding'];
// $rows[] = ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3'];
// $nostimasi = 1;
// $filedEstimasi = [
// 'estimasi' => 'Estimasi Biaya Pengganti Baru Bangunan (Rp)',
// 'estimasi_spl' => 'Estimasi Biaya Pengganti Baru SPL (Rp)',
// 'penyusutan' => 'Penyusutan Fisik Banguna',
// 'a' => 'a. rincian ttipe bangunan (MAPPI)',
// 'b' => 'b. umur ekonomis (MAPPI)',
// 'c' => 'c. estimasi Tahun tahun visual dengan mempertimbangkan renovasi',
// 'd' => 'd. Sehingga sisa umur efektif',
// 'e' => 'e. kondisi bagunan',
// 'f' => 'f.sehinggan penyusutan fisik',
// 'penyusutan_fungsi' => 'Penyusutan fungsi Bangunan (%)',
// 'penyusutan_ekonomi' => 'Penyusutan Ekonomi Bangunan (%)',
// 'total_penyusutan' => 'Total Penyusutan (%)',
// 'estimasi_nilai' => 'Estimasi Nilai Bangunan dan SPL (Rp)',
// 'estimasi_tanah' => 'Estimasi Nilai Tanah Pembanding (Rp)',
// 'estimasi_nilai' => 'Estimasi Nilai Tanah Pembanding (Rp)',
// ];
// foreach ($filedEstimasi as $key => $label) {
// $rows[] = [
// $nostimasi++,
// $label,
// $this->data['estimasi'][$key] ?? '',
// $this->data['estimasi1'][$key] ?? '',
// $this->data['estimasi2'][$key] ?? '',
// $this->data['estimasi3'][$key] ?? ''
// ];
// }
];
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
// Styling untuk header utama
// $row[] = [''];
// $row[] = [''];
// $rows[] = ['INDIKASI NILAI TANAHATAS OBJEK PENILAIAN'];
// $indikasi=[
// 'luas_tanah' => 'Luas Tanah ',
// 'indikasi_per' => 'INDIKASI TANAH PER M2 (RP/M2)',
// 'indikasi_total' => 'INDIKASI TANAH TOTAL(RP)',
// 'varian' => 'VARIANT(%)',
// ];
// foreach ($indikasi as $key => $label) {
// $rows[] = [
// $label,
// $this->data['indikasi'][$key] ?? '',
// ];
// }
// Styling untuk setiap section header
$sectionRows = [10, 34, 56, 46, 52]; // Sesuaikan dengan posisi setiap section
foreach ($sectionRows as $row) {
$event->sheet->getStyle("A{$row}:F{$row}")->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setRGB('E2EFDA');
}
// // C. Peta Lokasi
// $rows[] = [''];
// $rows[] = [''];
// $rows[] = ['C. Peta Lokasi'];
// $rows[] = [$this->data['foto_objek']['foto_objek_peta'] ?? ''];
// Merge cells untuk headers
$event->sheet->mergeCells('A1:E1');
$event->sheet->mergeCells('A2:E2');
$event->sheet->mergeCells('A4:E4');
$event->sheet->mergeCells('A5:E5');
$event->sheet->mergeCells('A6:E6');
$event->sheet->mergeCells('A7:E7');
$event->sheet->mergeCells('A8:E8');
// // D. Foto Objek dan Data Pembanding
// $rows[] = [''];
// $rows[] = ['D. Foto Objek dan Data Pembanding'];
// $rows[] = [
// $this->data['foto_objek1']['foto_objek'] ?? '',
// $this->data['foto_objek2']['foto_objek'] ?? '',
// '', '', ''
// ];
// Alignment
$event->sheet->getStyle('A1:E8')->getAlignment()
->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
}
];
}
public function columnWidths(): array
{
return [
'A' => 5,
'B' => 30,
'C' => 30,
'D' => 30,
'E' => 30,
'F' => 30,
];
}
// // E. Foto Objek
// $rows[] = [''];
// $rows[] = ['E. Foto Objek'];
// $rows[] = [
// $this->data['foto']['foto_objek'] ?? '',
// $this->data['foto']['foto_objek'] ?? '',
// '', '', ''
// ];
public function styles(Worksheet $sheet)
{
return [
// Style for the main header
// return collect($rows);
// }
// Style for section headers
10 => ['font' => ['bold' => true]], // A. Informasi Umum
34 => ['font' => ['bold' => true]], // B. Estimasi Nilai Tanah
35 => ['font' => ['bold' => true]], // C. Peta Lokasi
57 => ['font' => ['bold' => true]], // D. Foto Objek dan Pembanding
60 => ['font' => ['bold' => true]], // E. Foto Objek
// Default styling for columns
'A:J' => [
'alignment' => ['horizontal' => 'left', 'vertical' => 'center'],
'wrapText' => true,
],
// Style for other sections (like photo and map sections)
// Style for the other headers
'A11:F11' => [
'font' => ['bold' => true],
'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']],
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
]
]
],
'A12:F31' => [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
]
]
],
// public function headings(): array
// {
// return [
// ['KERTAS KERJA PENILAIAN'],
// ['Pendekatan Pasar'],
// ['Metode Perbandingan Data Pasar'],
// ['Tanggal Penilaian: ' . ($this->headerInfo['tanggal_penilaian'] ?? '')],
// ['Nama Pemilik Aset: ' . ($this->headerInfo['nama_pemilik'] ?? '')],
// ['Nama Pemberi Tugas: ' . ($this->headerInfo['nama_pemberi_tugas'] ?? '')],
// ['Lokasi: ' . ($this->headerInfo['lokasi_lengkap'] ?? '')],
// ['Nama Debitur: ' . ($this->headerInfo['nama_debitur'] ?? '')],
// [''],
// ['A. INFORMASI UMUM'],
// ['No.','Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3']
'A35:F35' => [
'font' => ['bold' => true],
'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']],
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
]
]
],
'A35:F49' => [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
]
]
],
// ];
// }
// public function registerEvents(): array
// {
// return [
// AfterSheet::class => function (AfterSheet $event) {
// // Styling untuk header utama
// end header
];
}
// // Styling untuk setiap section header
// $sectionRows = [10, 34, 56, 46, 52]; // Sesuaikan dengan posisi setiap section
// foreach ($sectionRows as $row) {
// $event->sheet->getStyle("A{$row}:F{$row}")->getFill()
// ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
// ->getStartColor()->setRGB('E2EFDA');
// }
// // Merge cells untuk headers
// $event->sheet->mergeCells('A1:E1');
// $event->sheet->mergeCells('A2:E2');
// $event->sheet->mergeCells('A4:E4');
// $event->sheet->mergeCells('A5:E5');
// $event->sheet->mergeCells('A6:E6');
// $event->sheet->mergeCells('A7:E7');
// $event->sheet->mergeCells('A8:E8');
// // Alignment
// $event->sheet->getStyle('A1:E8')->getAlignment()
// ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
// }
// ];
// }
// public function columnWidths(): array
// {
// return [
// 'A' => 5,
// 'B' => 30,
// 'C' => 30,
// 'D' => 30,
// 'E' => 30,
// 'F' => 30,
// ];
// }
// public function styles(Worksheet $sheet)
// {
// return [
// // Style for the main header
// // Style for section headers
// 10 => ['font' => ['bold' => true]], // A. Informasi Umum
// 34 => ['font' => ['bold' => true]], // B. Estimasi Nilai Tanah
// 35 => ['font' => ['bold' => true]], // C. Peta Lokasi
// 57 => ['font' => ['bold' => true]], // D. Foto Objek dan Pembanding
// 60 => ['font' => ['bold' => true]], // E. Foto Objek
// // Default styling for columns
// 'A:J' => [
// 'alignment' => ['horizontal' => 'left', 'vertical' => 'center'],
// 'wrapText' => true,
// ],
// // Style for other sections (like photo and map sections)
// // Style for the other headers
// 'A11:F11' => [
// 'font' => ['bold' => true],
// 'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']],
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
// ]
// ]
// ],
// 'A12:F31' => [
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
// ]
// ]
// ],
// 'A35:F35' => [
// 'font' => ['bold' => true],
// 'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'E2EFDA']],
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
// ]
// ]
// ],
// 'A35:F49' => [
// 'borders' => [
// 'allBorders' => [
// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
// ]
// ]
// ],
// // end header
// ];
// }
}

View File

@@ -498,7 +498,7 @@ class KJPPController extends Controller
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->get();
$data = $query->with('city')->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));

View File

@@ -9,7 +9,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\KertasKerjaExport;
use App\Http\Controllers\SurveyorController;
use Modules\Lpj\Http\Controllers\SurveyorController;
class PenilaiController extends Controller
{
@@ -62,22 +62,43 @@ class PenilaiController extends Controller
$basicData = $data->getCommonData();
$permohonan = Permohonan::with(['debiture.documents.jenisjaminan', 'region.teams.teamsUsers.user', 'penilaian'])->find($id);
return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'basicData'));
$jaminanId = $permohonan->debiture->documents->first()->jenis_jaminan_id;
$inspeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$forminspeksi = null;
if ($inspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true);
}
return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'basicData', 'forminspeksi', 'inspeksi'));
}
public function standard($id)
{
$permohonan = Permohonan::with(['debiture.documents.jenisjaminan', 'region.teams.teamsUsers.user', 'penilaian'])->find($id);
return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan'));
$jaminanId = $permohonan->debiture->documents->first()->jenis_jaminan_id;
$inspeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$forminspeksi = null;
if ($inspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true);
}
$data = new SurveyorController();
$basicData = $data->getCommonData();
return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi'));
}
public function resume(){
return view('lpj::resume.index');
public function resume($id)
{
$permohonan = Permohonan::with(['debiture.documents.jenisjaminan', 'region.teams.teamsUsers.user', 'penilaian'])->find($id);
return view('lpj::penilai.components.resume', compact('permohonan'));
}
public function memo(){
public function memo()
{
return view('lpj::resume.index');
}
}
/**
@@ -192,19 +213,24 @@ class PenilaiController extends Controller
]);
}
public function kertas_kerja($id, $jeniJaminan)
public function kertas_kerja($id, $jaminanId)
{
$data = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$headerInfo = [
'tanggal_penilaian' => '',
'nama_pemilik' => '',
'nama_pemberi_tugas' => '',
'lokasi_lengkap' => '',
'nama_debitur' => ''
];
// $data = null;
// $headerInfo = [
// 'tanggal_penilaian' => '',
// 'nama_pemilik' => '',
// 'nama_pemberi_tugas' => '',
// 'lokasi_lengkap' => '',
// 'nama_debitur' => ''
// ];
return Excel::download(new KertasKerjaExport($data, $headerInfo), 'kertas-kerja.xlsx');
// $datas = json_decode($data->data_pembanding);
// return response()->json(['data' =>$datas ]);
// return view('lpj::component.kertas-kerja', compact('data'));
return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx');
}

View File

@@ -164,7 +164,6 @@ class SurveyorController extends Controller
return response()->json([
'success' => true,
'message' => 'Data berhasil disimpan',
'data' => $processedData
], 200);
} catch (\Exception $e) {
@@ -178,30 +177,38 @@ class SurveyorController extends Controller
private function getActionSpecificRules($data, $action, $request): array
{
$pisah = explode(',', $action);
$allRules = [
'tanah' => $this->getTanahData($data, $request),
'bangunan' => $this->getBangunanData($data, $request),
'kapal' => $this->getKapalData($data, $request),
'kendaraan' => $this->getKendaraanData($data, $request),
'mesin' => $this->getMesinData($data, $request),
'pesawat' => $this->getPesawatData($data, $request),
'alat-berat' => $this->getAlatBeratData($data, $request),
'apartemen-kantor' => $this->getUnitData($data, $request),
'lingkungan' => $this->getLingkunganData($data, $request),
'fakta' => $this->getFactData($data, $request),
$allowedActions = [
'apartemen-kantor' => 'getUnitData',
'tanah' => 'getTanahData',
'bangunan' => 'getBangunanData',
'kapal' => 'getKapalData',
'kendaraan' => 'getKendaraanData',
'mesin' => 'getMesinData',
'pesawat' => 'getPesawatData',
'alat-berat' => 'getAlatBeratData',
'lingkungan' => 'getLingkunganData',
'fakta' => 'getFactData'
];
$rules = [];
$hasAssetDescriptionRules = false;
$pisah = array_filter(
explode(',', $action),
function($act) use ($allowedActions) {
return isset($allowedActions[trim($act)]);
}
);
foreach ($pisah as $act) {
if (isset($allRules[$act])) {
$rules = array_merge($rules, $allRules[$act]);
if ($act == 'tanah' || $act == 'bangunan' || $act == 'apartemen-kantor') {
$hasAssetDescriptionRules = true;
}
$act = trim($act);
$method = $allowedActions[$act];
$actionRules = $this->$method($data, $request);
$rules = array_merge($rules, $actionRules);
if (in_array($act, ['apartemen-kantor', 'tanah', 'bangunan'])) {
$hasAssetDescriptionRules = true;
}
}
@@ -217,28 +224,39 @@ class SurveyorController extends Controller
{
try {
$maxSize = getMaxFileSize('Foto');
$validatedData = $request->validate([
'foto_denah' => 'required|file|mimes:jpeg,jpg,png,pdf,svg|max:'. $maxSize,
$validationRules = [
'luas' => 'required|numeric',
'permohonan_id' => 'required',
'jenis_jaminan_id' => 'required'
]);
];
$validatedData['foto_denah'] = $this->uploadFile($request->file('foto_denah'), 'foto_denah');
if ($request->hasFile('foto_denah')) {
$maxSize = getMaxFileSize('Foto');
$validationRules['foto_denah'] = 'file|mimes:jpeg,jpg,png,pdf,svg|max:'. $maxSize;
}
$validatedData = $request->validate($validationRules);
$formatJsonDenah = [
'foto_denah' => $validatedData['foto_denah'],
'luas' => $validatedData['luas'],
];
if ($request->hasFile('foto_denah')) {
$formatJsonDenah['foto_denah'] = $this->uploadFile($request->file('foto_denah'), 'foto_denah');
}
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->first();
if ($inspeksi) {
$existingDenah = json_decode($inspeksi->denah_form, true) ?? [];
$updatedDenah = array_merge($existingDenah, $formatJsonDenah);
$inspeksi->update([
'denah_form' => json_encode($formatJsonDenah)
'denah_form' => json_encode($updatedDenah)
]);
} else {
Inspeksi::create([
@@ -537,7 +555,7 @@ class SurveyorController extends Controller
$penilaian->update([
'authorized_status' => 1,
]);
$data['status'] = 'success';
$data['message']= 'Jadwal '.$request->noReg.' berhasil di aprove';
} catch (\Exception $e) {
@@ -573,7 +591,7 @@ class SurveyorController extends Controller
->first();
if ($inspeksi) {
$existingData = $inspeksi->data_pembanding ?? [];
$existingData = json_decode($inspeksi->data_pembanding, true) ?? [];
}
}
@@ -582,8 +600,8 @@ class SurveyorController extends Controller
$existingFoto = null;
if ($existingData && isset($existingData[$i]['foto_objek'])) {
$existingFoto = $existingData[$i]['foto_objek'];
if ($existingData && isset($existingData['data_pembanding'][$i]['foto_objek'])) {
$existingFoto = $existingData['data_pembanding'][$i]['foto_objek'];
}
// Penanganan foto pembanding
@@ -602,8 +620,8 @@ class SurveyorController extends Controller
return $dataPembanding;
}
private function formatSinglePembanding($request, $index)
{
$fields = [
@@ -613,12 +631,12 @@ class SurveyorController extends Controller
'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];
@@ -627,10 +645,10 @@ class SurveyorController extends Controller
}
}
return $pembanding;
}
private function handleupdateOrDeleteFile($file, $type, $prefix)
@@ -662,54 +680,54 @@ class SurveyorController extends Controller
'status_nara_sumber', 'harga', 'nama_nara_sumber',
'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';
$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'])) {
$cekBanguan = $dataForm['bangunan']['luas_tanah_bagunan'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
$cekBanguan = $dataForm['bangunan']['luas_tanah_bagunan'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
$dataForm['bangunan'][$field][$cekBanguan] = $newValue;
}
// Fields untuk alamat dalam asset
@@ -718,12 +736,12 @@ class SurveyorController extends Controller
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
@@ -737,19 +755,19 @@ class SurveyorController extends Controller
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],
@@ -772,7 +790,7 @@ class SurveyorController extends Controller
return $carry;
}, [])
);
} else {
// Inisialisasi data baru
$objekPenilaian = array_reduce($fields, function ($carry, $field) use ($request) {
@@ -780,10 +798,10 @@ class SurveyorController extends Controller
return $carry;
}, ['foto_objek' => null]);
}
return $objekPenilaian;
}
private function saveInspeksi($formattedData)
@@ -855,6 +873,7 @@ class SurveyorController extends Controller
'data_pembanding' => $this->formatDataPembanding($request)
];
$inspeksi = $this->saveInspeksi($formattedData);
DB::commit();
@@ -1023,7 +1042,6 @@ class SurveyorController extends Controller
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \Exception('Error decoding comparison data: ' . json_last_error_msg());
}
}
$fotoForm = json_decode($inspeksi->foto_form, true);
@@ -1037,8 +1055,6 @@ class SurveyorController extends Controller
$districts = District::where('city_code', $this->getCodeAlamat('city_code', $inspectionData))->get();
$villages = Village::where('district_code', $this->getCodeAlamat('district_code', $inspectionData))->get();
return view('lpj::surveyor.components.data-pembanding', compact(
'permohonan',
'id',
@@ -1050,7 +1066,8 @@ class SurveyorController extends Controller
'cities',
'districts',
'villages',
'provinces'
'provinces',
'inspeksi'
));
} catch (\Exception $e) {
@@ -1544,7 +1561,7 @@ class SurveyorController extends Controller
private function getCommonData()
public function getCommonData()
{
return [
'branches' => Branch::all(),
@@ -1660,7 +1677,7 @@ class SurveyorController extends Controller
true
),
'hadap_mata_angin' => [
$data['hadap_mata_angin'] => ($data['hadap_mata_angin'] == 'sesuai') ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai']
$data['hadap_mata_angin'] => $data['hadap_mata_angin'] == 'sesuai' ? $data['hadap_mata_angin_sesuai'] : $data['hadap_mata_angin_tidak_sesuai'] ?? null
],
'bentuk_tanah' => $this->getFieldData(
$data,
@@ -1791,11 +1808,9 @@ class SurveyorController extends Controller
'jarak_tps' => $data['jarak_tps'] ?? null,
'nama_tps' => $data['nama_tps'] ?? null,
'merupakan_daerah' => $data['merupakan_daerah'] ?? null,
'fasilitas_dekat_object' => $this->getFieldData(
$data,
'fasilitas_dekat_object',
false,
'lainnya'
'fasilitas_dekat_object' => $this->mapArrayWithInputs(
$data['fasilitas_dekat_object'] ?? [],
$data['fasilitas_dekat_object_input'] ?? []
),
]
];

View File

@@ -76,7 +76,7 @@ class FormSurveyorRequest extends FormRequest
'hadap_mata_angin' => 'required',
'hadap_mata_angin_sesuai' => 'nullable',
'hadap_mata_angin_tidak_sesuai' => 'nullable',
'bentuk_tanah' => 'nullable|array',
'bentuk_tanah' => 'required|array',
'bentuk_tanah_lainnya' => 'nullable',
'kontur_tanah' => 'required|array',
'ketinggian_jalan' => 'required|array',
@@ -102,8 +102,8 @@ class FormSurveyorRequest extends FormRequest
'luas_tanah_bangunan_sesuai' => 'nullable',
'luas_tanah_bagunan' => 'required',
'luas_tanah_bangunan_tidak_sesuai' => 'nullable',
'jenis_bangunan' => 'required',
'kondisi_bangunan' => 'nullable',
'jenis_bangunan' => 'required|array',
'kondisi_bangunan' => 'required|array',
'sifat_bangunan' => 'required|array',
'sifat_bangunan_input' => 'nullable|array',
@@ -167,7 +167,7 @@ class FormSurveyorRequest extends FormRequest
'nama_tpu' => 'nullable',
'merupakan_daerah' => 'nullable',
'fasilitas_dekat_object' => 'nullable|array',
'fasilitas_dekat_object_lainnya' => 'nullable',
'fasilitas_dekat_object_input' => 'nullable|array',
];
}

View File

@@ -2,7 +2,7 @@
namespace Modules\Lpj\Models;
use Modules\Location\Models\Province;
use Modules\Location\Models\City;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -25,4 +25,12 @@ class KJPP extends Model
{
return $this->hasMany(PenawaranDetailTender::class, 'kjpp_rekanan_id', 'id');
}
public function city()
{
return $this->belongsTo(City::class, 'city_code', 'code');
}
}