diff --git a/app/Exports/LaporanHasilPenilaianJaminanInternalExternalExport.php b/app/Exports/LaporanHasilPenilaianJaminanInternalExternalExport.php
new file mode 100644
index 0000000..b30e800
--- /dev/null
+++ b/app/Exports/LaporanHasilPenilaianJaminanInternalExternalExport.php
@@ -0,0 +1,288 @@
+request = $request;
+ }
+
+ public function collection()
+ {
+ $query = Permohonan::query();
+ $query = $query->where('status', 'done');
+
+ // Apply date range filter if provided
+ if ($this->request->has('start_date') || $this->request->has('end_date')) {
+ $query->whereBetween('tanggal_permohonan', [
+ $this->request->start_date ?? '1900-01-01',
+ $this->request->end_date ?? now()->toDateString()
+ ]);
+ }
+
+ // Apply branch filter if provided
+ if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
+ $query->where('branch_id', $this->request->branch_id);
+ }
+
+ if ($this->request->has('penilai_id') && !empty($this->request->penilai_id)) {
+ $request = $this->request; // Store in a local variable
+ $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($request) {
+ $q->where('user_id', $request->penilai_id);
+ });
+ }
+
+ // Apply search filter if provided
+ if ($this->request->has('search') && !empty($this->request->search)) {
+ $search = $this->request->search;
+ $query->where(function ($q) use ($search) {
+ $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
+ $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhere('status', 'LIKE', '%' . $search . '%');
+ });
+ }
+
+ // Default ordering
+ $query->orderBy('nomor_registrasi', 'asc');
+
+ return $query->get();
+ }
+
+ protected $rowNumber = 0;
+
+ public function map($permohonan): array
+ {
+ $this->rowNumber++;
+ $luas_tanah = 0;
+ $luas_bangunan = 0;
+ $nilai_tanah = 0;
+ $nilai_bangunan = 0;
+ $npw = 0;
+ $nilai_liquidasi = 0;
+
+ if (isset($permohonan->penilai->lpj)) {
+ $lpj = json_decode($permohonan->penilai->lpj, true);
+ $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0);
+
+ $luas_tanah = $lpj['luas_tanah'] ?? 0;
+ $luas_bangunan = $lpj['luas_bangunan'] ?? 0;
+ $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0);
+ $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0);
+ $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0);
+ }
+
+ return [
+ $this->rowNumber,
+ $permohonan->nomor_registrasi,
+ $permohonan->tanggal_permohonan,
+ $permohonan->debiture->branch->name,
+ $permohonan->creator->name,
+ $permohonan->debiture->cif,
+ $permohonan->debiture->name,
+ $permohonan->jenisPenilaian->name,
+ $permohonan->tujuanPenilaian->name,
+ $permohonan->jenisFasilitasKredit->name,
+ $permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '),
+ $permohonan->documents->map(function ($document) {
+ return formatAlamat($document);
+ })->unique()->implode(', '),
+ $permohonan->documents->flatMap(function ($document) {
+ return $document->detail->map(function ($detail) {
+ return (!empty($detail->dokumen_nomor) && is_array($detail->dokumen_nomor))
+ ? ($detail->jenisLegalitasJaminan->name ?? '') . "\n" . implode(', ', $detail->dokumen_nomor)
+ : null;
+ });
+ })->filter()->unique()->implode(', '),
+ $permohonan->documents->pluck('pemilik.name')->unique()->implode(', '),
+ $luas_tanah . ' m²',
+ formatRupiah($nilai_tanah, 2),
+ $luas_bangunan . ' m²',
+ formatRupiah($nilai_bangunan, 2),
+ formatRupiah($permohonan->nilai_njop ?? 0, 2),
+ formatRupiah($npw, 2),
+ formatRupiah($nilai_liquidasi, 2),
+ $permohonan->documents->map(function ($document) {
+ return formatTanggalIndonesia($document->created_at);
+ })->first(),
+ '', // tanggal_spk
+ '', // nomor_spk
+ '', // tanggal_rencana_kunjungan
+ $permohonan->penilaian->tanggal_kunjungan ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '',
+ '', // tanggal_delivered
+ '', // jangka_waktu_sla
+ ($permohonan->approval_dd_at || $permohonan->approval_eo_at) ?
+ formatTanggalIndonesia($permohonan->approval_dd_at ?? $permohonan->approval_eo_at) : '',
+ $permohonan->penilaian->tanggal_kunjungan ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '',
+ $permohonan->penilaian->_user_penilai->userPenilaiTeam->name ?? '',
+ $permohonan->penilaian->teams ?? '',
+ '', // saran
+ '' // catatan
+ ];
+ }
+
+ public function headings(): array
+ {
+ return [
+ 'No',
+ 'Nomor Registrasi',
+ 'Tanggal Permohonan',
+ 'Cabang',
+ 'Pemohon',
+ 'CIF',
+ 'Nama Debitur',
+ 'Jenis Penilaian',
+ 'Tujuan Penilaian',
+ 'Jenis Fasilitas Kredit',
+ 'Jenis Agunan',
+ 'Alamat Agunan',
+ 'Bukti Kepemilikan',
+ 'Nama Pemilik',
+ 'Luas Tanah',
+ 'Nilai Tanah',
+ 'Luas Bangunan',
+ 'Nilai Bangunan',
+ 'Nilai NJOP',
+ 'Nilai Pasar Wajar',
+ 'Nilai Likuidasi',
+ 'Tanggal Dokumen Diterima',
+ 'Tanggal SPK',
+ 'Nomor SPK',
+ 'Tanggal Rencana Kunjungan',
+ 'Tanggal Kunjungan',
+ 'Tanggal Delivered',
+ 'Jangka Waktu SLA',
+ 'Tanggal Laporan',
+ 'Tanggal Review',
+ 'Nama Penilai',
+ 'Nama Team Leader',
+ 'Saran',
+ 'Catatan'
+ ];
+ }
+
+ /**
+ * @return string
+ */
+ public function title(): string
+ {
+ return 'Laporan Hasil Penilaian Jaminan Internal & External';
+ }
+
+ /**
+ * @return string
+ */
+ public function startCell(): string
+ {
+ return 'A7';
+ }
+
+ /**
+ * @return array
+ */
+ public function registerEvents(): array
+ {
+ return [
+ AfterSheet::class => function(AfterSheet $event) {
+ // Get the sheet
+ $sheet = $event->sheet->getDelegate();
+
+ // Set the title
+ $sheet->setCellValue('A1', 'LAPORAN PENILAIAN JAMINAN');
+ $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16);
+
+ // Merge cells for title
+ $sheet->mergeCells('A1:AH1');
+ $sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+
+ // Set the branch information if filtered
+ $branchInfo = '';
+ if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
+ $branch = Branch::find($this->request->branch_id);
+ if ($branch) {
+ $branchInfo = 'Cabang: ' . $branch->name;
+ $sheet->setCellValue('A2', $branchInfo);
+ $sheet->mergeCells('A2:AH2');
+ $sheet->getStyle('A2')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+ $sheet->getStyle('A2')->getFont()->setBold(true);
+ }
+ }
+
+ // Set the period
+ $startDate = $this->request->start_date ?? '';
+ $endDate = $this->request->end_date ?? '';
+
+ $rowIndex = $branchInfo ? 3 : 2;
+
+ if ($startDate && $endDate) {
+ $startDateFormatted = Carbon::parse($startDate)->format('d F Y');
+ $endDateFormatted = Carbon::parse($endDate)->format('d F Y');
+ $sheet->setCellValue('A' . $rowIndex, 'Periode: ' . $startDateFormatted . ' - ' . $endDateFormatted);
+ } else {
+ $sheet->setCellValue('A' . $rowIndex, 'Periode: Semua Data');
+ }
+ $sheet->mergeCells('A' . $rowIndex . ':AH' . $rowIndex);
+ $sheet->getStyle('A' . $rowIndex)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+
+ // Set the date of export
+ $rowIndex++;
+ $sheet->setCellValue('A' . $rowIndex, 'Tanggal Export: ' . Carbon::now()->format('d F Y H:i:s'));
+
+ // Set the user who exported
+ $rowIndex++;
+ $userName = Auth::user() ? Auth::user()->name : 'System';
+ $sheet->setCellValue('A' . $rowIndex, 'Diexport oleh: ' . $userName);
+
+ // Add a blank line
+ $rowIndex++;
+ $sheet->setCellValue('A' . $rowIndex, '');
+
+ // Style the header row
+ $headerRange = 'A7:' . $sheet->getHighestColumn() . '7';
+ $sheet->getStyle($headerRange)->getFont()->setBold(true);
+ $sheet->getStyle($headerRange)->getFill()
+ ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
+ ->getStartColor()->setARGB('FFCCCCCC');
+
+ // Auto-size columns - fixed to handle columns beyond Z
+ $highestColumn = $sheet->getHighestColumn();
+ $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);
+
+ for ($i = 1; $i <= $highestColumnIndex; $i++) {
+ $currentColumn = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($i);
+ $sheet->getColumnDimension($currentColumn)->setAutoSize(true);
+ }
+
+ // Add borders to all cells with data
+ $dataRange = 'A7:' . $sheet->getHighestColumn() . $sheet->getHighestRow();
+ $sheet->getStyle($dataRange)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
+
+ // Center align the header row
+ $sheet->getStyle($headerRange)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+
+ // Set text wrap for header cells
+ $sheet->getStyle($headerRange)->getAlignment()->setWrapText(true);
+ },
+ ];
+ }
+ }
diff --git a/app/Exports/LaporanPembatalanExport.php b/app/Exports/LaporanPembatalanExport.php
new file mode 100644
index 0000000..b44afe2
--- /dev/null
+++ b/app/Exports/LaporanPembatalanExport.php
@@ -0,0 +1,102 @@
+request = $request;
+ }
+
+ public function collection()
+ {
+ $query = PermohonanPembatalan::where('status', 'batal');
+
+ if (!Auth::user()->hasAnyRole(['administrator'])) {
+ $query = $query->whereHas('permohonan', function ($q) {
+ $q->where('branch_id', Auth::user()->branch_id);
+ });
+ }
+
+ // Apply search filter if provided
+ if ($this->request->has('search') && !empty($this->request->get('search'))) {
+ $search = $this->request->get('search');
+ $query->where(function ($q) use ($search) {
+ $q->whereHas('permohonan', function ($subq) use ($search) {
+ $subq->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
+ $subq->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
+ $subq->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
+ });
+ $q->orWhere('alasan', 'LIKE', '%' . $search . '%');
+ $q->orWhere('status', 'LIKE', '%' . $search . '%');
+ });
+ }
+
+ // Filter by date range if provided
+ if ($this->request->has('start_date') || $this->request->has('end_date')) {
+ $query->whereBetween('created_at', [
+ $this->request->get('start_date') ?? '1900-01-01',
+ $this->request->get('end_date') ?? now()->toDateString()
+ ]);
+ }
+
+ // Filter by status if provided
+ if ($this->request->has('status') && !empty($this->request->get('status'))) {
+ $query->where('status', $this->request->get('status'));
+ }
+
+ // Filter by branch if provided
+ if ($this->request->has('branch_id') && !empty($this->request->get('branch_id'))) {
+ $query->whereHas('permohonan', function ($q) {
+ $q->where('branch_id', $this->request->get('branch_id'));
+ });
+ }
+
+ return $query->orderBy('created_at', 'desc')
+ ->get();
+ }
+
+ public function headings(): array
+ {
+ return [
+ 'No. Registrasi',
+ 'Tanggal Permohonan',
+ 'Tanggal Pembatalan',
+ 'Cabang',
+ 'Pemohon',
+ 'Debitur',
+ 'Alasan Pembatalan',
+ 'Status',
+ 'Diajukan Oleh',
+ 'Disetujui Oleh',
+ 'Tanggal Disetujui'
+ ];
+ }
+
+ public function map($pembatalan): array
+ {
+ return [
+ $pembatalan->permohonan->nomor_registrasi ?? '-',
+ $pembatalan->permohonan->tanggal_permohonan ? date('d-m-Y', strtotime($pembatalan->permohonan->tanggal_permohonan)) : '-',
+ date('d-m-Y', strtotime($pembatalan->created_at)),
+ $pembatalan->permohonan->branch->name ?? '-',
+ $pembatalan->permohonan->user->name ?? '-',
+ $pembatalan->permohonan->debiture->name ?? '-',
+ $pembatalan->alasan_pembatalan,
+ $pembatalan->status,
+ $pembatalan->user->name ?? '-',
+ $pembatalan->authorized_by ? $pembatalan->authorizedUser->name : '-',
+ $pembatalan->authorized_at ? formatTanggalIndonesia(strtotime($pembatalan->authorized_at),1) : '-'
+ ];
+ }
+ }
diff --git a/app/Exports/LaporanPenilaianJaminanExport.php b/app/Exports/LaporanPenilaianJaminanExport.php
new file mode 100644
index 0000000..1e063fa
--- /dev/null
+++ b/app/Exports/LaporanPenilaianJaminanExport.php
@@ -0,0 +1,245 @@
+request = $request;
+ }
+
+ public function collection()
+ {
+ $query = Permohonan::query();
+ $query = $query->where('status', 'done');
+
+ // Apply date range filter if provided
+ if ($this->request->has('start_date') || $this->request->has('end_date')) {
+ $query->whereBetween('tanggal_permohonan', [
+ $this->request->start_date ?? '1900-01-01',
+ $this->request->end_date ?? now()->toDateString()
+ ]);
+ }
+
+ // Apply branch filter if provided
+ if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
+ $query->where('branch_id', $this->request->branch_id);
+ }
+
+ if ($this->request->has('penilai_id') && !empty($this->request->penilai_id)) {
+ $request = $this->request; // Store in a local variable
+ $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($request) {
+ $q->where('user_id', $request->penilai_id);
+ });
+ }
+
+ // Apply search filter if provided
+ if ($this->request->has('search') && !empty($this->request->search)) {
+ $search = $this->request->search;
+ $query->where(function ($q) use ($search) {
+ $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
+ $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%');
+ $q->orWhere('status', 'LIKE', '%' . $search . '%');
+ });
+ }
+
+ // Default ordering
+ $query->orderBy('nomor_registrasi', 'asc');
+
+ return $query->with(['debiture.branch'])->get();
+ }
+
+ protected $rowNumber = 0;
+
+ public function map($permohonan): array
+ {
+ $this->rowNumber++;
+ $luas_tanah = 0;
+ $luas_bangunan = 0;
+ $nilai_tanah = 0;
+ $nilai_bangunan = 0;
+ $npw = 0;
+ $nilai_liquidasi = 0;
+
+ if (isset($permohonan->penilai->lpj)) {
+ $lpj = json_decode($permohonan->penilai->lpj, true);
+ $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0);
+
+ $luas_tanah = $lpj['luas_tanah'] ?? 0;
+ $luas_bangunan = $lpj['luas_bangunan'] ?? 0;
+ $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0);
+ $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0);
+ $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0);
+ }
+
+ return [
+ $this->rowNumber,
+ $permohonan->nomor_registrasi,
+ $permohonan->tanggal_permohonan,
+ $permohonan->debiture->branch->name,
+ $permohonan->debiture->name,
+ $permohonan->creator->name,
+ $permohonan->tujuanPenilaian->name,
+ $permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '),
+ $permohonan->documents->map(function ($document) {
+ return formatAlamat($document);
+ })->unique()->implode(', '),
+ $luas_tanah . ' m²',
+ formatRupiah($nilai_tanah, 2),
+ $luas_bangunan . ' m²',
+ formatRupiah($nilai_bangunan, 2),
+ ($permohonan->approval_dd_at || $permohonan->approval_eo_at) ?
+ formatTanggalIndonesia($permohonan->approval_dd_at ?? $permohonan->approval_eo_at) : '',
+ $permohonan->penilaian->tanggal_kunjungan ?
+ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '',
+ formatRupiah($npw, 2),
+ formatRupiah($nilai_liquidasi, 2),
+ $permohonan->penilaian->_user_penilai->userPenilaiTeam->name,
+ ];
+ }
+
+ public function headings(): array
+ {
+ return [
+ 'No',
+ 'Nomor Registrasi',
+ 'Tanggal Permohonan',
+ 'Cabang',
+ 'Nama Debitur',
+ 'Pemohon',
+ 'Tujuan Penilaian',
+ 'Jenis Agunan',
+ 'Alamat Agunan',
+ 'Luas Tanah',
+ 'Nilai Tanah',
+ 'Luas Bangunan',
+ 'Nilai Bangunan',
+ 'Tanggal Laporan',
+ 'Tanggal Review',
+ 'Nilai Pasar Wajar',
+ 'Nilai Likuidasi',
+ 'Nama Penilai',
+ ];
+ }
+
+ /**
+ * @return string
+ */
+ public function title(): string
+ {
+ return 'Laporan Penilaian Jaminan';
+ }
+
+ /**
+ * @return string
+ */
+ public function startCell(): string
+ {
+ return 'A7';
+ }
+
+ /**
+ * @return array
+ */
+ public function registerEvents(): array
+ {
+ return [
+ AfterSheet::class => function(AfterSheet $event) {
+ // Get the sheet
+ $sheet = $event->sheet->getDelegate();
+
+ // Set the title
+ $sheet->setCellValue('A1', 'LAPORAN PENILAIAN JAMINAN');
+ $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16);
+
+ // Merge cells for title
+ $sheet->mergeCells('A1:R1');
+ $sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+
+ // Set the branch information if filtered
+ $branchInfo = '';
+ if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
+ $branch = Branch::find($this->request->branch_id);
+ if ($branch) {
+ $branchInfo = 'Cabang: ' . $branch->name;
+ $sheet->setCellValue('A2', $branchInfo);
+ $sheet->mergeCells('A2:R2');
+ $sheet->getStyle('A2')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+ $sheet->getStyle('A2')->getFont()->setBold(true);
+ }
+ }
+
+ // Set the period
+ $startDate = $this->request->start_date ?? '';
+ $endDate = $this->request->end_date ?? '';
+
+ $rowIndex = $branchInfo ? 3 : 2;
+
+ if ($startDate && $endDate) {
+ $startDateFormatted = Carbon::parse($startDate)->format('d F Y');
+ $endDateFormatted = Carbon::parse($endDate)->format('d F Y');
+ $sheet->setCellValue('A' . $rowIndex, 'Periode: ' . $startDateFormatted . ' - ' . $endDateFormatted);
+ } else {
+ $sheet->setCellValue('A' . $rowIndex, 'Periode: Semua Data');
+ }
+ $sheet->mergeCells('A' . $rowIndex . ':R' . $rowIndex);
+ $sheet->getStyle('A' . $rowIndex)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+
+ // Set the date of export
+ $rowIndex++;
+ $sheet->setCellValue('A' . $rowIndex, 'Tanggal Export: ' . Carbon::now()->format('d F Y H:i:s'));
+
+ // Set the user who exported
+ $rowIndex++;
+ $userName = Auth::user() ? Auth::user()->name : 'System';
+ $sheet->setCellValue('A' . $rowIndex, 'Diexport oleh: ' . $userName);
+
+ // Add a blank line
+ $rowIndex++;
+ $sheet->setCellValue('A' . $rowIndex, '');
+
+ // Style the header row
+ $headerRange = 'A7:' . $sheet->getHighestColumn() . '7';
+ $sheet->getStyle($headerRange)->getFont()->setBold(true);
+ $sheet->getStyle($headerRange)->getFill()
+ ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
+ ->getStartColor()->setARGB('FFCCCCCC');
+
+ // Auto-size columns
+ foreach(range('A', $sheet->getHighestColumn()) as $column) {
+ $sheet->getColumnDimension($column)->setAutoSize(true);
+ }
+
+ // Add borders to all cells with data
+ $dataRange = 'A7:' . $sheet->getHighestColumn() . $sheet->getHighestRow();
+ $sheet->getStyle($dataRange)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
+
+ // Center align the header row
+ $sheet->getStyle($headerRange)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+
+ // Set text wrap for header cells
+ $sheet->getStyle($headerRange)->getAlignment()->setWrapText(true);
+ },
+ ];
+ }
+ }
diff --git a/app/Exports/LaporanPermohonanExport.php b/app/Exports/LaporanPermohonanExport.php
index e7f4f1d..96cd369 100644
--- a/app/Exports/LaporanPermohonanExport.php
+++ b/app/Exports/LaporanPermohonanExport.php
@@ -19,8 +19,7 @@
public function collection()
{
- $query = Permohonan::with(['user', 'branch', 'tujuanPenilaian', 'jenisFasilitasKredit', 'jenisPenilaian'])
- ->select('permohonan.*');
+ $query = Permohonan::query();
// Apply role-based filtering
if (!Auth::user()->hasAnyRole(['administrator'])) {
diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php
index b51161f..67ca619 100644
--- a/app/Helpers/Lpj.php
+++ b/app/Helpers/Lpj.php
@@ -1,560 +1,580 @@
translatedFormat('d F Y');
+ function formatTanggalIndonesia($date, $time = false)
+ {
+ Carbon::setLocale('id');
+ try {
+ $waktu = Carbon::parse($date);
+ if (!$time) {
+ return $waktu->translatedFormat('d F Y');
+ }
+ return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB';
+ } catch (Throwable $e) {
+ return $date;
}
- return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB';
- } catch (\Throwable $e) {
- return $date;
+
}
-}
+
+ function formatRupiah($number, $decimals = 0)
+ {
+ $number = (float) $number;
+ return 'Rp ' . number_format($number, $decimals, ',', '.');
+ }
-function formatRupiah($number,$decimals = 0)
-{
- $number = (float) $number;
- return 'Rp ' . number_format($number, $decimals, ',', '.');
-}
+ function formatAlamat($alamat)
+ {
+ return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->village->postal_code ?? '');
+ }
+ // andy add
+ function checkActiveDateRangePenawaran($id)
+ {
+ $penawaran = PenawaranTender::find($id);
-function formatAlamat($alamat)
-{
- return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->village->postal_code ?? '');
-}
+ $start_date = strtotime($penawaran->start_date);
+ $end_date = strtotime($penawaran->end_date);
+ $todays_date = strtotime(now());
+ //$todays_date = strtotime("+1 day", strtotime(now()));
-// andy add
-function checkActiveDateRangePenawaran($id)
-{
- $penawaran = PenawaranTender::find($id);
-
- $start_date = strtotime($penawaran->start_date);
- $end_date = strtotime($penawaran->end_date);
- $todays_date = strtotime(now());
- //$todays_date = strtotime("+1 day", strtotime(now()));
-
- $allow = true;
- if ($todays_date >= $start_date && $todays_date <= $end_date) {
- //Penawaran dibuka
$allow = true;
- } else {
- if ($todays_date < $start_date) {
- //Penawaran Belum dibuka
+ if ($todays_date >= $start_date && $todays_date <= $end_date) {
+ //Penawaran dibuka
$allow = true;
} else {
- //Penawaran sudah ditutup
+ if ($todays_date < $start_date) {
+ //Penawaran Belum dibuka
+ $allow = true;
+ } else {
+ //Penawaran sudah ditutup
+ $allow = false;
+ }
+ }
+
+ return $allow;
+ }
+
+ function checkKelengkapanDetailKJPP($id)
+ {
+ $allow = true;
+ // DB::enableQueryLog();
+ // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap?
+ $query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where(
+ function ($query) {
+ // no_proposal
+ $query->orWhere('no_proposal', '', "");
+ $query->orWhereNull('no_proposal');
+
+ // tgl_proposal
+ $query->orWhere('tgl_proposal', '', "");
+ $query->orWhereNull('tgl_proposal');
+
+ $query->orWhere('biaya_penawaran', '', "");
+ $query->orWhereNull('biaya_penawaran');
+
+ $query->orWhere('attachment', '', "");
+ $query->orWhereNull('attachment');
+
+ $query->orWhere('dokumen_persetujuan', '', "");
+ $query->orWhereNull('dokumen_persetujuan');
+ },
+ )->get();
+ // $sql = DB::getQueryLog();
+
+
+ if (sizeof($query) > 0) {
$allow = false;
}
+
+ return $allow;
}
- return $allow;
-}
+ // convert
+ function convertSlug($slug)
+ {
+ $words = explode('-', $slug);
-function checkKelengkapanDetailKJPP($id)
-{
- $allow = true;
- // DB::enableQueryLog();
- // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap?
- $query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where(
- function ($query) {
- // no_proposal
- $query->orWhere('no_proposal', '', "");
- $query->orWhereNull('no_proposal');
+ foreach ($words as $index => $word) {
+ $words[$index] = strtoupper($word);
+ }
- // tgl_proposal
- $query->orWhere('tgl_proposal', '', "");
- $query->orWhereNull('tgl_proposal');
-
- $query->orWhere('biaya_penawaran', '', "");
- $query->orWhereNull('biaya_penawaran');
-
- $query->orWhere('attachment', '', "");
- $query->orWhereNull('attachment');
-
- $query->orWhere('dokumen_persetujuan', '', "");
- $query->orWhereNull('dokumen_persetujuan');
- },
- )->get();
- // $sql = DB::getQueryLog();
-
-
- if (sizeof($query) > 0) {
- $allow = false;
+ return implode(' ', $words);
}
- return $allow;
-}
+ // generate last penawaran.code
+ function onLastnumberCodePenawaran()
+ : string
+ {
+ // ambil code terakhir
+ $maxCode = PenawaranTender::max('code');
+ // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
+ // $penawaran = PenawaranTender::latest()->first();
+ $penawaran = PenawaranTender::where('code', '=', $maxCode)->first();
+ $code_penawaran_last = '';
-// convert
-function convertSlug($slug)
-{
- $words = explode('-', $slug);
-
- foreach ($words as $index => $word) {
- $words[$index] = strtoupper($word);
- }
-
- return implode(' ', $words);
-}
-
-// generate last penawaran.code
-function onLastnumberCodePenawaran(): string
-{
- // ambil code terakhir
- $maxCode = PenawaranTender::max('code');
- // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
- // $penawaran = PenawaranTender::latest()->first();
- $penawaran = PenawaranTender::where('code', '=', $maxCode)->first();
- $code_penawaran_last = '';
-
- // nomor di set 0001
- $noUrutAkhirString = sprintf("%04s", 1);
- if ($penawaran) {
- $isNum = substr($maxCode, 2); // memastikan string ke 3 s/d 8 adalan numiric
- $isNP = substr($maxCode, 0, 2);
- if ((8 == strlen($maxCode)) && ("NP" == $isNP) && (isNumeric($isNum))) {
- $code_penawaran_last = substr($maxCode, -4);
- $year_penawaran_last = Carbon::parse($penawaran->created_at)->year;
- $year_now = Carbon::now()->year;
- if ($year_now == $year_penawaran_last) {
- $noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
+ // nomor di set 0001
+ $noUrutAkhirString = sprintf("%04s", 1);
+ if ($penawaran) {
+ $isNum = substr($maxCode, 2); // memastikan string ke 3 s/d 8 adalan numiric
+ $isNP = substr($maxCode, 0, 2);
+ if ((8 == strlen($maxCode)) && ("NP" == $isNP) && (isNumeric($isNum))) {
+ $code_penawaran_last = substr($maxCode, -4);
+ $year_penawaran_last = Carbon::parse($penawaran->created_at)->year;
+ $year_now = Carbon::now()->year;
+ if ($year_now == $year_penawaran_last) {
+ $noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
+ }
+ // jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 0001
}
- // jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 0001
+
+ }
+
+ return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
+ }
+
+ function isNumeric($str)
+ {
+ return ctype_digit($str);
+ }
+
+ // generate last penawaran.no_spk
+ function onLastnumberCodePenawaranSPK($jenis_laporan_code)
+ : string
+ {
+
+ // 20241124_001 ==> spk_no_core
+ // XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024
+ // 001 / PJ / JKT / XI / FR / 2024
+ $maxCode = PenawaranTender::max('spk_no_core');
+ $penawaran = PenawaranTender::where('spk_no_core', '=', $maxCode)->first();
+ $no_spk_penawaran_last = '';
+ $year_penawaran_last = '';
+ $year_now = Carbon::now()->year;
+ // nomor di set 001
+ $noUrutAkhirString = sprintf("%03s", 1);
+ if ($penawaran) {
+ $no_spk_penawaran_last = substr($maxCode, -3);
+ $year_penawaran_last = substr($maxCode, 0, 4);
+
+ if ($year_now == $year_penawaran_last) {
+ $noUrutAkhirString = sprintf("%03s", abs($no_spk_penawaran_last + 1));
+ }
+ // jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 001
+ }
+
+ $month = onRomawi(Carbon::now()->month);
+
+ $lastSPK = $noUrutAkhirString . ' / PJ / JKT / ' . $month . ' / ' . $jenis_laporan_code . ' / ' . $year_now;
+ return $lastSPK;
+ }
+
+ function onRomawi(int $bln)
+ : string
+ {
+ switch ($bln) {
+ case 1:
+ return "I";
+ break;
+ case 2:
+ return "II";
+ break;
+ case 3:
+ return "III";
+ break;
+ case 4:
+ return "IV";
+ break;
+ case 5:
+ return "V";
+ break;
+ case 6:
+ return "VI";
+ break;
+ case 7:
+ return "VII";
+ break;
+ case 8:
+ return "VIII";
+ break;
+ case 9:
+ return "IX";
+ break;
+ case 10:
+ return "X";
+ break;
+ case 11:
+ return "XI";
+ break;
+ case 12:
+ return "XII";
+ break;
+
}
}
- return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
-}
-
-function isNumeric($str)
-{
- return ctype_digit($str);
-}
-
-// generate last penawaran.no_spk
-function onLastnumberCodePenawaranSPK($jenis_laporan_code): string
-{
-
- // 20241124_001 ==> spk_no_core
- // XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024
- // 001 / PJ / JKT / XI / FR / 2024
- $maxCode = PenawaranTender::max('spk_no_core');
- $penawaran = PenawaranTender::where('spk_no_core', '=', $maxCode)->first();
- $no_spk_penawaran_last = '';
- $year_penawaran_last = '';
- $year_now = Carbon::now()->year;
- // nomor di set 001
- $noUrutAkhirString = sprintf("%03s", 1);
- if ($penawaran) {
- $no_spk_penawaran_last = substr($maxCode, -3);
- $year_penawaran_last = substr($maxCode, 0, 4);
-
- if ($year_now == $year_penawaran_last) {
- $noUrutAkhirString = sprintf("%03s", abs($no_spk_penawaran_last + 1));
+ function penyebut($nilai)
+ {
+ $nilai = abs($nilai);
+ $huruf = [
+ "",
+ "satu",
+ "dua",
+ "tiga",
+ "empat",
+ "lima",
+ "enam",
+ "tujuh",
+ "delapan",
+ "sembilan",
+ "sepuluh",
+ "sebelas"
+ ];
+ $temp = "";
+ if ($nilai < 12) {
+ $temp = " " . $huruf[$nilai];
+ } else if ($nilai < 20) {
+ $temp = penyebut($nilai - 10) . " belas";
+ } else if ($nilai < 100) {
+ $temp = penyebut($nilai / 10) . " puluh" . penyebut($nilai % 10);
+ } else if ($nilai < 200) {
+ $temp = " seratus" . penyebut($nilai - 100);
+ } else if ($nilai < 1000) {
+ $temp = penyebut($nilai / 100) . " ratus" . penyebut($nilai % 100);
+ } else if ($nilai < 2000) {
+ $temp = " seribu" . penyebut($nilai - 1000);
+ } else if ($nilai < 1000000) {
+ $temp = penyebut($nilai / 1000) . " ribu" . penyebut($nilai % 1000);
+ } else if ($nilai < 1000000000) {
+ $temp = penyebut($nilai / 1000000) . " juta" . penyebut($nilai % 1000000);
+ } else if ($nilai < 1000000000000) {
+ $temp = penyebut($nilai / 1000000000) . " milyar" . penyebut(fmod($nilai, 1000000000));
+ } else if ($nilai < 1000000000000000) {
+ $temp = penyebut($nilai / 1000000000000) . " trilyun" . penyebut(fmod($nilai, 1000000000000));
}
- // jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 001
+ return $temp;
}
- $month = onRomawi(Carbon::now()->month);
-
- $lastSPK = $noUrutAkhirString.' / PJ / JKT / '. $month .' / ' .$jenis_laporan_code.' / '.$year_now;
- return $lastSPK;
-}
-
-function onRomawi(int $bln): string
-{
- switch ($bln) {
- case 1:
- return "I";
- break;
- case 2:
- return "II";
- break;
- case 3:
- return "III";
- break;
- case 4:
- return "IV";
- break;
- case 5:
- return "V";
- break;
- case 6:
- return "VI";
- break;
- case 7:
- return "VII";
- break;
- case 8:
- return "VIII";
- break;
- case 9:
- return "IX";
- break;
- case 10:
- return "X";
- break;
- case 11:
- return "XI";
- break;
- case 12:
- return "XII";
- break;
-
- }
-
-}
-
-function penyebut($nilai)
-{
- $nilai = abs($nilai);
- $huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas");
- $temp = "";
- if ($nilai < 12) {
- $temp = " ". $huruf[$nilai];
- } elseif ($nilai < 20) {
- $temp = penyebut($nilai - 10). " belas";
- } elseif ($nilai < 100) {
- $temp = penyebut($nilai / 10)." puluh". penyebut($nilai % 10);
- } elseif ($nilai < 200) {
- $temp = " seratus" . penyebut($nilai - 100);
- } elseif ($nilai < 1000) {
- $temp = penyebut($nilai / 100) . " ratus" . penyebut($nilai % 100);
- } elseif ($nilai < 2000) {
- $temp = " seribu" . penyebut($nilai - 1000);
- } elseif ($nilai < 1000000) {
- $temp = penyebut($nilai / 1000) . " ribu" . penyebut($nilai % 1000);
- } elseif ($nilai < 1000000000) {
- $temp = penyebut($nilai / 1000000) . " juta" . penyebut($nilai % 1000000);
- } elseif ($nilai < 1000000000000) {
- $temp = penyebut($nilai / 1000000000) . " milyar" . penyebut(fmod($nilai, 1000000000));
- } elseif ($nilai < 1000000000000000) {
- $temp = penyebut($nilai / 1000000000000) . " trilyun" . penyebut(fmod($nilai, 1000000000000));
- }
- return $temp;
-}
-
-function terbilang($nilai)
-{
- if ($nilai < 0) {
- $hasil = "minus ". trim(penyebut($nilai));
- } else {
- $hasil = trim(penyebut($nilai));
- }
- return $hasil;
-}
-// andy add
-
-
-function hitungHariKerja($tanggalMulai, $tanggalSelesai)
-{
- $tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay();
- $tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay();
-
- $hariKerja = 0;
- $tanggalSekarang = $tanggalMulai->copy();
-
- while ($tanggalSekarang <= $tanggalSelesai) {
- // Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur
- if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), holidays())) {
- $hariKerja++;
+ function terbilang($nilai)
+ {
+ if ($nilai < 0) {
+ $hasil = "minus " . trim(penyebut($nilai));
+ } else {
+ $hasil = trim(penyebut($nilai));
}
- $tanggalSekarang->addDay();
+ return $hasil;
}
- return $hariKerja;
-}
+ // andy add
-function holidays()
-{
- return HolidayCalendar::pluck('date')->map(
- function ($item) {
- return Carbon::parse($item)->format('Y-m-d');
- },
- )->toArray();
-}
-function countPermohonanForUser($userId)
-{
- $validStatuses = [
- 'assign',
- 'survey-completed',
- 'proses-laporan',
- 'paparan',
- 'proses-paparan',
- 'revisi-laporan',
- 'revisi-paparan',
- 'survey',
- 'proses-survey',
- 'request-reschedule',
- 'reschedule',
- 'rejected-reschedule',
- 'approved-reschedule',
- 'revisi-survey',
- 'revisi-pembayaran'
- ];
+ function hitungHariKerja($tanggalMulai, $tanggalSelesai)
+ {
+ $tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay();
+ $tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay();
- $result = Penilaian::whereHas('userPenilai', function ($query) use ($userId) {
- $query->where('user_id', $userId);
- })
- ->whereHas('permohonan', function ($query) use ($validStatuses) {
- $query->whereIn('status', $validStatuses);
+ $hariKerja = 0;
+ $tanggalSekarang = $tanggalMulai->copy();
+
+ while ($tanggalSekarang <= $tanggalSelesai) {
+ // Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur
+ if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), holidays())) {
+ $hariKerja++;
+ }
+ $tanggalSekarang->addDay();
+ }
+
+ return $hariKerja;
+ }
+
+ function holidays()
+ {
+ return HolidayCalendar::pluck('date')->map(
+ function ($item) {
+ return Carbon::parse($item)->format('Y-m-d');
+ },
+ )->toArray();
+ }
+
+ function countPermohonanForUser($userId)
+ {
+ $validStatuses = [
+ 'assign',
+ 'survey-completed',
+ 'proses-laporan',
+ 'paparan',
+ 'proses-paparan',
+ 'revisi-laporan',
+ 'revisi-paparan',
+ 'survey',
+ 'proses-survey',
+ 'request-reschedule',
+ 'reschedule',
+ 'rejected-reschedule',
+ 'approved-reschedule',
+ 'revisi-survey',
+ 'revisi-pembayaran'
+ ];
+
+ $result = Penilaian::whereHas('userPenilai', function ($query) use ($userId) {
+ $query->where('user_id', $userId);
})
- ->get()
- ->groupBy(function ($item) {
- // Pastikan mengakses properti dari model yang valid
- return $item->userPenilai->first()->user_id . '-' . $item->permohonan->id;
- })
- ->map(function ($group) {
- return [
- 'statuses' => $group->pluck('permohonan.status')->unique()->values()->all(),
- ];
- });
+ ->whereHas('permohonan', function ($query) use ($validStatuses) {
+ $query->whereIn('status', $validStatuses);
+ })
+ ->get()
+ ->groupBy(function ($item) {
+ // Pastikan mengakses properti dari model yang valid
+ return $item->userPenilai->first()->user_id . '-' . $item->permohonan->id;
+ })
+ ->map(function ($group) {
+ return [
+ 'statuses' => $group->pluck('permohonan.status')->unique()->values()->all(),
+ ];
+ });
- return $result->count();
-}
-
-
-function getMaxFileSize($jenis)
-{
- $jenisDokumen = JenisDokumen::where('name', $jenis)->first();
- if (!$jenisDokumen) {
- return 2048;
- }
- //konversi ke KB (1 MB = 1024 KB)
- $maxSizeInKB = (int) $jenisDokumen->max_size * 1024;
-
- return $maxSizeInKB;
-}
-
-function getUser($userId)
-{
- return User::find($userId);
-}
-
-function generateLpjUniqueCode($randomLength = 6)
-{
-
- $year = date('y');
- $month = str_pad(date('m'), 2, '0', STR_PAD_LEFT);
- $day = str_pad(date('d'), 2, '0', STR_PAD_LEFT);
-
- // Generate random numbers
- $randomNumber = str_pad(mt_rand(0, pow(10, $randomLength) - 1), $randomLength, '0', STR_PAD_LEFT);
-
- // Concatenate components to create the custom code
- return $year . $month . $day . $randomNumber;
-}
-
-function checkRegionUserName($userId)
-{
- $region = TeamsUsers::where('user_id', $userId)->first();
- if ($region) {
- return $region->team->regions->name;
- } else {
- return null;
- }
-}
-
-function getNomorLaporan($permohonanId, $documentId, $type = 'nomor_laporan')
-{
-
- $laporan = Laporan::where([
- 'permohonan_id' => $permohonanId,
- 'dokumen_jaminan_id' => $documentId,
- ])->first();
-
- if (!$laporan) {
- return $type == 'nomor_laporan' ? '-' : null;
+ return $result->count();
}
- return $type == 'nomor_laporan' ? $laporan->nomor_laporan : $laporan->created_at;
-}
-function getCustomField($param)
-{
- if (is_numeric($param)) {
- $field = CustomField::find($param);
- } else {
- $field = CustomField::where(['name' => $param])->first();
- }
- if ($field) {
- return $field;
- } else {
- return null;
- }
-}
-function getWilayahName($code, $type)
-{
- try {
- $wilayah = null;
+ function getMaxFileSize($jenis)
+ {
+ $jenisDokumen = JenisDokumen::where('name', $jenis)->first();
+ if (!$jenisDokumen) {
+ return 2048;
+ }
+ //konversi ke KB (1 MB = 1024 KB)
+ $maxSizeInKB = (int) $jenisDokumen->max_size * 1024;
- if (!$code) {
+ return $maxSizeInKB;
+ }
+
+ function getUser($userId)
+ {
+ return User::find($userId);
+ }
+
+ function generateLpjUniqueCode($randomLength = 6)
+ {
+
+ $year = date('y');
+ $month = str_pad(date('m'), 2, '0', STR_PAD_LEFT);
+ $day = str_pad(date('d'), 2, '0', STR_PAD_LEFT);
+
+ // Generate random numbers
+ $randomNumber = str_pad(mt_rand(0, pow(10, $randomLength) - 1), $randomLength, '0', STR_PAD_LEFT);
+
+ // Concatenate components to create the custom code
+ return $year . $month . $day . $randomNumber;
+ }
+
+ function checkRegionUserName($userId)
+ {
+ $region = TeamsUsers::where('user_id', $userId)->first();
+ if ($region) {
+ return $region->team->regions->name;
+ } else {
+ return null;
+ }
+ }
+
+ function getNomorLaporan($permohonanId, $documentId, $type = 'nomor_laporan')
+ {
+
+ $laporan = Laporan::where([
+ 'permohonan_id' => $permohonanId,
+ 'dokumen_jaminan_id' => $documentId,
+ ])->first();
+
+ if (!$laporan) {
+ return $type == 'nomor_laporan' ? '-' : null;
+ }
+
+ return $type == 'nomor_laporan' ? $laporan->nomor_laporan : $laporan->created_at;
+ }
+
+ function getCustomField($param)
+ {
+ if (is_numeric($param)) {
+ $field = CustomField::find($param);
+ } else {
+ $field = CustomField::where(['name' => $param])->first();
+ }
+ if ($field) {
+ return $field;
+ } else {
+ return null;
+ }
+ }
+
+ function getWilayahName($code, $type)
+ {
+ try {
+ $wilayah = null;
+
+ if (!$code) {
+ return null;
+ }
+
+ switch ($type) {
+ case 'province':
+ $wilayah = Province::where('code', $code)->first();
+ return $wilayah ? $wilayah->name : null;
+
+ case 'city':
+ $wilayah = City::where('code', $code)->first();
+ return $wilayah ? $wilayah->name : null;
+
+ case 'district':
+ $wilayah = District::where('code', $code)->first();
+ return $wilayah ? $wilayah->name : null;
+
+ case 'village':
+ $wilayah = Village::where('code', $code)->first();
+ return $wilayah ? $wilayah->name : null;
+
+ default:
+ return null;
+ }
+ } catch (Exception $e) {
return null;
}
-
- switch ($type) {
- case 'province':
- $wilayah = Province::where('code', $code)->first();
- return $wilayah ? $wilayah->name : null;
-
- case 'city':
- $wilayah = City::where('code', $code)->first();
- return $wilayah ? $wilayah->name : null;
-
- case 'district':
- $wilayah = District::where('code', $code)->first();
- return $wilayah ? $wilayah->name : null;
-
- case 'village':
- $wilayah = Village::where('code', $code)->first();
- return $wilayah ? $wilayah->name : null;
-
- default:
- return null;
- }
- } catch (\Exception $e) {
- return null;
}
-}
-function formatLabel($key)
-{
+ function formatLabel($key)
+ {
+
+ static $labelCache = [];
+ if (isset($labelCache[$key])) {
+ return $labelCache[$key];
+ }
+
+ $customLabel = CustomField::where('name', $key)->first();
+ $labelCache[$key] = $customLabel->label ?? ucwords(str_replace('_', ' ', $key));
- static $labelCache = [];
- if (isset($labelCache[$key])) {
return $labelCache[$key];
}
- $customLabel = CustomField::where('name', $key)->first();
- $labelCache[$key] = $customLabel->label ?? ucwords(str_replace('_', ' ', $key));
+ function calculateSLA($permohonan, $type)
+ {
+ if (!$type) {
+ return null;
+ }
- return $labelCache[$key];
-}
+ $nilai_plafond = in_array($permohonan->nilai_plafond_id, [2, 3]);
+ $nilai_plafond_2 = in_array($permohonan->nilai_plafond_id, [1]);
-function calculateSLA($permohonan, $type)
-{
- if (!$type) {
- return null;
+ $slaMap = [
+ 'resume' => $nilai_plafond ? 2 : null,
+ 'paparan' => $nilai_plafond ? 2 : null,
+ 'standard' => $nilai_plafond ? 3 : null,
+ 'sederhana' => $nilai_plafond ? 2 : null,
+ 'paparan' => $nilai_plafond_2 ? 3 : null,
+ 'rap' => 3,
+ 'memo' => $nilai_plafond ? 1 : null
+ ];
+
+ if ($type === 'paparan' && isset($permohonan->tujuanPenilaian->name) && $permohonan->tujuanPenilaian->name === 'rap') {
+ return 2;
+ }
+
+ return $slaMap[$type] ?? null;
}
- $nilai_plafond = in_array($permohonan->nilai_plafond_id, [2, 3]);
- $nilai_plafond_2 = in_array($permohonan->nilai_plafond_id, [1]);
- $slaMap = [
- 'resume' => $nilai_plafond ? 2 : null,
- 'paparan' => $nilai_plafond ? 2 : null,
- 'standard' => $nilai_plafond ? 3 : null,
- 'sederhana' => $nilai_plafond ? 2 : null,
- 'paparan' => $nilai_plafond_2 ? 3 : null,
- 'rap' => 3,
- 'memo' => $nilai_plafond ? 1 : null
- ];
-
- if ($type === 'paparan' && isset($permohonan->tujuanPenilaian->name) && $permohonan->tujuanPenilaian->name === 'rap') {
- return 2;
- }
-
- return $slaMap[$type] ?? null;
-}
-
-
-/**
+ /**
* Menghitung total nilai berdasarkan key dan jenis legalitas.
*
- * @param array $detailsArray
+ * @param array $detailsArray
* @param string $key
- * @param int $jenisLegalitas
+ * @param int $jenisLegalitas
+ *
* @return int
*/
-function calculateTotalLuas($detailsArray, $key, $jenisLegalitas, $defaultJenisLegalitas, $fallbackJenisLegalitas)
-{
- $total = 0;
+ function calculateTotalLuas($detailsArray, $key, $jenisLegalitas, $defaultJenisLegalitas, $fallbackJenisLegalitas)
+ {
+ $total = 0;
- if ($detailsArray) {
- foreach ($detailsArray as $item) {
- if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $jenisLegalitas) {
- $details = json_decode($item->details, true);
-
- if (is_array($details)) {
- foreach ($details as $detail) {
- if (isset($detail[$key])) {
- $total += (int) $detail[$key];
- }
- }
- }
- }
- }
-
- // Jika total masih 0, gunakan jenis jaminan ppjb
- if ($total === 0) {
+ if ($detailsArray) {
foreach ($detailsArray as $item) {
- if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $defaultJenisLegalitas) {
+ if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $jenisLegalitas) {
$details = json_decode($item->details, true);
if (is_array($details)) {
foreach ($details as $detail) {
- if (isset($detail[$key]) && $detail[$key] !== null) {
+ if (isset($detail[$key])) {
$total += (int) $detail[$key];
}
}
}
}
}
+
+ // Jika total masih 0, gunakan jenis jaminan ppjb
+ if ($total === 0) {
+ foreach ($detailsArray as $item) {
+ if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $defaultJenisLegalitas) {
+ $details = json_decode($item->details, true);
+
+ if (is_array($details)) {
+ foreach ($details as $detail) {
+ if (isset($detail[$key]) && $detail[$key] !== null) {
+ $total += (int) $detail[$key];
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // jika total masih kosong juga maka gunakan ppb
+ if ($total === 0 && $fallbackJenisLegalitas !== null) {
+ foreach ($detailsArray as $item) {
+ if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $fallbackJenisLegalitas) {
+ $details = json_decode($item->details, true);
+
+ if (is_array($details)) {
+ foreach ($details as $detail) {
+ if (isset($detail[$key]) && $detail[$key] !== null) {
+ $total += (int) $detail[$key];
+ }
+ }
+ }
+ }
+ }
+ }
}
- // jika total masih kosong juga maka gunakan ppb
- if ($total === 0 && $fallbackJenisLegalitas !== null) {
- foreach ($detailsArray as $item) {
- if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $fallbackJenisLegalitas) {
- $details = json_decode($item->details, true);
-
- if (is_array($details)) {
- foreach ($details as $detail) {
- if (isset($detail[$key]) && $detail[$key] !== null) {
- $total += (int) $detail[$key];
- }
- }
- }
- }
- }
- }
+ return $total > 0 ? $total : 0;
}
- return $total > 0 ? $total : 0;
-}
+ function ubahNomorHp($nomorHp)
+ {
-function ubahNomorHp($nomorHp) {
-
- $nomorHp = preg_replace('/\D/', '', $nomorHp);
- if (strpos($nomorHp, '62') === 0) {
- $nomorBaru = substr($nomorHp, 0, 5) . "xxxxx";
- return '+' . $nomorBaru;
- } elseif (strpos($nomorHp, '0') === 0) {
+ $nomorHp = preg_replace('/\D/', '', $nomorHp);
+ if (strpos($nomorHp, '62') === 0) {
+ $nomorBaru = substr($nomorHp, 0, 5) . "xxxxx";
+ return '+' . $nomorBaru;
+ } else if (strpos($nomorHp, '0') === 0) {
$nomorBaru = substr($nomorHp, 0, 5) . "xxxxxx";
return $nomorBaru;
diff --git a/app/Http/Controllers/LaporanAdminKreditController.php b/app/Http/Controllers/LaporanAdminKreditController.php
index f9adfca..a9a17aa 100644
--- a/app/Http/Controllers/LaporanAdminKreditController.php
+++ b/app/Http/Controllers/LaporanAdminKreditController.php
@@ -19,12 +19,7 @@
*/
public function index()
{
- $permohonan = Permohonan::with([
- 'documents.jenisJaminan',
- 'penilaian._user_penilai',
- 'penilai',
- 'documents.detail.jenisLegalitasJaminan'
- ])->where(['status' => 'done'])->get();
+ $permohonan = Permohonan::where(['status' => 'done'])->get();
foreach ($permohonan as $_permohonan) {
$npw = 0;
if (isset($_permohonan->penilai->lpj)) {
diff --git a/app/Http/Controllers/LaporanHasilPenilaianJaminanInternalExternalController.php b/app/Http/Controllers/LaporanHasilPenilaianJaminanInternalExternalController.php
new file mode 100644
index 0000000..3bac546
--- /dev/null
+++ b/app/Http/Controllers/LaporanHasilPenilaianJaminanInternalExternalController.php
@@ -0,0 +1,211 @@
+user) || !$this->user->can('laporan-admin-kredit.view')) {
+ //abort(403, 'Sorry! You are not allowed to view laporan admin kredit.');
+ }
+
+ // Retrieve data from the database
+ $query = Permohonan::query();
+ $query = $query->where('status', 'done');
+
+ // Apply search filter if provided
+ if ($request->has('search') && !empty($request->get('search'))) {
+ $search = json_decode($request->get('search'));
+
+ if (isset($search->start_date) || isset($search->end_date)) {
+ $query->whereBetween('tanggal_permohonan', [
+ $search->start_date ?? '1900-01-01',
+ $search->end_date ?? now()->toDateString()
+ ]);
+ }
+
+ // Filter by branch if provided
+ if (isset($search->branch_id) && !empty($search->branch_id)) {
+ $query->where('branch_id', $search->branch_id);
+ }
+
+ if (isset($search->penilai_id) && !empty($search->penilai_id)) {
+ $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function ($q) use ($search) {
+ $q->where('user_id', $search->penilai_id);
+ });
+ }
+
+ if (isset($search->search)) {
+
+ $query->where(function ($q) use ($search) {
+ $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%');
+ $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhere('status', 'LIKE', '%' . $search->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();
+
+ // 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(['debiture.branch'])->get();
+
+ $data = $data->map(function ($permohonan) {
+ $luas_tanah = 0;
+ $luas_bangunan = 0;
+ $nilai_tanah = 0;
+ $nilai_bangunan = 0;
+ $npw = 0;
+ $nilai_liquidasi = 0;
+
+ if (isset($permohonan->penilai->lpj)) {
+ $lpj = json_decode($permohonan->penilai->lpj, true);
+ $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0);
+
+ $luas_tanah = $lpj['luas_tanah'] ?? 0;
+ $luas_bangunan = $lpj['luas_bangunan'] ?? 0;
+ // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_'
+ $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0);
+
+ $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0);
+ $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0);
+ }
+
+ return [
+ 'id' => $permohonan->id,
+ 'nomor_registrasi' => $permohonan->nomor_registrasi,
+ 'jenis_penilaian' => $permohonan->jenisPenilaian?->name,
+ 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name,
+ 'jenis_fasilitas_kredit' => $permohonan->jenisFasilitasKredit?->name,
+ 'branch' => $permohonan->debiture->branch?->name,
+ 'pemohon' => $permohonan->creator?->name,
+ 'cif' => $permohonan->debiture->cif,
+ 'name' => $permohonan->debiture?->name,
+ 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name')
+ ->unique()
+ ->implode(', '),
+ 'alamat_agunan' => $permohonan->documents?->map(function ($document) {
+ return formatAlamat($document);
+ })->unique()->implode(', '),
+ 'bukti_kepemilikan' => (function() use ($permohonan) {
+ $legalitasItems = $permohonan->documents?->flatMap(function ($document) {
+ return $document->detail->map(function ($detail) {
+ // Jika tidak ada jenis legalitas jaminan, lewati
+ if (empty($detail->jenisLegalitasJaminan)) {
+ return null;
+ }
+
+ // Hanya tampilkan detail yang memiliki dokumen_jaminan
+ if (empty($detail->dokumen_jaminan)) {
+ return null;
+ }
+
+ // Tampilkan nama legalitas jaminan saja
+ return $detail->jenisLegalitasJaminan->name ?? '';
+ });
+ })->filter()->unique()->values()->toArray();
+
+ // Buat daftar bernomor
+ $result = '';
+ foreach ($legalitasItems as $index => $item) {
+ $result .= ($index + 1) . '. ' . $item . "\n";
+ }
+
+ return $result;
+ })(),
+ 'nama_pemilik' => $permohonan->documents?->pluck('pemilik.name')
+ ->unique()
+ ->implode(', '),
+ 'luas_tanah' => $luas_tanah . ' m²',
+ 'nilai_tanah' => formatRupiah($nilai_tanah, 2),
+ 'luas_bangunan' => $luas_bangunan . ' m²',
+ 'nilai_bangunan' => formatRupiah($nilai_bangunan, 2),
+ 'nilai_njop' => formatRupiah($permohonan->nilai_njop, 2),
+ 'nilai_pasar_wajar' => formatRupiah($npw, 2),
+ 'nilai_likuidasi' => formatRupiah($nilai_liquidasi, 2),
+ 'tanggal_documen_diterima' => $permohonan->documents?->map(function ($document) {
+ return $document->created_at->format('d-m-Y');
+ }),
+ 'tanggal_spk' => '',
+ 'nomor_spk' => '',
+ 'tanggal_rencana_kunjunagn' => '',
+ 'tanggal_kunjungan' => '',
+ 'taggal_delivered' => '',
+ 'jangka_waktu_sla' => '',
+ 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name,
+ 'nama_team_leader' => $permohonan->penilaian?->teams,
+ 'saran' => '',
+ 'catatan' => '',
+
+
+ 'tanggal_permohonan' => $permohonan->tanggal_permohonan,
+ 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '',
+ 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '',
+ ];
+ });
+
+ // Calculate the page count
+ $pageCount = ceil($totalRecords / $request->get('size'));
+
+ // Calculate the current page number
+ $currentPage = $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,
+ ]);
+ }
+
+ public function export(Request $request)
+ {
+ return Excel::download(new LaporanHasilPenilaianJaminanInternalExternalExport($request), 'laporan_hasil_penilaian_jaminan_internal_external.xlsx');
+ }
+ }
diff --git a/app/Http/Controllers/LaporanPembatalanController.php b/app/Http/Controllers/LaporanPembatalanController.php
new file mode 100644
index 0000000..3f8fc5f
--- /dev/null
+++ b/app/Http/Controllers/LaporanPembatalanController.php
@@ -0,0 +1,140 @@
+user) || !$this->user->can('debitur.view')) {
+ //abort(403, 'Sorry! You are not allowed to view users.');
+ }
+
+ // Retrieve data from the database
+ $query = PermohonanPembatalan::query();
+
+
+ if (!Auth::user()->hasAnyRole(['administrator'])) {
+ $query = $query->whereHas('permohonan', function ($q) {
+ $q->where('branch_id', Auth::user()->branch_id);
+ });
+ }
+
+ $query = $query->orderBy('created_at', 'desc');
+
+ // Apply search filter if provided
+ if ($request->has('search') && !empty($request->get('search'))) {
+ $search = json_decode($request->get('search'));
+
+ if (isset($search->start_date) || isset($search->end_date)) {
+ $query->whereBetween('created_at', [
+ $search->start_date ?? '1900-01-01',
+ $search->end_date ?? now()->toDateString()
+ ]);
+ }
+
+ // Filter by branch if provided
+ if (isset($search->branch_id) && !empty($search->branch_id)) {
+ $query->whereHas('permohonan', function ($q) use ($search) {
+ $q->where('branch_id', $search->branch_id);
+ });
+ }
+
+ if (isset($search->search)) {
+ $query->where(function ($q) use ($search) {
+ $q->whereHas('permohonan', function ($subq) use ($search) {
+ $subq->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%');
+ $subq->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%');
+ $subq->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%');
+ });
+ $q->orWhere('alasan_pembatalan', 'LIKE', '%' . $search->search . '%');
+ $q->orWhere('status', 'LIKE', '%' . $search->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->get();
+
+ $data = $data->map(function ($item) {
+ return [
+ 'id' => $item->id,
+ 'nomor_registrasi' => $item->permohonan->nomor_registrasi ?? '-',
+ 'tanggal_permohonan' => $item->permohonan->tanggal_permohonan ? date('d-m-Y', strtotime($item->permohonan->tanggal_permohonan)) : '-',
+ 'tanggal_pembatalan' => date('d-m-Y', strtotime($item->created_at)),
+ 'cabang' => $item->permohonan->branch->name ?? '-',
+ 'pemohon' => $item->permohonan->user->name ?? '-',
+ 'debitur' => $item->permohonan->debiture->name ?? '-',
+ 'alasan_pembatalan' => $item->alasan_pembatalan,
+ 'status' => $item->status,
+ 'diajukan_oleh' => $item->user->name ?? '-',
+ 'disetujui_oleh' => $item->authorized_by ? $item->authorizedUser->name : '-',
+ 'tanggal_disetujui' => $item->authorized_at ? formatTanggalIndonesia(strtotime($item->authorized_at),1) : '-'
+ ];
+ });
+
+
+ // 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/LaporanPenilaianJaminanController.php b/app/Http/Controllers/LaporanPenilaianJaminanController.php
new file mode 100644
index 0000000..9596161
--- /dev/null
+++ b/app/Http/Controllers/LaporanPenilaianJaminanController.php
@@ -0,0 +1,161 @@
+user) || !$this->user->can('laporan-admin-kredit.view')) {
+ //abort(403, 'Sorry! You are not allowed to view laporan admin kredit.');
+ }
+
+ // Retrieve data from the database
+ $query = Permohonan::query();
+ $query = $query->where('status', 'done');
+
+ // Apply search filter if provided
+ if ($request->has('search') && !empty($request->get('search'))) {
+ $search = json_decode($request->get('search'));
+
+ if (isset($search->start_date) || isset($search->end_date)) {
+ $query->whereBetween('tanggal_permohonan', [
+ $search->start_date ?? '1900-01-01',
+ $search->end_date ?? now()->toDateString()
+ ]);
+ }
+
+ // Filter by branch if provided
+ if (isset($search->branch_id) && !empty($search->branch_id)) {
+ $query->where('branch_id', $search->branch_id);
+ }
+
+ if (isset($search->penilai_id) && !empty($search->penilai_id)) {
+ $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($search) {
+ $q->where('user_id', $search->penilai_id);
+ });
+ }
+
+ if (isset($search->search)) {
+
+ $query->where(function ($q) use ($search) {
+ $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%');
+ $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%');
+ $q->orWhere('status', 'LIKE', '%' . $search->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();
+
+ // 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(['debiture.branch'])->get();
+
+ $data = $data->map(function ($permohonan) {
+ $luas_tanah = 0;
+ $luas_bangunan = 0;
+ $nilai_tanah = 0;
+ $nilai_bangunan = 0;
+ $npw = 0;
+ $nilai_liquidasi = 0;
+ if (isset($permohonan->penilai->lpj)) {
+ $lpj = json_decode($permohonan->penilai->lpj, true);
+ $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0);
+
+ $luas_tanah = $lpj['luas_tanah'] ?? 0;
+ $luas_bangunan = $lpj['luas_bangunan'] ?? 0;
+ // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_'
+ $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0);
+
+ $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0);
+ $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0);
+ }
+
+ return [
+ 'id' => $permohonan->id,
+ 'nomor_registrasi' => $permohonan->nomor_registrasi,
+ 'tanggal_permohonan' => $permohonan->tanggal_permohonan,
+ 'branch' => $permohonan->debiture?->branch?->name,
+ 'name' => $permohonan->debiture?->name,
+ 'pemohon' => $permohonan->creator?->name,
+ 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name,
+ 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name')->unique()->implode(', '),
+ 'alamat_agunan' => $permohonan->documents?->map(function ($document) {
+ return formatAlamat($document);
+ })->unique()->implode(', '),
+ 'luas_tanah' => $luas_tanah . ' m²',
+ 'nilai_tanah' => formatRupiah($nilai_tanah,2),
+ 'luas_bangunan' => $luas_bangunan . ' m²',
+ 'nilai_bangunan' => formatRupiah($nilai_bangunan,2),
+ 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '',
+ 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '',
+ 'nilai_pasar_wajar' => formatRupiah($npw,2),
+ 'nilai_likuidasi' => formatRupiah($nilai_liquidasi,2),
+ 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name,
+ ];
+ });
+
+ // Calculate the page count
+ $pageCount = ceil($totalRecords / $request->get('size'));
+
+ // Calculate the current page number
+ $currentPage = $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,
+ ]);
+ }
+
+ public function export(Request $request)
+ {
+ return Excel::download(new LaporanPenilaianJaminanExport($request), 'laporan_penilaian_jaminan.xlsx');
+ }
+ }
diff --git a/app/Http/Controllers/NocController.php b/app/Http/Controllers/NocController.php
index bcb66ce..87a50b8 100644
--- a/app/Http/Controllers/NocController.php
+++ b/app/Http/Controllers/NocController.php
@@ -63,14 +63,14 @@
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
- if($permohonan->jenis_penilaian_id==2) {
+ if ($permohonan->jenis_penilaian_id == 2) {
$permohonan->status = $status;
}
$permohonan->save();
// andy add, update status penawaran.status='spk'
// $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
- if($permohonan->jenis_penilaian_id==2) {
+ if ($permohonan->jenis_penilaian_id == 2) {
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => $status,
'updated_by' => Auth::id(),
@@ -109,7 +109,7 @@
/**
* Display the specified resource.
*/
- public function show($id) {}
+ public function show($id) { }
/**
* Show the form for editing the specified resource.
@@ -117,7 +117,7 @@
public function edit($id)
{
$persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->with(
- ['penawaran.detail', 'penawaran.permohonan.debiture','permohonan'],
+ ['penawaran.detail', 'penawaran.permohonan.debiture', 'permohonan'],
)->first();
return view('lpj::noc.form', compact('persetujuanPenawaran'));
}
@@ -173,18 +173,20 @@
$filteredRecords = $query->count();
// Get the data for the current page
- $data = $query
- ->with(
- [
- 'penawaran.permohonan.debiture',
- 'penawaran.permohonan.branch',
- 'permohonan.debiture',
- 'permohonan.branch',
- 'penawaran.detail',
- 'penawaran.persetujuan',
- ],
- )->get();
+ $data = $query->get();
+ $data = $data->map(function ($persetujuanPenawaran) {
+ return [
+ 'id' => $persetujuanPenawaran->id,
+ 'nomor_registrasi' => $persetujuanPenawaran->permohonan->nomor_registrasi ?? $persetujuanPenawaran->penawaran->nomor_registrasi,
+ 'nama_debitur' => $persetujuanPenawaran->permohonan->debiture->name ?? $persetujuanPenawaran->penawaran->permohonan->debiture->name,
+ 'cabang' => $persetujuanPenawaran->permohonan->branch->name ?? $persetujuanPenawaran->penawaran->permohonan->branch->name,
+ 'tanggal_setor' => formatTanggalIndonesia($persetujuanPenawaran->created_at, true),
+ 'nominal_bayar' => format_currency($persetujuanPenawaran->nominal_bayar ?? 0),
+ 'bukti_ksl' => $persetujuanPenawaran->bukti_ksl ?? null,
+ 'tanggal_penyelesaian' => formatTanggalIndonesia($persetujuanPenawaran->updated_at, true),
+ ];
+ });
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
diff --git a/app/Http/Controllers/PembayaranController.php b/app/Http/Controllers/PembayaranController.php
index f6fe6de..1c8eaa8 100644
--- a/app/Http/Controllers/PembayaranController.php
+++ b/app/Http/Controllers/PembayaranController.php
@@ -263,8 +263,7 @@ class PembayaranController extends Controller
$subquery->select('permohonan_id')
->from('persetujuan_penawaran')
->whereNotNull('permohonan_id');
- })
- ->orWhere('status', 'revisi-pembayaran');
+ });
});
diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php
index c6372f3..0c5c05b 100644
--- a/app/Http/Controllers/PermohonanController.php
+++ b/app/Http/Controllers/PermohonanController.php
@@ -22,11 +22,13 @@ use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian;
+use Modules\Lpj\Notifications\PermohonanNotif;
use Modules\Lpj\Services\PermohonanHistoryService;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Penilaian;
+use Modules\Usermanagement\Models\User;
class PermohonanController extends Controller
{
@@ -205,6 +207,7 @@ class PermohonanController extends Controller
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
+ $q->orWhere('mig_mst_lpj_nomor_jaminan', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
diff --git a/app/Models/Analisa.php b/app/Models/Analisa.php
index 4134384..8266122 100644
--- a/app/Models/Analisa.php
+++ b/app/Models/Analisa.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaFactory;
-class Analisa extends Model
+class Analisa extends Base
{
use HasFactory;
protected $table = 'analisa';
diff --git a/app/Models/AnalisaFakta.php b/app/Models/AnalisaFakta.php
index 63015a6..d1bb7e2 100644
--- a/app/Models/AnalisaFakta.php
+++ b/app/Models/AnalisaFakta.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaFaktaFactory;
-class AnalisaFakta extends Model
+class AnalisaFakta extends Base
{
use HasFactory;
diff --git a/app/Models/AnalisaLingkungan.php b/app/Models/AnalisaLingkungan.php
index 59a2962..5129109 100644
--- a/app/Models/AnalisaLingkungan.php
+++ b/app/Models/AnalisaLingkungan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaLingkunganFactory;
-class AnalisaLingkungan extends Model
+class AnalisaLingkungan extends Base
{
use HasFactory;
diff --git a/app/Models/AnalisaTanahBagunan.php b/app/Models/AnalisaTanahBagunan.php
index 32c7791..21b4d85 100644
--- a/app/Models/AnalisaTanahBagunan.php
+++ b/app/Models/AnalisaTanahBagunan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaTanahBagunanFactory;
-class AnalisaTanahBagunan extends Model
+class AnalisaTanahBagunan extends Base
{
use HasFactory;
diff --git a/app/Models/AnalisaUnit.php b/app/Models/AnalisaUnit.php
index 4c0b3a7..5213b39 100644
--- a/app/Models/AnalisaUnit.php
+++ b/app/Models/AnalisaUnit.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaUnitFactory;
-class AnalisaUnit extends Model
+class AnalisaUnit extends Base
{
use HasFactory;
diff --git a/app/Models/Base.php b/app/Models/Base.php
index eb7b4d8..63f172b 100644
--- a/app/Models/Base.php
+++ b/app/Models/Base.php
@@ -7,6 +7,7 @@
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
use Wildside\Userstamps\Userstamps;
+ use Illuminate\Notifications\Notifiable;
/**
@@ -14,7 +15,7 @@
*/
class Base extends Model
{
- use LogsActivity, SoftDeletes, Userstamps;
+ use LogsActivity, SoftDeletes, Userstamps, Notifiable;
protected $connection;
diff --git a/app/Models/BentukTanah.php b/app/Models/BentukTanah.php
index 38729af..33a9fd9 100644
--- a/app/Models/BentukTanah.php
+++ b/app/Models/BentukTanah.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\BentukTanahFactory;
-class BentukTanah extends Model
+class BentukTanah extends Base
{
use HasFactory;
diff --git a/app/Models/BentukUnit.php b/app/Models/BentukUnit.php
index 0c93b1d..080ed6d 100644
--- a/app/Models/BentukUnit.php
+++ b/app/Models/BentukUnit.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\BentukUnitFactory;
-class BentukUnit extends Model
+class BentukUnit extends Base
{
use HasFactory;
diff --git a/app/Models/Denah.php b/app/Models/Denah.php
index 390b233..d3a566f 100644
--- a/app/Models/Denah.php
+++ b/app/Models/Denah.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\DenahFactory;
-class Denah extends Model
+class Denah extends Base
{
use HasFactory;
diff --git a/app/Models/FasilitasObjek.php b/app/Models/FasilitasObjek.php
index a8fcda6..7cf7b78 100644
--- a/app/Models/FasilitasObjek.php
+++ b/app/Models/FasilitasObjek.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\FasilitasObjekFactory;
-class FasilitasObjek extends Model
+class FasilitasObjek extends Base
{
use HasFactory;
diff --git a/app/Models/FotoJaminan.php b/app/Models/FotoJaminan.php
index 940ecfe..e7df96b 100644
--- a/app/Models/FotoJaminan.php
+++ b/app/Models/FotoJaminan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\FotoJaminanFactory;
-class FotoJaminan extends Model
+class FotoJaminan extends Base
{
use HasFactory;
diff --git a/app/Models/FotoObjekJaminan.php b/app/Models/FotoObjekJaminan.php
index c344373..6a31313 100644
--- a/app/Models/FotoObjekJaminan.php
+++ b/app/Models/FotoObjekJaminan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\FotoObjekJaminanFactory;
-class FotoObjekJaminan extends Model
+class FotoObjekJaminan extends Base
{
use HasFactory;
diff --git a/app/Models/GolonganMasySekitar.php b/app/Models/GolonganMasySekitar.php
index a4d1f9a..45288b1 100644
--- a/app/Models/GolonganMasySekitar.php
+++ b/app/Models/GolonganMasySekitar.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\GolonganMasySekitarFactory;
-class GolonganMasySekitar extends Model
+class GolonganMasySekitar extends Base
{
use HasFactory;
diff --git a/app/Models/Inspeksi.php b/app/Models/Inspeksi.php
index e6d253d..38a6f05 100644
--- a/app/Models/Inspeksi.php
+++ b/app/Models/Inspeksi.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\InspeksiFactory;
-class Inspeksi extends Model
+class Inspeksi extends Base
{
use HasFactory;
diff --git a/app/Models/JenisBangunan.php b/app/Models/JenisBangunan.php
index a4cd930..f4e9302 100644
--- a/app/Models/JenisBangunan.php
+++ b/app/Models/JenisBangunan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\JenisBangunanFactory;
-class JenisBangunan extends Model
+class JenisBangunan extends Base
{
use HasFactory;
diff --git a/app/Models/JenisKapal.php b/app/Models/JenisKapal.php
index 169d29d..96dec5f 100644
--- a/app/Models/JenisKapal.php
+++ b/app/Models/JenisKapal.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisKapalFactory;
-class JenisKapal extends Model
+class JenisKapal extends Base
{
use HasFactory;
diff --git a/app/Models/JenisKendaraan.php b/app/Models/JenisKendaraan.php
index 1846e02..4328e71 100644
--- a/app/Models/JenisKendaraan.php
+++ b/app/Models/JenisKendaraan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisKendaraanFactory;
-class JenisKendaraan extends Model
+class JenisKendaraan extends Base
{
use HasFactory;
diff --git a/app/Models/JenisPenilaian.php b/app/Models/JenisPenilaian.php
index f072a82..7c2649b 100644
--- a/app/Models/JenisPenilaian.php
+++ b/app/Models/JenisPenilaian.php
@@ -5,7 +5,7 @@ namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Database\Factories\JenisPenilaianFactory;
use Modules\Lpj\Models\Penilaian;
-class JenisPenilaian extends Model
+class JenisPenilaian extends Base
{
/**
diff --git a/app/Models/JenisPesawat.php b/app/Models/JenisPesawat.php
index 226c8b0..9e08c68 100644
--- a/app/Models/JenisPesawat.php
+++ b/app/Models/JenisPesawat.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisPesawatFactory;
-class JenisPesawat extends Model
+class JenisPesawat extends Base
{
use HasFactory;
diff --git a/app/Models/JenisUnit.php b/app/Models/JenisUnit.php
index 744ca80..2d47154 100644
--- a/app/Models/JenisUnit.php
+++ b/app/Models/JenisUnit.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisUnitFactory;
-class JenisUnit extends Model
+class JenisUnit extends Base
{
use HasFactory;
diff --git a/app/Models/KetinggianTanah.php b/app/Models/KetinggianTanah.php
index 9cd282d..2edbc5b 100644
--- a/app/Models/KetinggianTanah.php
+++ b/app/Models/KetinggianTanah.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\KetinggianTanahFactory;
-class KetinggianTanah extends Model
+class KetinggianTanah extends Base
{
use HasFactory;
diff --git a/app/Models/KondisiBangunan.php b/app/Models/KondisiBangunan.php
index 0fa0f86..05aebb0 100644
--- a/app/Models/KondisiBangunan.php
+++ b/app/Models/KondisiBangunan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\KondisiBangunanFactory;
-class KondisiBangunan extends Model
+class KondisiBangunan extends Base
{
use HasFactory;
diff --git a/app/Models/KondisiFisikTanah.php b/app/Models/KondisiFisikTanah.php
index bc3a33d..89b6907 100644
--- a/app/Models/KondisiFisikTanah.php
+++ b/app/Models/KondisiFisikTanah.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\KondisiFisikTanahFactory;
-class KondisiFisikTanah extends Model
+class KondisiFisikTanah extends Base
{
use HasFactory;
diff --git a/app/Models/KonturTanah.php b/app/Models/KonturTanah.php
index ea53872..b5a4369 100644
--- a/app/Models/KonturTanah.php
+++ b/app/Models/KonturTanah.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\KonturTanahFactory;
-class KonturTanah extends Model
+class KonturTanah extends Base
{
use HasFactory;
diff --git a/app/Models/LaluLintasLokasi.php b/app/Models/LaluLintasLokasi.php
index 0ab213a..ec2d286 100644
--- a/app/Models/LaluLintasLokasi.php
+++ b/app/Models/LaluLintasLokasi.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\LaluLintasLokasiFactory;
-class LaluLintasLokasi extends Model
+class LaluLintasLokasi extends Base
{
use HasFactory;
protected $table = 'lalu_lintas_lokasi';
diff --git a/app/Models/Lantai.php b/app/Models/Lantai.php
index 3330df1..8629cc9 100644
--- a/app/Models/Lantai.php
+++ b/app/Models/Lantai.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\LokasiUnitFactory;
-class Lantai extends Model
+class Lantai extends Base
{
use HasFactory;
diff --git a/app/Models/LantaiUnit.php b/app/Models/LantaiUnit.php
index b40a5c3..d96945b 100644
--- a/app/Models/LantaiUnit.php
+++ b/app/Models/LantaiUnit.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\LantaiUnitFactory;
-class LantaiUnit extends Model
+class LantaiUnit extends Base
{
use HasFactory;
diff --git a/app/Models/Laporan.php b/app/Models/Laporan.php
index 5065294..b1f2320 100644
--- a/app/Models/Laporan.php
+++ b/app/Models/Laporan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\LaporanFactory;
-class Laporan extends Model
+class Laporan extends Base
{
use HasFactory;
diff --git a/app/Models/Lingkungan.php b/app/Models/Lingkungan.php
index a7b55a2..bcd81bf 100644
--- a/app/Models/Lingkungan.php
+++ b/app/Models/Lingkungan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\LingkunganFactory;
-class Lingkungan extends Model
+class Lingkungan extends Base
{
use HasFactory;
diff --git a/app/Models/MerupakanDaerah.php b/app/Models/MerupakanDaerah.php
index 983cc49..e436f93 100644
--- a/app/Models/MerupakanDaerah.php
+++ b/app/Models/MerupakanDaerah.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\MerupakanDaerahFactory;
-class MerupakanDaerah extends Model
+class MerupakanDaerah extends Base
{
use HasFactory;
diff --git a/app/Models/ModelAlatBerat.php b/app/Models/ModelAlatBerat.php
index 63b9b0f..213a8ed 100644
--- a/app/Models/ModelAlatBerat.php
+++ b/app/Models/ModelAlatBerat.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\ModelAlatBeratFactory;
-class ModelAlatBerat extends Model
+class ModelAlatBerat extends Base
{
use HasFactory;
diff --git a/app/Models/ObjekJaminan.php b/app/Models/ObjekJaminan.php
index 7b9f63a..093e80d 100644
--- a/app/Models/ObjekJaminan.php
+++ b/app/Models/ObjekJaminan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\ObjekJaminanFactory;
-class ObjekJaminan extends Model
+class ObjekJaminan extends Base
{
use HasFactory;
diff --git a/app/Models/PenawaranDetailTenderLog.php b/app/Models/PenawaranDetailTenderLog.php
index d29ff58..f1594bd 100644
--- a/app/Models/PenawaranDetailTenderLog.php
+++ b/app/Models/PenawaranDetailTenderLog.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
// use Modules\Lpj\Database\Factories\PenawaranDetailTenderFactory;
-class PenawaranDetailTenderLog extends Model
+class PenawaranDetailTenderLog extends Base
{
use HasFactory;
@@ -22,7 +22,7 @@ class PenawaranDetailTenderLog extends Model
{
return $this->belongsTo(PenawaranTender::class, 'penawaran_id', 'id');
}
-
+
public function penawarandetail(): BelongsTo
{
return $this->belongsTo(PenawaranDetailTender::class, 'detail_penawaran_id', 'id');
diff --git a/app/Models/Penilai.php b/app/Models/Penilai.php
index 08cfbad..d1a75f8 100644
--- a/app/Models/Penilai.php
+++ b/app/Models/Penilai.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\PenilaiFactory;
-class Penilai extends Model
+class Penilai extends Base
{
use HasFactory;
diff --git a/app/Models/Penilaian.php b/app/Models/Penilaian.php
index 88679b7..cf7cc3d 100644
--- a/app/Models/Penilaian.php
+++ b/app/Models/Penilaian.php
@@ -10,7 +10,7 @@ use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Permohonan;
use Modules\Usermanagement\Models\User;
-class Penilaian extends Model
+class Penilaian extends Base
{
/**
* The attributes that are mass assignable.
@@ -32,6 +32,17 @@ class Penilaian extends Model
return $this->belongsTo(Teams::class, 'teams_id', 'id');
}
+ public function teamLeader(){
+ return $this->belongsTo(Teams::class, 'teams_id', 'id')
+ ->with(['teamsUsers' => function($query) {
+ $query->whereHas('user', function($q) {
+ $q->whereHas('roles', function($r) {
+ $r->where('name', 'senior-officer');
+ });
+ })->with('user');
+ }]);
+ }
+
public function userPenilai()
{
return $this->hasMany(PenilaianTeam::class, 'penilaian_id', 'id');
diff --git a/app/Models/PenilaianTeam.php b/app/Models/PenilaianTeam.php
index adcd268..0b6079b 100644
--- a/app/Models/PenilaianTeam.php
+++ b/app/Models/PenilaianTeam.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PenilaianTeamFactory;
-class PenilaianTeam extends Model
+class PenilaianTeam extends Base
{
use HasFactory;
diff --git a/app/Models/Perizinan.php b/app/Models/Perizinan.php
index 34048d4..4f7c3c8 100644
--- a/app/Models/Perizinan.php
+++ b/app/Models/Perizinan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\PerizinanFactory;
-class Perizinan extends Model
+class Perizinan extends Base
{
use HasFactory;
diff --git a/app/Models/PerkerasanJalan.php b/app/Models/PerkerasanJalan.php
index 2c7b0b1..e34f29d 100644
--- a/app/Models/PerkerasanJalan.php
+++ b/app/Models/PerkerasanJalan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PerkerasanJalanFactory;
-class PerkerasanJalan extends Model
+class PerkerasanJalan extends Base
{
use HasFactory;
diff --git a/app/Models/PermohonanJaminan.php b/app/Models/PermohonanJaminan.php
index 86e4b3f..f72236c 100644
--- a/app/Models/PermohonanJaminan.php
+++ b/app/Models/PermohonanJaminan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PermohonanJaminanFactory;
-class PermohonanJaminan extends Model
+class PermohonanJaminan extends Base
{
use HasFactory;
protected $table = 'dokumen_jaminan';
diff --git a/app/Models/PermohonanPembatalan.php b/app/Models/PermohonanPembatalan.php
index 1197b2f..6626d08 100644
--- a/app/Models/PermohonanPembatalan.php
+++ b/app/Models/PermohonanPembatalan.php
@@ -5,7 +5,6 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
- use Modules\Lpj\Models\Permohonan;
use Modules\Usermanagement\Models\User;
class PermohonanPembatalan extends Base
@@ -44,7 +43,11 @@
return $this->belongsTo(Permohonan::class, 'permohonan_id');
}
- public function creator(){
+ public function user(){
return $this->belongsTo(User::class, 'created_by');
}
+
+ public function authorizedUser(){
+ return $this->belongsTo(User::class, 'authorized_by');
+ }
}
diff --git a/app/Models/PosisiKavling.php b/app/Models/PosisiKavling.php
index 25e17bc..980c812 100644
--- a/app/Models/PosisiKavling.php
+++ b/app/Models/PosisiKavling.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PosisiKavlingFactory;
-class PosisiKavling extends Model
+class PosisiKavling extends Base
{
use HasFactory;
diff --git a/app/Models/PosisiUnit.php b/app/Models/PosisiUnit.php
index 7b5a392..9f6d339 100644
--- a/app/Models/PosisiUnit.php
+++ b/app/Models/PosisiUnit.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\PosisiUnitFactory;
-class PosisiUnit extends Model
+class PosisiUnit extends Base
{
use HasFactory;
diff --git a/app/Models/Regions.php b/app/Models/Regions.php
index f5aef83..2bccee2 100644
--- a/app/Models/Regions.php
+++ b/app/Models/Regions.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\RegionsFactory;
use Modules\Lpj\Models\Teams;
-class Regions extends Model
+class Regions extends Base
{
use HasFactory;
diff --git a/app/Models/RuteJaminan.php b/app/Models/RuteJaminan.php
index 9b88940..8bae958 100644
--- a/app/Models/RuteJaminan.php
+++ b/app/Models/RuteJaminan.php
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\RuteJaminanFactory;
-class RuteJaminan extends Model
+class RuteJaminan extends Base
{
use HasFactory;
diff --git a/app/Models/SLA.php b/app/Models/SLA.php
deleted file mode 100644
index 3646abf..0000000
--- a/app/Models/SLA.php
+++ /dev/null
@@ -1,18 +0,0 @@
-permohonan = $permohonan;
+ $this->message = $message;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ */
+ public function via($notifiable)
+ : array
+ {
+ return ['mail', 'database'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ */
+ public function toMail($notifiable)
+ : MailMessage
+ {
+ return (new MailMessage)
+ ->line('The introduction to the notification.')
+ ->action('Notification Action', 'https://laravel.com')
+ ->line('Thank you for using our application!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ */
+ public function toArray($notifiable)
+ : array
+ {
+ return [
+ 'data' => $this->permohonan,
+ 'message' => $this->message,
+ ];
+ }
+ }
diff --git a/app/Services/PermohonanHistoryService.php b/app/Services/PermohonanHistoryService.php
index 05bf609..723eb42 100644
--- a/app/Services/PermohonanHistoryService.php
+++ b/app/Services/PermohonanHistoryService.php
@@ -4,6 +4,8 @@ namespace Modules\Lpj\Services;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PermohonanHistory;
+use Modules\Lpj\Notifications\PermohonanNotif;
+use Modules\Usermanagement\Models\User;
class PermohonanHistoryService
{
@@ -21,6 +23,8 @@ class PermohonanHistoryService
'user_id' => auth()->id(),
]);
+ $this->createNotification($permohonan, $status, $beforeRequest, $afterRequest);
+
} catch (\Exception $e) {
// Log the error
\Log::error('Error creating PermohonanHistory: ' . $e->getMessage());
@@ -34,4 +38,25 @@ class PermohonanHistoryService
throw new \Exception('Failed to create PermohonanHistory: ' . $e->getMessage());
}
}
+
+ private function createNotification(Permohonan $permohonan, string $status, array $beforeRequest, array $afterRequest)
+ {
+ $beforeStatus = '';
+ if(!empty($beforeRequest)){
+ $beforeStatus = $beforeRequest['status'] ?? '';
+ }
+
+ if($beforeStatus !== $status){
+ if($status === 'order'){
+ $users = User::where(['branch_id' => $permohonan->branch_id])->whereHas('roles',function($q){
+ $q->where('name', 'pemohon-eo');
+ })->get();
+
+ foreach ($users as $user) {
+ $message = "telah diorder oleh {$permohonan->creator->name}, Mohon Lakukan konfirmasi";
+ $user->notify(new PermohonanNotif($permohonan,$message));
+ }
+ }
+ }
+ }
}
diff --git a/database/migrations/2024_08_12_024448_create_currencies_table.php b/database/migrations/2024_08_12_024448_create_currencies_table.php
deleted file mode 100644
index ec92b59..0000000
--- a/database/migrations/2024_08_12_024448_create_currencies_table.php
+++ /dev/null
@@ -1,40 +0,0 @@
-id();
- $table->string('code', 3)->unique();
- $table->string('name');
- $table->integer('decimal_places')->default(2);
- $table->boolean('status')->default(true)->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();
- });
- }
-
- /**
- * Reverse the migrations.
- */
- public function down()
- : void
- {
- Schema::dropIfExists('currencies');
- }
- };
diff --git a/database/migrations/2024_10_15_101204_create_detail_penawaran_logs_table.php b/database/migrations/2024_10_15_101204_create_detail_penawaran_logs_table.php
index 730a0b1..414098b 100644
--- a/database/migrations/2024_10_15_101204_create_detail_penawaran_logs_table.php
+++ b/database/migrations/2024_10_15_101204_create_detail_penawaran_logs_table.php
@@ -21,10 +21,10 @@ return new class extends Migration
$table->string('dokumen_persetujuan')->nullable();
$table->boolean('status')->nullable();
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
- $table->timestamps();
- $table->timestamp('deleted_at')->nullable();
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
diff --git a/database/migrations/2024_10_16_153543_create_analisa_table.php b/database/migrations/2024_10_16_153543_create_analisa_table.php
index 2a86af2..5004d6a 100644
--- a/database/migrations/2024_10_16_153543_create_analisa_table.php
+++ b/database/migrations/2024_10_16_153543_create_analisa_table.php
@@ -19,12 +19,12 @@ return new class extends Migration
$table->string('luas');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
- $table->timestamps();
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153558_create_analisa_tanah_bangunan_table.php b/database/migrations/2024_10_16_153558_create_analisa_tanah_bangunan_table.php
index 2c0cf23..e99bf6d 100644
--- a/database/migrations/2024_10_16_153558_create_analisa_tanah_bangunan_table.php
+++ b/database/migrations/2024_10_16_153558_create_analisa_tanah_bangunan_table.php
@@ -29,14 +29,12 @@ return new class extends Migration
$table->string('sifat_bangunan');
$table->string('sarana_pelengkap');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps();
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153613_create_analisa_unit_table.php b/database/migrations/2024_10_16_153613_create_analisa_unit_table.php
index 7638518..2592687 100644
--- a/database/migrations/2024_10_16_153613_create_analisa_unit_table.php
+++ b/database/migrations/2024_10_16_153613_create_analisa_unit_table.php
@@ -25,14 +25,12 @@ return new class extends Migration
$table->string('bentuk_unit');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps();
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153727_create_spek_bagunan_analisa_table.php b/database/migrations/2024_10_16_153727_create_spek_bagunan_analisa_table.php
index 9da658b..a1efa9a 100644
--- a/database/migrations/2024_10_16_153727_create_spek_bagunan_analisa_table.php
+++ b/database/migrations/2024_10_16_153727_create_spek_bagunan_analisa_table.php
@@ -19,15 +19,13 @@ return new class extends Migration
$table->unsignedBigInteger('analisa_tanah_bangunan_id');
$table->foreign('analisa_tanah_bangunan_id')->references('id')->on('analisa_tanah_bangunan');
- $table->char('authorized_status', 1);
+ $table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps();
- $table->unsignedBigInteger('created_by');
+ $table->softDeletes();
+ $table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153743_create_spek_bagunan_analisa_detail_table.php b/database/migrations/2024_10_16_153743_create_spek_bagunan_analisa_detail_table.php
index e3f190b..8c39da9 100644
--- a/database/migrations/2024_10_16_153743_create_spek_bagunan_analisa_detail_table.php
+++ b/database/migrations/2024_10_16_153743_create_spek_bagunan_analisa_detail_table.php
@@ -19,15 +19,13 @@ return new class () extends Migration {
$table->unsignedBigInteger('spek_bangunan_analisa_id');
$table->foreign('spek_bangunan_analisa_id')->references('id')->on('spek_bagunan_analisa');
- $table->char('authorized_status', 1);
+ $table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps();
- $table->unsignedBigInteger('created_by');
+ $table->softDeletes();
+ $table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153811_create_analisa_fakta_table.php b/database/migrations/2024_10_16_153811_create_analisa_fakta_table.php
index 7e05782..58f9252 100644
--- a/database/migrations/2024_10_16_153811_create_analisa_fakta_table.php
+++ b/database/migrations/2024_10_16_153811_create_analisa_fakta_table.php
@@ -37,15 +37,13 @@ return new class () extends Migration {
$table->string('lng');
$table->text('keterangan');
- $table->char('authorized_status', 1);
+ $table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps(); // created_at and updated_at
- $table->unsignedBigInteger('created_by');
+ $table->softDeletes();
+ $table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153831_create_analisa_lingkungan_table.php b/database/migrations/2024_10_16_153831_create_analisa_lingkungan_table.php
index e0c5e22..10aa119 100644
--- a/database/migrations/2024_10_16_153831_create_analisa_lingkungan_table.php
+++ b/database/migrations/2024_10_16_153831_create_analisa_lingkungan_table.php
@@ -30,15 +30,13 @@ return new class () extends Migration {
$table->string('merupakan_daerah');
$table->string('fasilitas_dekat_object');
- $table->char('authorized_status', 1);
+ $table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps(); // created_at and updated_at
- $table->unsignedBigInteger('created_by');
+ $table->softDeletes();
+ $table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153841_create_denah_table.php b/database/migrations/2024_10_16_153841_create_denah_table.php
index 71475ff..273ee33 100644
--- a/database/migrations/2024_10_16_153841_create_denah_table.php
+++ b/database/migrations/2024_10_16_153841_create_denah_table.php
@@ -20,14 +20,12 @@ return new class () extends Migration {
$table->string('luas');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps(); // created_at and updated_at
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php b/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php
index 3c7f514..8b793e2 100644
--- a/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php
+++ b/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php
@@ -18,14 +18,12 @@ return new class () extends Migration {
$table->string('pendamping');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps(); // created_at and updated_at
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php b/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php
index 3d02a38..5bfde6d 100644
--- a/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php
+++ b/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php
@@ -21,14 +21,12 @@ return new class () extends Migration {
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps(); // created_at and updated_at
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_153945_create_lingkungan_table.php b/database/migrations/2024_10_16_153945_create_lingkungan_table.php
index 58f4289..8363ee1 100644
--- a/database/migrations/2024_10_16_153945_create_lingkungan_table.php
+++ b/database/migrations/2024_10_16_153945_create_lingkungan_table.php
@@ -20,14 +20,12 @@ return new class () extends Migration {
$table->string('foto_linkungan');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps();
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_16_155227_create_rute_jaminan_table.php b/database/migrations/2024_10_16_155227_create_rute_jaminan_table.php
index 6db988e..35fb839 100644
--- a/database/migrations/2024_10_16_155227_create_rute_jaminan_table.php
+++ b/database/migrations/2024_10_16_155227_create_rute_jaminan_table.php
@@ -21,14 +21,12 @@ return new class () extends Migration {
$table->string('foto_rute');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
-
- $table->timestamps(); // created_at and updated_at
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
diff --git a/database/migrations/2024_10_22_064209_create_lantai_unit_table.php b/database/migrations/2024_10_22_064209_create_lantai_unit_table.php
index bf3c8c0..243f75b 100644
--- a/database/migrations/2024_10_22_064209_create_lantai_unit_table.php
+++ b/database/migrations/2024_10_22_064209_create_lantai_unit_table.php
@@ -18,13 +18,12 @@ return new class extends Migration
$table->string('foto_lantai_unit');
$table->char('authorized_status', 1)->nullable();
+ $table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
- $table->timestamps();
+ $table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
-
- $table->timestamp('deleted_at')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
diff --git a/database/migrations/2024_10_28_095337_create_s_l_as_table.php b/database/migrations/2024_10_28_095337_create_s_l_as_table.php
deleted file mode 100644
index bf5549c..0000000
--- a/database/migrations/2024_10_28_095337_create_s_l_as_table.php
+++ /dev/null
@@ -1,27 +0,0 @@
-id();
- $table->timestamps();
- });
- }
-
- /**
- * Reverse the migrations.
- */
- public function down(): void
- {
- Schema::dropIfExists('sla');
- }
-};
diff --git a/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php b/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php
deleted file mode 100644
index 814024d..0000000
--- a/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php
+++ /dev/null
@@ -1,28 +0,0 @@
-id();
-
- $table->timestamps();
- });
- }
-
- /**
- * Reverse the migrations.
- */
- public function down(): void
- {
- Schema::dropIfExists('label_name_inspeksi');
- }
-};
diff --git a/module.json b/module.json
index ee72503..bf9626d 100644
--- a/module.json
+++ b/module.json
@@ -30,6 +30,23 @@
"senior-officer"
]
},
+ {
+ "title": "Laporan Pembatalan",
+ "path": "laporan-pembatalan",
+ "icon": "ki-filled ki-filter-tablet text-lg text-primary",
+ "classes": "",
+ "attributes": [],
+ "permission": "",
+ "roles": [
+ "administrator",
+ "pemohon-ao",
+ "pemohon-eo",
+ "admin",
+ "DD Appraisal",
+ "EO Appraisal",
+ "senior-officer"
+ ]
+ },
{
"title": "Laporan Admin Kredit",
"path": "laporan-admin-kredit",
@@ -64,6 +81,40 @@
"EO Appraisal",
"senior-officer"
]
+ },
+ {
+ "title": "Laporan Pernilaan Jaminan",
+ "path": "laporan-penilaian-jaminan",
+ "icon": "ki-filled ki-filter-tablet text-lg text-primary",
+ "classes": "",
+ "attributes": [],
+ "permission": "",
+ "roles": [
+ "administrator",
+ "pemohon-ao",
+ "pemohon-eo",
+ "admin",
+ "DD Appraisal",
+ "EO Appraisal",
+ "senior-officer"
+ ]
+ },
+ {
+ "title": "Laporan Hasil Pernilaan Jaminan Internal & External",
+ "path": "laporan-hasil-penilaian-jaminan-internal-external",
+ "icon": "ki-filled ki-filter-tablet text-lg text-primary",
+ "classes": "",
+ "attributes": [],
+ "permission": "",
+ "roles": [
+ "administrator",
+ "pemohon-ao",
+ "pemohon-eo",
+ "admin",
+ "DD Appraisal",
+ "EO Appraisal",
+ "senior-officer"
+ ]
}
],
"otorisator": [
diff --git a/resources/views/laporan_hasil_penilaian_jaminan_internal_external/index.blade.php b/resources/views/laporan_hasil_penilaian_jaminan_internal_external/index.blade.php
new file mode 100644
index 0000000..f67fb41
--- /dev/null
+++ b/resources/views/laporan_hasil_penilaian_jaminan_internal_external/index.blade.php
@@ -0,0 +1,489 @@
+@extends('layouts.main')
+
+@section('breadcrumbs')
+ {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }}
+@endsection
+
+@section('content')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@endsection
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/laporan_pembatalan/index.blade.php b/resources/views/laporan_pembatalan/index.blade.php
new file mode 100644
index 0000000..60f9dad
--- /dev/null
+++ b/resources/views/laporan_pembatalan/index.blade.php
@@ -0,0 +1,283 @@
+@extends('layouts.main')
+
+@section('breadcrumbs')
+ {{-- {{ Breadcrumbs::render('laporan-pembatalan') }}--}}
+@endsection
+
+@section('content')
+
+@endsection
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/laporan_penilaian_jaminan/index.blade.php b/resources/views/laporan_penilaian_jaminan/index.blade.php
new file mode 100644
index 0000000..6b76321
--- /dev/null
+++ b/resources/views/laporan_penilaian_jaminan/index.blade.php
@@ -0,0 +1,354 @@
+@extends('layouts.main')
+
+@section('breadcrumbs')
+ {{ Breadcrumbs::render('laporan-penilaian-jaminan') }}
+@endsection
+
+@section('content')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@endsection
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/laporan_permohonan/index.blade.php b/resources/views/laporan_permohonan/index.blade.php
index ffb183b..011e0f0 100644
--- a/resources/views/laporan_permohonan/index.blade.php
+++ b/resources/views/laporan_permohonan/index.blade.php
@@ -1,7 +1,7 @@
@extends('layouts.main')
@section('breadcrumbs')
- {{-- {{ Breadcrumbs::render('laporan-permohonan') }}--}}
+ {{ Breadcrumbs::render('laporan-permohonan') }}
@endsection
@section('content')
diff --git a/resources/views/noc/index.blade.php b/resources/views/noc/index.blade.php
index 65269c7..b2867c4 100644
--- a/resources/views/noc/index.blade.php
+++ b/resources/views/noc/index.blade.php
@@ -123,50 +123,19 @@
},
},
nomor_registrasi: {
- title: 'Nomor Registrasi',
- render: (item, data) => {
- if(data.permohonan) {
- return `${data.permohonan.nomor_registrasi}`;
- } else if(data.penawaran) {
- return `${data.penawaran.permohonan.nomor_registrasi}`;
- }
- return '';
- },
+ title: 'Nomor Registrasi'
},
nama_debitur: {
title: 'Nama Debitur',
- render: (item, data) => {
- if(data.permohonan) {
- return `${data.permohonan.debiture.name}`;
- } else if(data.penawaran) {
- return `${data.penawaran.permohonan.debiture.name}`;
- }
- return '';
-
- },
},
cabang: {
title: 'Cabang',
- render: (item, data) => {
- if(data.permohonan) {
- return `${data.permohonan.branch.name}`;
- } else if(data.penawaran) {
- return `${data.penawaran.permohonan.branch.name}`;
- }
- return '';
- },
},
tanggal_setor: {
title: 'Tanggal Setor',
- render: (item, data) => {
- return `${window.formatTanggalIndonesia(data.created_at)}`;
- },
},
nominal_bayar: {
title: 'Nominal Bayar',
- render: (item, data) => {
- return `${window.formatRupiah(data.nominal_bayar)}`;
- },
},
bukti_ksl: {
title: 'Bukti KSL',
@@ -182,12 +151,6 @@
},
tanggal_penyelesaian: {
title: 'Tanggal Penyelesaian',
- render: (item, data) => {
- if(data.status==1) {
- return `${window.formatTanggalIndonesia(data.updated_at)}`;
- }
- return "-";
- },
},
actions: {
title: 'Action',
diff --git a/resources/views/penilai/components/foto-jaminan.blade.php b/resources/views/penilai/components/foto-jaminan.blade.php
index 002e072..d8ad12e 100644
--- a/resources/views/penilai/components/foto-jaminan.blade.php
+++ b/resources/views/penilai/components/foto-jaminan.blade.php
@@ -31,7 +31,8 @@
/* Image Styling */
.photo-item img {
width: auto;
- height: 400px;
+ max-width: 100%;
+ height: auto;
max-height: 400px;
object-fit: contain;
background-color: #f0f0f0;
@@ -59,7 +60,6 @@
}
.photo-image {
- width: 100;
height: 400px;
max-height: 400px;
}
diff --git a/resources/views/penilai/components/print-resume.blade.php b/resources/views/penilai/components/print-resume.blade.php
index de2290a..d61d1c3 100644
--- a/resources/views/penilai/components/print-resume.blade.php
+++ b/resources/views/penilai/components/print-resume.blade.php
@@ -1,5 +1,36 @@
@include('lpj::penilai.components.header')
+@php
+ $data = '';
+ foreach ($permohonan->documents as $dokumen) {
+ $data .= $dokumen->jenisJaminan->name . ', ';
+
+ $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
+ $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
+ $teams = $permohonan->region->teams;
+
+ if ($teams) {
+ foreach ($teams as $team) {
+ $team_users = $team->teamsUsers;
+ // print_r($team_users);
+ if ($team_users) {
+ foreach ($team_users as $team_user) {
+ $user = $team_user->user;
+
+ if ($user && $user->hasRole('senior-officer')) {
+ $senior_officer = $user;
+ break 3;
+ }
+ }
+ }
+ }
+ }
+ }
+ use Modules\Usermanagement\Models\User;
+ $penilaiUser = User::where('id', $penilai->userPenilaiTeam->id)->first();
+
+ $data = rtrim($data, ', ');
+@endphp
diff --git a/resources/views/permohonan/index.blade.php b/resources/views/permohonan/index.blade.php
index 11e7dfa..38b0a6b 100644
--- a/resources/views/permohonan/index.blade.php
+++ b/resources/views/permohonan/index.blade.php
@@ -41,6 +41,10 @@
Nomor Registrasi
+ |
+ Nomor LPJ Lama
+
+ |
Tanggal Permohonan
@@ -141,6 +145,9 @@
nomor_registrasi: {
title: 'Nomor Registrasi',
},
+ mig_mst_lpj_nomor_jaminan: {
+ title: 'Nomor LPJ Lama',
+ },
tanggal_permohonan: {
title: 'Tanggal Permohonan',
render: (item, data) => {
diff --git a/resources/views/surveyor/js/utils.blade.php b/resources/views/surveyor/js/utils.blade.php
index 580fc70..8da858a 100644
--- a/resources/views/surveyor/js/utils.blade.php
+++ b/resources/views/surveyor/js/utils.blade.php
@@ -309,7 +309,7 @@
}
- function checkLaporan(permohonanId, documentId, inspeksiId, jaminanId, statusLpj) {
+ function checkLaporan(permohonanId, documentId, inspeksiId, statusLpj) {
// showLoadingSwal('Tunggu...');
fetch(
`{{ url('/penilai/check-laporan') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}`
@@ -318,7 +318,7 @@
.then(data => {
if (data.status) {
window.location.href =
- `{{ route('penilai.print-out') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}&statusLpj=${statusLpj}&type=${data.status}`;
+ `{{ route('penilai.print-out') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&statusLpj=${statusLpj}&type=${data.status}`;
} else {
// Jika laporan belum ada, tampilkan pesan peringatan
Swal.fire({
diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php
index 9fc2ce3..d3fab80 100644
--- a/routes/breadcrumbs.php
+++ b/routes/breadcrumbs.php
@@ -572,7 +572,7 @@ Breadcrumbs::for('otorisator.show', function (BreadcrumbTrail $trail, $id, $type
Breadcrumbs::for('laporan', function (BreadcrumbTrail $trail) {
- $trail->push('Laporan', route('laporan.sederhana.index'));
+ $trail->push('Laporan','');
});
Breadcrumbs::for('laporan.sederhana.index', function (BreadcrumbTrail $trail) {
@@ -728,9 +728,26 @@ Breadcrumbs::for('laporan-admin-kredit', function ($trail) {
Breadcrumbs::for('bank-data', function ($trail) {
$trail->push('Bank Data', route('bank-data.index'));
});
+
Breadcrumbs::for('laporan-penilai-jaminan', function ($trail) {
+ $trail->parent('laporan');
$trail->push('Laporan Penilai Jaminan', route('laporan-penilai-jaminan.index'));
});
+ Breadcrumbs::for('laporan-permohonan', function ($trail) {
+ $trail->parent('laporan');
+ $trail->push('Laporan Permohnan', route('laporan-permohonan.index'));
+ });
+
+ Breadcrumbs::for('laporan-penilaian-jaminan', function ($trail) {
+ $trail->parent('laporan');
+ $trail->push('Laporan Penilaian Jaminan', route('laporan-penilaian-jaminan.index'));
+ });
+
+ Breadcrumbs::for('laporan-hasil-penilaian-jaminan-internal-external', function ($trail) {
+ $trail->parent('laporan');
+ $trail->push('Laporan Hasil Penilaian Jaminan Internal External', route('laporan-hasil-penilaian-jaminan-internal-external.index'));
+ });
+
// add andy
require __DIR__ . '/breadcrumbs_registrasi.php';
diff --git a/routes/web.php b/routes/web.php
index 8d079e5..a7a181d 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -22,6 +22,9 @@ use Modules\Lpj\Http\Controllers\LampiranDokumenController;
use Modules\Lpj\Http\Controllers\LaporanAdminKreditController;
use Modules\Lpj\Http\Controllers\LaporanController;
use Modules\Lpj\Http\Controllers\LaporanExternalController;
+ use Modules\Lpj\Http\Controllers\LaporanHasilPenilaianJaminanInternalExternalController;
+ use Modules\Lpj\Http\Controllers\LaporanPembatalanController;
+ use Modules\Lpj\Http\Controllers\LaporanPenilaianJaminanController;
use Modules\Lpj\Http\Controllers\LaporanPermohonanController;
use Modules\Lpj\Http\Controllers\NilaiPlafondController;
use Modules\Lpj\Http\Controllers\NocController;
@@ -692,6 +695,25 @@ Route::middleware(['auth'])->group(function () {
Route::get('/', [LaporanPermohonanController::class, 'index'])->name('index');
});
+ // Laporan Pembatalan routes
+ Route::prefix('laporan-pembatalan')->name('laporan-pembatalan.')->group(function () {
+ Route::get('/', [LaporanPembatalanController::class, 'index'])->name('index');
+ Route::get('/data', [LaporanPembatalanController::class, 'dataForDatatables'])->name('data');
+ Route::get('/export', [LaporanPembatalanController::class, 'export'])->name('export');
+ });
+
+ Route::prefix('laporan-penilaian-jaminan')->name('laporan-penilaian-jaminan.')->group(function() {
+ Route::get('datatables', [LaporanPenilaianJaminanController::class, 'dataForDatatables'])->name('data');
+ Route::get('export', [LaporanPenilaianJaminanController::class, 'export'])->name('export');
+ Route::get('/', [LaporanPenilaianJaminanController::class, 'index'])->name('index');
+ });
+
+ Route::prefix('laporan-hasil-penilaian-jaminan-internal-external')->name('laporan-hasil-penilaian-jaminan-internal-external.')->group(function() {
+ Route::get('datatables', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'dataForDatatables'])->name('data');
+ Route::get('export', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'export'])->name('export');
+ Route::get('/', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'index'])->name('index');
+ });
+
});
require __DIR__ . '/registrasi.php';
|