diff --git a/app/Exports/KertasKerjaExport.php b/app/Exports/KertasKerjaExport.php index 6ea78de..2b744ac 100644 --- a/app/Exports/KertasKerjaExport.php +++ b/app/Exports/KertasKerjaExport.php @@ -2,21 +2,22 @@ namespace Modules\Lpj\Exports; -// 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; -use Illuminate\Contracts\View\View; -use Maatwebsite\Excel\Concerns\FromView; -class KertasKerjaExport implements FromView -{ +use Maatwebsite\Excel\Concerns\FromCollection; +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 PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; +use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; -// class KertasKerjaExport implements FromCollection, WithHeadings, WithStyles, WithColumnWidths, WithEvents +class KertasKerjaExport implements FromCollection, WithHeadings, WithStyles, WithColumnWidths, WithEvents +{ +// use Illuminate\Contracts\View\View; +// use Maatwebsite\Excel\Concerns\FromView; +// class KertasKerjaExport implements FromView // { + protected $data; public function __construct($data) @@ -24,257 +25,315 @@ class KertasKerjaExport implements FromView $this->data = $data; } - public function view(): View + // public function view(): View + // { + // return view('lpj::component.kertas-kerja', [ + // 'data' => $this->data, + // ]); + // } + + public function collection() { - return view('lpj::component.kertas-kerja', [ - 'data' => $this->data, - ]); + // $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' + + ]; + + $rows = []; + $nomor = 1; + + // Add general asset information + $rows[] = ['No.', 'Uraian', 'Objek Penilaian', 'Data Pembanding 1', 'Data Pembanding 2', 'Data Pembanding 3']; + + foreach ($this->data['objek'] as $key => $value) { + $rows[] = [ + $nomor++, + $key, + $value, + $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); } - // public function collection() - // { - // $rows = []; + 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'] ?? '')], - // $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', + ]; + } + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + // Styling untuk header utama + - // 'jalan' => 'Jalan', - // 'desa' => 'Desa/Kelurahan', - // 'kecamatan' => 'Kecamatan', - // 'kabupaten' => 'Kabupaten', - // 'provinsi' => 'Provinsi', + // 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'); + } - // 'jarak_pembanding' => 'Jarak Pembanding dengan Objek', - // 'elevasi' => 'Estimasi Ranking Tanah', - // 'peruntukan' => 'Estiamsi Rangkin Bangunan' + // 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); + $this->insertImages($event->sheet); + } + ]; + } + public function columnWidths(): array + { + return [ + 'A' => 5, + 'B' => 30, + 'C' => 30, + 'D' => 30, + 'E' => 30, + 'F' => 30, + ]; + } - // foreach ($fields as $key => $label) { - // $rows[] = [ - // $nomor++, - // $label, - // $this->data['objek'][$key] ?? '', - // $this->data['pembanding1'][$key] ?? '', - // $this->data['pembanding2'][$key] ?? '', - // $this->data['pembanding3'][$key] ?? '' - // ]; - // } + public function styles(Worksheet $sheet) + { + return [ + // Style for the main header - // // 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', + // 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 - // '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)', - // ]; + // Default styling for columns + 'A:J' => [ + 'alignment' => ['horizontal' => 'left', 'vertical' => 'center'], + 'wrapText' => true, + ], - // foreach ($filedEstimasi as $key => $label) { - // $rows[] = [ - // $nostimasi++, - // $label, - // $this->data['estimasi'][$key] ?? '', - // $this->data['estimasi1'][$key] ?? '', - // $this->data['estimasi2'][$key] ?? '', - // $this->data['estimasi3'][$key] ?? '' + // 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 + ] + ] + ], - // $row[] = ['']; - // $row[] = ['']; - // $rows[] = ['INDIKASI NILAI TANAHATAS OBJEK PENILAIAN']; + '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 + ] + ] + ], - // $indikasi=[ - // 'luas_tanah' => 'Luas Tanah ', - // 'indikasi_per' => 'INDIKASI TANAH PER M2 (RP/M2)', - // 'indikasi_total' => 'INDIKASI TANAH TOTAL(RP)', - // 'varian' => 'VARIANT(%)', - // ]; + // end header + ]; + } - // foreach ($indikasi as $key => $label) { - // $rows[] = [ - // $label, - // $this->data['indikasi'][$key] ?? '', - // ]; - // } + + protected function insertImages($sheet) + { + ini_set('max_execution_time', '300'); + $worksheet = $sheet->getDelegate(); + + // Insert images for pembanding1 + if (!empty($this->data['pembanding1']['foto_objek'])) { + $drawing = new Drawing(); + $drawing->setName('Pembanding 1'); + $drawing->setDescription('Foto Objek Pembanding 1'); + $drawing->setPath(storage_path('app/public/' . $this->data['pembanding1']['foto_objek'])); // Adjust path as needed + $drawing->setHeight(90); + $drawing->setCoordinates('C' . (count($this->collection()) + 2)); // Adjust coordinates as needed + $drawing->setWorksheet($worksheet); + } + + // Repeat for pembanding2 and pembanding3 + if (!empty($this->data['pembanding2']['foto_objek'])) { + $drawing = new Drawing(); + $drawing->setName('Pembanding 2'); + $drawing->setDescription('Foto Objek Pembanding 2'); + $drawing->setPath(storage_path('app/public/' . $this->data['pembanding2']['foto_objek'])); // Adjust path as needed + $drawing->setHeight(90); + $drawing->setCoordinates('C' . (count($this->collection()) + 4)); // Adjust coordinates as needed + $drawing->setWorksheet($worksheet); + } + + if (!empty($this->data['pembanding3']['foto_objek'])) { + $drawing = new Drawing(); + $drawing->setName('Pembanding 3'); + $drawing->setDescription('Foto Objek Pembanding 3'); + $drawing->setPath(storage_path('app/public/' . $this->data['pembanding3']['foto_objek'])); // Adjust path as needed + $drawing->setHeight(90); + $drawing->setCoordinates('C' . (count($this->collection()) + 6)); // Adjust coordinates as needed + $drawing->setWorksheet($worksheet); + } + + // Insert images for foto_objek + foreach ($this->data['foto_objek'] as $index => $foto) { + if (!empty($foto['foto_objek'])) { + $drawing = new Drawing(); + $drawing->setName($foto['name_objek']); + $drawing->setDescription($foto['deskripsi_objek']); + $drawing->setPath(storage_path('app/public/' . $foto['foto_objek'])); // Adjust path as needed + $drawing->setHeight(90); + $drawing->setCoordinates('C' . (count($this->collection()) + (8 + $index * 2))); // Adjust coordinates as needed + $drawing->setWorksheet($worksheet); + } + } + } + - // // 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); - // } - - // 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 registerEvents(): array - // { - // return [ - // AfterSheet::class => function (AfterSheet $event) { - // // Styling untuk header utama - - - // // 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 - // ]; - // } } diff --git a/app/Http/Controllers/PembatalanController.php b/app/Http/Controllers/PembatalanController.php new file mode 100644 index 0000000..af65cde --- /dev/null +++ b/app/Http/Controllers/PembatalanController.php @@ -0,0 +1,147 @@ +historyService = $historyService; + } + + public function index() + { + return view('lpj::pembatalan.index'); + } + + public function edit($id) + { + $pembatalan = PermohonanPembatalan::with(['permohonan.debiture','permohonan.branch'])->find($id); + + return view( + 'lpj::pembatalan.form', + compact( + 'pembatalan' + ), + ); + } + + public function update(Request $request, $id) + { + $pembatalan = PermohonanPembatalan::findOrFail($id); + $permohonan = Permohonan::find($pembatalan->permohonan_id); + $beforeRequest = $permohonan->toArray(); + + try { + // Update Permohonan Pembatalan + if($request->status=='approved'){ + $pembatalan->status = 'approved'; + $pembatalan->save(); + + $permohonan->status = 'batal'; + $permohonan->save(); + } else{ + $pembatalan->status = 'rejected'; + $pembatalan->save(); + } + + return redirect() + ->route('pembatalan.index')->with('success', 'Permohonan Pembatalan updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('pembatalan.edit', $id)->with('error', 'Failed to update permohonan Pembatalan'); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = PermohonanPembatalan::query(); + $query = $query->orderBy('created_at', 'desc'); + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->orWhereRelation('permohonan', 'nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('permohonan.debiture', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhere('alasan_pembatalan', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->with(['permohonan.debiture','permohonan.branch','creator'])->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $size); + + // Calculate the current page number + $currentPage = max(1, $request->get('page', 1)); + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + } diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 38ccedc..ece6ab7 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -3,6 +3,7 @@ namespace Modules\Lpj\Http\Controllers; use Illuminate\Http\Request; +use Barryvdh\DomPDF\Facade\Pdf; // https://github.com/barryvdh/laravel-dompdf use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Inspeksi; use Modules\Lpj\Models\Penilai; @@ -12,7 +13,6 @@ use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Exports\KertasKerjaExport; use Modules\Lpj\Http\Controllers\SurveyorController; use Modules\Location\Models\Province; - class PenilaiController extends Controller { public $user; @@ -69,19 +69,16 @@ class PenilaiController extends Controller public function sederhana(Request $request, $id) { - $basicData = $this->surveyorController->getCommonData(); - $documentId = $request->query('documentId'); - $inspeksiId = $request->query('inspeksiId'); $jaminanId = $request->query('jaminanId'); $permohonan = $this->surveyorController->getPermohonanJaminanId($id, $documentId, $jaminanId); - - + $basicData = $this->surveyorController->getCommonData(); $inspeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $documentId)->first(); $lpj = Penilai::where('permohonan_id', $id)->where('dokument_id', $documentId)->first(); + $forminspeksi = null; $lpjData = null; if ($inspeksi) { $forminspeksi = json_decode($inspeksi->data_form, true); @@ -91,7 +88,7 @@ class PenilaiController extends Controller $lpjData = json_decode($lpj->lpj, true); } - return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'basicData', 'forminspeksi', 'inspeksi', 'lpjData')); + return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData')); } public function standard(Request $request, $id) @@ -198,8 +195,7 @@ class PenilaiController extends Controller $permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId); $penilai = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); - $inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where - ('dokument_id', $documentId)->first(); + $inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); $formFoto = null; if ($inspeksi) { $formFoto = json_decode($inspeksi->foto_form, true); @@ -303,19 +299,76 @@ class PenilaiController extends Controller public function export_kertas_kerja(Request $request) { - $permohonanId = $request->query('permohonanId'); $documentId = $request->query('documentId'); - $inspeksiId = $request->query('inspeksiId'); - $jaminanId = $request->query('jaminanId'); - $data = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); + // Fetch the data from the database + $data = Inspeksi::where('permohonan_id', $permohonanId) + ->where('dokument_id', $documentId) + ->first(); - return view('lpj::component.kertas-kerja', compact('data')); - // return Excel::download(new KertasKerjaExport($data), 'kertas-kerja.xlsx'); + // Check if data exists + if (!$data) { + return response()->json(['message' => 'Data not found'], 404); + } + + // Decode the JSON fields + $dataForm = json_decode($data->data_form, true); + $fotoForm = json_decode($data->foto_form, true); + $denahForm = json_decode($data->denah_form, true); + $dataPembanding = json_decode($data->data_pembanding, true); + + // Prepare the data for export + $exportData = [ + 'objek' => [ + 'jenis_aset' => $dataForm['asset']['jenis_asset']['sesuai'] ?? '', + 'luas_tanah' => $dataForm['tanah']['luas_tanah']['tidak sesuai'] ?? '', + 'harga' => $dataForm['asset']['harga'] ?? '', + 'tanggal_penawaran' => $dataForm['tanggal_penawaran'] ?? '', + 'diskon' => $dataForm['diskon'] ?? '', + 'no_telepon' => $dataForm['no_telepon'] ?? '', + 'nama_nara_sumber' => $dataForm['nama_nara_sumber'] ?? '', + 'status_nara_sumber' => $dataForm['status_nara_sumber'] ?? '', + 'alamat' => $dataForm['alamat'] ?? '', + // Add other fields as necessary + ], + 'pembanding1' => [], + 'pembanding2' => [], + 'pembanding3' => [], + 'foto_peta' => [ + 'foto_tempat' => $dataForm['foto_tempat'] ?? [], + 'foto_gistaru' => $dataForm['foto_gistaru'] ?? [], + 'foto_bhumi' => $dataForm['foto_bhumi'] ?? [], + 'foto_argis_region' => $dataForm['foto_argis_region'] ?? [], + ], + 'foto_objek' => $fotoForm['object_jaminan'] ?? [], + 'foto_objek1' => [], // Populate with relevant data + 'foto_objek2' => [], // Populate with relevant data + 'tanggal_penilaian' => $data->tanggal_penilaian ?? '', + 'nama_pemilik' => $data->nama_pemilik ?? '', + 'lokasi_lengkap' => $data->lokasi_lengkap ?? '', + ]; + + // Extract data pembanding + if (isset($dataPembanding['data_pembanding'])) { + foreach ($dataPembanding['data_pembanding'] as $index => $pembanding) { + if ($index == 0) { + $exportData['pembanding1'] = $pembanding; + } elseif ($index == 1) { + $exportData['pembanding2'] = $pembanding; + } elseif ($index == 2) { + $exportData['pembanding3'] = $pembanding; + } + } + } + + // Now create the export + // return response()->json([ 'data' => $fotoForm]); + return Excel::download(new KertasKerjaExport($exportData), 'kertas-kerja.xlsx'); } + public function import_kertas_kerja(Request $request) { @@ -523,4 +576,48 @@ class PenilaiController extends Controller } + public function print_out(Request $request) + { + $documentId = $request->query('documentId'); + $jaminanId = $request->query('jaminanId'); + $permohonanId = $request->query('permohonanId'); + + $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(); + + $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); + } + + if ($lpj) { + $lpjData = json_decode($lpj->lpj, true); + } + + + $pdf =Pdf::loadView('lpj::penilai.components.print-out', compact( + 'permohonan', + 'forminspeksi', + 'lpjData', + 'formFoto', + 'basicData', + 'inspeksi', + 'lpj' + )); + + $pdf->setPaper('A4', 'portrait'); + + return $pdf->download('laporan.pdf'); + + } + } diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php index 0d6ebb0..8774786 100644 --- a/app/Http/Controllers/PermohonanController.php +++ b/app/Http/Controllers/PermohonanController.php @@ -11,6 +11,7 @@ use Modules\Location\Models\District; use Modules\Location\Models\Province; use Modules\Location\Models\Village; + use Modules\Lpj\Models\PermohonanPembatalan; use Modules\Lpj\Exports\PermohonanExport; use Modules\Lpj\Http\Requests\PermohonanRequest; use Modules\Lpj\Models\Branch; @@ -25,7 +26,7 @@ class PermohonanController extends Controller { - public $user; + public $user; protected $historyService; public function __construct(PermohonanHistoryService $historyService) @@ -46,7 +47,7 @@ // Process file upload $filePath = null; if ($request->hasFile('attachment')) { - $file = $request->file('attachment'); + $file = $request->file('attachment'); $fileName = time() . '_' . $file->getClientOriginalName(); $filePath = $file->storeAs('permohonan_attachments', $fileName, 'public'); } @@ -65,7 +66,7 @@ $keterangan, [], // beforeRequest is empty for new permohonan $permohonan->toArray(), - $filePath + $filePath, ); return redirect() ->route('permohonan.index')->with('success', 'Permohonan created successfully'); @@ -136,7 +137,7 @@ public function update(PermohonanRequest $request, $id) { - $permohonan = Permohonan::findOrFail($id); + $permohonan = Permohonan::findOrFail($id); $beforeRequest = $permohonan->toArray(); $validate = $request->validated(); @@ -203,10 +204,10 @@ // Get the total count of records $totalRecords = $query->count(); - $size = $request->get('size', 10); - if ($size == 0) { - $size = 10; - } + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } // Apply pagination if provided if ($request->has('page') && $request->has('size')) { @@ -221,7 +222,7 @@ $filteredRecords = $query->count(); // Get the data for the current page - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian'])->get(); + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $size); @@ -353,4 +354,38 @@ // $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan')); // return $pdf->stream(); } + + public function showPembatalan($id) + { + $permohonan = Permohonan::with(['pembatalan','debiture'])->findOrFail($id); + return view('lpj::permohonan.pembatalan-form', compact('permohonan')); + } + + + public function pembatalan(Request $request) + { + // Validate the request + $validatedData = $request->validate([ + 'permohonan_id' => 'required|exists:permohonan,id', + 'alasan_pembatalan' => 'required|string', + 'file_pembatalan' => 'required|file|mimes:pdf,doc,docx|max:2048', + ]); + + // Handle file upload + if ($request->hasFile('file_pembatalan')) { + $file = $request->file('file_pembatalan'); + $filename = time() . '_' . $file->getClientOriginalName(); + $filePath = $file->storeAs('pembatalan', $filename, 'public'); + $validatedData['file_pembatalan'] = $filePath; + } + + // Add created_by + $validatedData['created_by'] = auth()->id(); + + // Create new PermohonanPembatalan + $pembatalan = PermohonanPembatalan::create($validatedData); + + return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval'); + } + } diff --git a/app/Http/Controllers/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index a0d313a..7eae44a 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -22,7 +22,7 @@ use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\StatusPermohonan; -use Modules\Lpj\Models\TujuanPenilaianKJPP; +use Modules\Lpj\Models\TujuanPenilaian; class ProsesPenawaranController extends Controller { @@ -49,17 +49,17 @@ class ProsesPenawaranController extends Controller // penawaran need union with permohonan $query = PenawaranTender::query()->whereIn('penawaran.status', ['tender', 'proposal-tender']) ->select('penawaran.id', - 'penawaran.nomor_registrasi', - 'penawaran.code as penawaran_code', - 'penawaran.start_date', - 'penawaran.end_date', + 'penawaran.nomor_registrasi', + 'penawaran.code as penawaran_code', + 'penawaran.start_date', + 'penawaran.end_date', 'penawaran.status as statusnya', - 'debitures.name as debitures_name', + 'debitures.name as debitures_name', 'permohonan.tanggal_permohonan', 'users.name as user_pemohon', - 'branches.name as branches_name', + 'branches.name as branches_name', 'tujuan_penilaian.name as tujuan_penilaian_name', - 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name' + 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name' ) ->withCount('penawarandetails') ->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi') @@ -71,22 +71,22 @@ class ProsesPenawaranController extends Controller $permohonanQuery = Permohonan::whereIn('permohonan.status', ['registered'])->where('permohonan.jenis_penilaian_id', '=', 2) ->select('permohonan.id', - 'permohonan.nomor_registrasi', - DB::raw('"" as penawaran_code'), - DB::raw('"" as start_date'), - DB::raw('"" as end_date'), + 'permohonan.nomor_registrasi', + DB::raw('"" as penawaran_code'), + DB::raw('"" as start_date'), + DB::raw('"" as end_date'), 'permohonan.status as statusnya', - 'debitures.name as debitures_name', + 'debitures.name as debitures_name', 'permohonan.tanggal_permohonan', 'users.name as user_pemohon', - 'branches.name as branches_name', + 'branches.name as branches_name', 'tujuan_penilaian.name as tujuan_penilaian_name', - DB::raw('"" as tujuan_penilaian_kjpp_name'), + DB::raw('"" as tujuan_penilaian_kjpp_name'), DB::raw('"-" as penawarandetails_count')) ->leftJoin('users', 'users.id', '=', 'permohonan.user_id') ->leftJoin('branches', 'branches.id', '=', 'permohonan.branch_id') ->leftJoin('debitures', 'debitures.id', '=', 'permohonan.debiture_id') - ->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id'); + ->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id'); $query->union($permohonanQuery); // penawaran need union with permohonan @@ -130,7 +130,7 @@ class ProsesPenawaranController extends Controller // format date $i = 0; foreach ($data as $obj) { - + // tanggal_permohonan if ($obj->tanggal_permohonan) { $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); @@ -138,9 +138,9 @@ class ProsesPenawaranController extends Controller // date_range $data[$i]->date_range = "-"; - if ($obj->start_date && $obj->end_date) + if ($obj->start_date && $obj->end_date) { - $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . + $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . Carbon::parse($obj->end_date)->format('d M Y'); } @@ -208,8 +208,8 @@ class ProsesPenawaranController extends Controller ->select('id', 'name', 'code') // Pilih beberapa kolom sekaligus ->get(); $sql=DB::getQueryLog(); - $data['sql'] = $sql; - $data['kjpps'] = $kjpps; + $data['sql'] = $sql; + $data['kjpps'] = $kjpps; $data['penawaran'] = $penawaran; $data['penawrandetails'] = $penawrandetails; $data['status'] = 'success'; @@ -238,7 +238,7 @@ class ProsesPenawaranController extends Controller $data = array(); $dataPenawaranDetail = array(); if (request()->ajax()) { - + $penawarandetail = PenawaranDetailTender::find($id); // cek masa aktif penawaran $checkActiveDateRange = checkActiveDateRangePenawaran($penawarandetail->penawaran_id); @@ -290,13 +290,13 @@ class ProsesPenawaranController extends Controller $data['status'] = 'error'; $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); - } + } } else { $data['status'] = 'error'; $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); - } + } } else { $data['status'] = 'error'; @@ -339,7 +339,7 @@ class ProsesPenawaranController extends Controller $data = array(); $dataPermohonan = array(); $dataPenawaran = array(); - + // cek masa aktif penawaran $checkActiveDateRange = checkActiveDateRangePenawaran($id); // cek status (penawaran.status = tender) @@ -406,7 +406,7 @@ class ProsesPenawaranController extends Controller if($checkActiveDateRange && ('tender'==$penawaran->status)) { try { - + // $data['id']=$id; $dataDetailPenawaran = ['status' => '0', @@ -446,7 +446,7 @@ class ProsesPenawaranController extends Controller $data = array(); $dataPenawaranDetail = array(); $failed = 0; - + // cek masa aktif penawaran $checkActiveDateRange = checkActiveDateRangePenawaran($id); // cek status (penawaran.status = tender) @@ -454,9 +454,9 @@ class ProsesPenawaranController extends Controller if($checkActiveDateRange && ('tender'==$penawaran->status)) { DB::beginTransaction(); - try + try { - // update detail_penawaran + // update detail_penawaran $detail_penawaran_ids = $request->input('prosespenawaran_penawarandetail_id', []); $no_proposals = $request->input('prosespenawaran_no_proposal', []); $tgl_proposals = $request->input('prosespenawaran_tgl_proposal', []); @@ -469,23 +469,23 @@ class ProsesPenawaranController extends Controller // loop for($i=0;$i<$tot_kjpp;$i++) { - $detail_penawaran_id= $detail_penawaran_ids[$i]; + $detail_penawaran_id= $detail_penawaran_ids[$i]; $dataPenawaranDetail = [ 'no_proposal' => $no_proposals[$i], - 'tgl_proposal' => $tgl_proposals[$i], + 'tgl_proposal' => $tgl_proposals[$i], 'biaya_penawaran' => str_replace(".","",$biaya_penawarans[$i]), // 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) 'updated_by' => Auth::id(), 'updated_at' => now(), ]; - + $penawarandetail = PenawaranDetailTender::find($detail_penawaran_id); - if ($dokumen_penawarans) + if ($dokumen_penawarans) { - if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans)) + if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans)) { $file_tmp = $dokumen_penawarans[$i]; if($file_tmp->isValid()) - { + { $folderPath = 'uploads/penawaran/'; $myFile=$file_tmp->getClientOriginalName(); // nama file with extension @@ -500,16 +500,16 @@ class ProsesPenawaranController extends Controller $dataPenawaranDetail['attachment'] = $myFile; $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; } - + } - + } - - $checkStatus = $penawarandetail->update($dataPenawaranDetail); + + $checkStatus = $penawarandetail->update($dataPenawaranDetail); if(!$checkStatus) $failed++; } - + if($failed>0) { DB::rollBack(); @@ -522,16 +522,16 @@ class ProsesPenawaranController extends Controller $data['status'] = 'success'; $data['message'] ['message_success'] = array('Proses Draft Penawaran KJPP successfully'); } - + } else { $data['status'] = 'error'; $data['message'] ['message_error'] = array('Data inti tidak ada.'); } - - } - catch (Exception $e) + + } + catch (Exception $e) { // dd($e); DB::rollBack(); @@ -560,7 +560,7 @@ class ProsesPenawaranController extends Controller $penawaran = PenawaranTender::find($request->penawaran_id); if($checkActiveDateRange && ('tender'==$penawaran->status)) { - try + try { $dataPenawaranDetail = [ 'penawaran_id' => $request->penawaran_id, @@ -570,22 +570,22 @@ class ProsesPenawaranController extends Controller ]; PenawaranDetailTender::create($dataPenawaranDetail); - + $data['status'] = 'success'; $data['message'] ['message_success'] = array('Proses Tambah KJPP successfully'); } - catch (Exception $e) + catch (Exception $e) { // dd($e); $data['status'] = 'error'; $data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP failed.'); - } + } } else { $data['status'] = 'error'; $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); - } + } return response()->json($data); } @@ -639,7 +639,7 @@ class ProsesPenawaranController extends Controller }) ->select('id', 'name', 'code') // Pilih beberapa kolom sekaligus ->get(); - + $data['kjpps'] = $kjpps; $data['penawaran'] = $penawaran; $data['penawrandetails'] = $penawrandetails; @@ -676,7 +676,7 @@ class ProsesPenawaranController extends Controller if($checkActiveDateRange && ('proposal-tender'==$penawaran->status)) { try { - + $data['id']=$id; $dataDetailPenawaran = ['status' => '0', @@ -700,7 +700,7 @@ class ProsesPenawaranController extends Controller $data['status'] = 'error'; $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); // $data['message']['message_error'] = array("Penawaran sudah di tutup"); - } + } return response()->json($data); } @@ -714,7 +714,7 @@ class ProsesPenawaranController extends Controller $dataDetailPenawaran = array(); $pleaseCommit= true; if (request()->ajax()) { - + $validator = ProsesPenawaranController::rulesEditUlangnya($request, $id); if ($validator['fails']) { @@ -884,7 +884,7 @@ class ProsesPenawaranController extends Controller // cek apakah blm di approve (penawaran.status = proposal-tender) if($checkActiveDateRange && ('proposal-tender'==$penawaran->status)) { - try + try { $biaya_penawaran=""; if($request->biaya_penawaran) @@ -931,16 +931,16 @@ class ProsesPenawaranController extends Controller } PenawaranDetailTender::create($dataDetailPenawaran); - + $data['status'] = 'success'; $data['message'] ['message_success'] = array('Proses Tambah KJPP Ulang successfully'); } - catch (Exception $e) + catch (Exception $e) { dd($e); $data['status'] = 'error'; $data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP Ulang failed.'); - } + } } else { @@ -961,7 +961,7 @@ class ProsesPenawaranController extends Controller $permohonan = Permohonan::find($id); // dd($permohonan); $status = StatusPermohonan::all(); - $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); + $tujuan_penilaian_kjpp = TujuanPenilaian::all(); $jenis_laporan = JenisLaporan::all(); $kjpp = KJPP::all(); diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index f344f13..cdf6f97 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -68,6 +68,7 @@ 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; @@ -644,7 +645,7 @@ class SurveyorController extends Controller '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', + 'peruntukan', 'penawaran', 'telepon','hak_properti', 'kordinat_lat', 'kordinat_lng', 'jenis_aset','foto_objek' ]; @@ -693,8 +694,8 @@ class SurveyorController extends Controller $fields = [ 'address', 'village_code', 'district_code', 'city_code', 'province_code', 'luas_tanah', 'luas_tanah_bagunan', 'total', 'diskon', 'harga_diskon', - 'status_nara_sumber', 'harga', 'nama_nara_sumber', - 'kordinat_lat', 'kordinat_lng', 'jenis_aset', + 'status_nara_sumber', 'harga', 'nama_nara_sumber','hak_properti','telepon', + 'kordinat_lat', 'kordinat_lng', 'jenis_aset','penawaran', ]; $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) @@ -787,9 +788,13 @@ class SurveyorController extends Controller } // Fields lainnya dalam asset else { + if (!isset($dataForm['asset'][$field])) { + $dataForm['asset'][$field] = []; + } $dataForm['asset'][$field] = $newValue; } + $needsSave = true; } } @@ -1526,7 +1531,13 @@ class SurveyorController extends Controller $filteredRecords = $query->count(); // Get the data for the current page - $data = $query->get(); + + if ($type == 'Spek Bangunan') { + $data = $query->with(['bangunanKategori'])->get(); + }else{ + $data = $query->get(); + } + // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); @@ -1534,6 +1545,7 @@ class SurveyorController extends Controller // Calculate the current page number $currentPage = 0 + 1; + // Return the response data as a JSON object return response()->json([ 'draw' => $request->get('draw'), @@ -1663,6 +1675,7 @@ class SurveyorController extends Controller 'hubPenghuni' => HubunganPenghuniJaminan::all(), 'perkerasanJalan' => PerkerasanJalan::all(), 'terletakDiArea' => TerletakArea::all(), + 'tujuanPenilaian' => TujuanPenilaian::all() ]; } diff --git a/app/Http/Requests/FormSurveyorRequest.php b/app/Http/Requests/FormSurveyorRequest.php index fe19acf..701fb3a 100644 --- a/app/Http/Requests/FormSurveyorRequest.php +++ b/app/Http/Requests/FormSurveyorRequest.php @@ -110,8 +110,7 @@ class FormSurveyorRequest extends FormRequest 'nama_bangunan.*' => 'required|string|max:255', 'spek_kategori_bangunan.*' => 'nullable|string', - 'spek_bangunan.*.*' => 'array', - 'spek_bangunan.*.*.*' => 'string', + 'spek_bangunan.*.*.lainnya' => 'nullable|string', 'sarana_pelengkap' => 'required', 'sarana_pelengkap_input' => 'nullable|array', diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index d47b68e..0618829 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -163,4 +163,8 @@ { return $this->hasMany(DokumenJaminan::class); } + + public function pembatalan(){ + return $this->hasMany(PermohonanPembatalan::class); + } } diff --git a/app/Models/PermohonanPembatalan.php b/app/Models/PermohonanPembatalan.php new file mode 100644 index 0000000..1197b2f --- /dev/null +++ b/app/Models/PermohonanPembatalan.php @@ -0,0 +1,50 @@ + 'string', + ]; + + // Relationship with Permohonan + public function permohonan() + { + return $this->belongsTo(Permohonan::class, 'permohonan_id'); + } + + public function creator(){ + return $this->belongsTo(User::class, 'created_by'); + } + } diff --git a/app/Models/SpekBangunan.php b/app/Models/SpekBangunan.php index c471440..39ca9c1 100644 --- a/app/Models/SpekBangunan.php +++ b/app/Models/SpekBangunan.php @@ -20,7 +20,7 @@ class SpekBangunan extends Model public function bangunanKategori(){ - return $this->belongsTo(SpekKategoriBangunan::class, 'spek_kategori_bangunan_id'); + return $this->belongsTo(SpekKategoritBangunan::class, 'spek_kategori_bangunan_id'); } protected static function newFactory(): SpekBangunanFactory diff --git a/database/migrations/2024_12_22_140000_create_permohonan_pembatalans_table.php b/database/migrations/2024_12_22_140000_create_permohonan_pembatalans_table.php new file mode 100644 index 0000000..0046d05 --- /dev/null +++ b/database/migrations/2024_12_22_140000_create_permohonan_pembatalans_table.php @@ -0,0 +1,35 @@ +id(); + $table->unsignedBigInteger('permohonan_id'); + $table->text('alasan_pembatalan'); + $table->string('file_pembatalan'); + $table->enum('status', ['pending', 'approved', 'rejected'])->default('pending'); + $table->text('keterangan')->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + + $table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('cascade'); + }); + } + + public function down() + { + Schema::dropIfExists('permohonan_pembatalan'); + } +} diff --git a/module.json b/module.json index bc0647f..bcd7811 100644 --- a/module.json +++ b/module.json @@ -26,6 +26,18 @@ "pemohon-eo" ] }, + { + "title": "Pembatalan", + "path": "pembatalan", + "icon": "ki-filled ki-file-deleted text-lg text-danger", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-eo" + ] + }, { "title": "Persetujuan Penawaran", "path": "persetujuan-penawaran", @@ -179,7 +191,7 @@ { "title": "Authorization", "path": "authorization", - "icon": "ki-filled ki-security-user text-lg text-primary", + "icon": "ki-filled ki-security-user text-lg text-info", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index f38772e..0c24327 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -1,11 +1,22 @@