1 Commits

Author SHA1 Message Date
Andy Chaerudin
c79689d370 menambahkan jenis_penilaian_id = 1, yang sama dengan Internal 2024-12-23 18:53:58 +07:00
501 changed files with 11379 additions and 57722 deletions

42
Jenkinsfile vendored
View File

@@ -1,42 +0,0 @@
pipeline {
agent any
environment {
PHP_VERSION = '8.1'
COMPOSER_HOME = "${WORKSPACE}/.composer"
DASHBOARD = '/var/www/lpj'
WORKDIR = '/var/www/lpj/Modules/Lpj'
GIT_SSH_COMMAND = 'ssh -i ~/.ssh/for_gitea -o StrictHostKeyChecking=no'
}
stages {
stage('Checkout') {
steps {
dir("${env.DASHBOARD}") {
sh "composer update daengdeni/lpj-module:dev-staging"
}
}
}
stage('Build Assets') {
steps {
dir("${env.DASHBOARD}") {
sh "npm install"
sh "npm run build"
}
}
}
}
post {
always {
cleanWs()
}
success {
echo 'The pipeline has succeeded!'
}
failure {
echo 'The pipeline has failed.'
}
}
}

View File

@@ -1,63 +0,0 @@
<?php
namespace Modules\Lpj\Emails;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendJadwalKunjunganEmail extends Mailable
{
/**
* ID Penilaian.
*
* @var string
*/
public $id;
/**
* Waktu Penilaian.
*
* @var string
*/
public $waktu_penilaian;
/**
* Deskripsi Penilaian.
*
* @var string
*/
public $deskripsi_penilaian;
/**
* Create a new message instance.
*
* @param array $emailData
* @return void
*/
public function __construct(array $emailData)
{
// Validasi data yang diterima
if (!isset($emailData['emailData']['id']) ||
!isset($emailData['emailData']['waktu_penilaian']) ||
!isset($emailData['emailData']['deskripsi_penilaian'])) {
throw new \InvalidArgumentException("Data email tidak lengkap.");
}
$this->id = $emailData['emailData']['id'];
$this->waktu_penilaian = $emailData['emailData']['waktu_penilaian'];
$this->deskripsi_penilaian = $emailData['emailData']['deskripsi_penilaian'];
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('Jadwal Kunjungan Penilaian Resmi')
->view('lpj::emails.jadwal-kunjungan');
}
}

View File

@@ -19,12 +19,11 @@ class SendPenawaranKJPPEmail extends Mailable
public $districts; public $districts;
public $cities; public $cities;
public $provinces; public $provinces;
public $user; // Tambahkan user ke data yang dikirimkan ke view, sebagai cc dan bcc
/** /**
* Create a new message instance. * Create a new message instance.
*/ */
public function __construct($dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces, $user) public function __construct($dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces)
{ {
// Assign data yang diterima ke properti // Assign data yang diterima ke properti
$this->dp1 = $dp1; $this->dp1 = $dp1;
@@ -34,7 +33,6 @@ class SendPenawaranKJPPEmail extends Mailable
$this->districts = $districts; $this->districts = $districts;
$this->cities = $cities; $this->cities = $cities;
$this->provinces = $provinces; $this->provinces = $provinces;
$this->user = $user; // Tambahkan user ke data yang dikirimkan ke view, sebagai cc dan bcc
} }
/** /**
@@ -52,7 +50,6 @@ class SendPenawaranKJPPEmail extends Mailable
'districts' => $this->districts, 'districts' => $this->districts,
'cities' => $this->cities, 'cities' => $this->cities,
'provinces' => $this->provinces, 'provinces' => $this->provinces,
'user' => $this->user // Tambahkan user ke data yang dikirimkan ke view, sebagai cc dan bcc
]); ]);
} }
} }

View File

@@ -1,49 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\CustomField;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class CustomFieldExport implements WithColumnFormatting, WithHeadings, FromCollection, WithMapping
{
public function collection()
{
return CustomField::all();
}
public function map($row): array
{
return [
$row->id,
$row->name,
$row->type,
$row->created_at,
$row->updated_at,
];
}
public function headings(): array
{
return [
'ID',
'Name',
'Type',
'Created At',
'Updated At',
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DDMMYYYY,
'E' => NumberFormat::FORMAT_DATE_DDMMYYYY,
];
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace Modules\Lpj\app\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Modules\Lpj\app\Models\JenisLampiran;
class JenisLampiranExport implements WithColumnFormatting, WithHeadings, FromCollection, WithMapping
{
public function collection()
{
return JenisLampiran::all();
}
public function map($row): array
{
return [
$row->id,
$row->nama,
$row->deskripsi,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Nama',
'Deskripsi',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -1,70 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\LaporanAdminKredit;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class LaporanAdminKreditExport implements WithColumnFormatting, WithHeadings, FromCollection, WithMapping
{
public function collection()
{
return LaporanAdminKredit::with('debiture')->get();
}
public function map($row): array
{
return [
$row->id,
$row->debiture->cif,
$row->debiture->name,
$row->debiture->branch->name,
$row->kode_register_t24,
$row->jenis_agunan,
$row->bukti_kepemilikan,
$row->alamat_agunan,
$row->nama_pemilik,
$row->tanggal_kunjungan,
$row->nilai_pasar_wajar,
$row->nilai_likuidasi,
$row->nama_penilai,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'CIF',
'Nama Debitur',
'Cabang',
'Kode Register T24',
'Jenis Agunan',
'Bukti Kepemilikan',
'Alamat Agunan',
'Nama Pemilik',
'Tanggal Kunjungan',
'Nilai Pasar Wajar',
'Nilai Likuidasi',
'Nama Penilai',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'B' => NumberFormat::FORMAT_NUMBER,
'J' => NumberFormat::FORMAT_DATE_DDMMYYYY,
'K' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'L' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'M' => NumberFormat::FORMAT_DATE_DATETIME,
];
}
}

View File

@@ -1,305 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithCustomStartCell;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Branch;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class LaporanHasilPenilaianJaminanInternalExternalExport implements FromCollection, WithHeadings, WithMapping, WithTitle, WithCustomStartCell, WithEvents
{
protected $request;
public function __construct($request)
{
$this->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')) {
$startDate = $this->request->start_date ?? '1900-01-01';
$endDate = $this->request->end_date ?? now()->toDateString();
$query->where(function ($q) use ($startDate, $endDate) {
$q->whereHas('penilaian', function ($q2) use ($startDate, $endDate) {
$q2->whereBetween('tanggal_kunjungan', [$startDate, $endDate]);
});
// OR check if has penawaran with date in range
$q->orWhereHas('penawaran', function ($q3) use ($startDate, $endDate) {
$q3->whereBetween('tanggal_penilaian_sebelumnya', [$startDate, $endDate]);
});
});
}
// 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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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->user->name ?? $permohonan->mig_nama_ao ?? '',
$permohonan->debiture->cif ?? '',
$permohonan->debiture->name ?? '',
$permohonan->tujuanPenilaian->name,
$permohonan->jenisPenilaian->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 && $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 && $permohonan->penilaian->tanggal_kunjungan
? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan)
: '',
$permohonan->penilaian->_user_penilai->userPenilaiTeam->name ?? '',
$permohonan->approveSo->name ?? '',
'', // 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);
},
];
}
}

View File

@@ -1,102 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\PermohonanPembatalan;
class LaporanPembatalanExport implements FromCollection, WithHeadings, WithMapping
{
protected $request;
public function __construct(Request $request)
{
$this->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) : '-'
];
}
}

View File

@@ -1,310 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Illuminate\Database\Eloquent\Builder;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Helpers\Lpj;
use Illuminate\Support\Facades\DB;
class LaporanPenilaiJaminanExport implements FromCollection, WithHeadings, WithMapping, ShouldAutoSize
{
protected $request;
public function __construct($request)
{
$this->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')) {
$startDate = $this->request->start_date ?? '1900-01-01';
$endDate = $this->request->end_date ?? now()->toDateString();
$query->where(function ($q) use ($startDate, $endDate) {
$q->whereHas('penilaian', function ($q2) use ($startDate, $endDate) {
$q2->whereBetween('tanggal_kunjungan', [$startDate, $endDate]);
});
// OR check if has penawaran with date in range
$q->orWhereHas('penawaran', function ($q3) use ($startDate, $endDate) {
$q3->whereBetween('tanggal_penilaian_sebelumnya', [$startDate, $endDate]);
});
});
}
// Filter by laporan type if provided
if ($this->request->has('laporan') && is_array($this->request->laporan) && !empty($this->request->laporan)) {
foreach ($this->request->laporan as $type) {
$query->whereHas('penilai', function ($q) use ($type) {
$q->where('type_penilai', 'LIKE', '%' . $type . '%');
});
}
}
// Apply branch filter if provided
if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
$query->where('branch_id', $this->request->branch_id);
}
// Filter by selected IDs if provided
if ($this->request->has('selected_ids') && !empty($this->request->selected_ids)) {
$selectedIds = is_array($this->request->selected_ids) ? $this->request->selected_ids : explode(',', $this->request->selected_ids);
$query->whereIn('id', $selectedIds);
}
// 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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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->user->name ?? $permohonan->mig_nama_ao ?? '',
$permohonan->debiture->cif ?? '',
$permohonan->debiture->name ?? '',
$permohonan->tujuanPenilaian->name,
$permohonan->jenisPenilaian->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 && $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 && $permohonan->penilaian->tanggal_kunjungan
? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan)
: '',
$permohonan->penilaian->_user_penilai->userPenilaiTeam->name ?? '',
$permohonan->approveSo->name ?? '',
$permohonan->penilai->type_penilai?? '',
];
}
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',
'Laporan',
];
}
/**
* @return string
*/
public function title(): string
{
return 'Laporan Hasil Penilaian Jaminan Internal & External';
}
/**
* @return string
*/
public function startCell(): string
{
return 'A7';
}
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);
},
];
}
}

View File

@@ -1,260 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithCustomStartCell;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Branch;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class LaporanPenilaianJaminanExport implements FromCollection, WithHeadings, WithMapping, WithTitle, WithCustomStartCell, WithEvents
{
protected $request;
public function __construct($request)
{
$this->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')) {
$startDate = $this->request->start_date ?? '1900-01-01';
$endDate = $this->request->end_date ?? now()->toDateString();
$query->where(function ($q) use ($startDate, $endDate) {
$q->whereHas('penilaian', function ($q2) use ($startDate, $endDate) {
$q2->whereBetween('tanggal_kunjungan', [$startDate, $endDate]);
});
// OR check if has penawaran with date in range
$q->orWhereHas('penawaran', function ($q3) use ($startDate, $endDate) {
$q3->whereBetween('tanggal_penilaian_sebelumnya', [$startDate, $endDate]);
});
});
}
// 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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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');
dd($query->toSql(), $query->getBindings());
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);
},
];
}
}

View File

@@ -1,98 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\Permohonan;
use Illuminate\Support\Facades\Auth;
class LaporanPermohonanExport implements FromCollection, WithHeadings, WithMapping
{
protected $request;
public function __construct($request)
{
$this->request = $request;
}
public function collection()
{
$query = Permohonan::query();
// Apply role-based filtering
if (!Auth::user()->hasAnyRole(['administrator'])) {
$query->where('branch_id', Auth::user()->branch_id);
}
// 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 status filter if provided
if ($this->request->has('status') && !empty($this->request->status)) {
$query->where('status', $this->request->status);
}
// Apply branch filter if provided
if ($this->request->has('branch_id') && !empty($this->request->branch_id)) {
$query->where('branch_id', $this->request->branch_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();
}
public function map($permohonan): array
{
return [
$permohonan->id,
$permohonan->nomor_registrasi,
$permohonan->tanggal_permohonan,
$permohonan->user ? $permohonan->user->name : '',
$permohonan->branch ? $permohonan->branch->name : '',
$permohonan->tujuanPenilaian ? $permohonan->tujuanPenilaian->name : '',
$permohonan->jenisFasilitasKredit ? $permohonan->jenisFasilitasKredit->name : '',
$permohonan->jenisPenilaian ? $permohonan->jenisPenilaian->name : '',
$permohonan->status,
];
}
public function headings(): array
{
return [
'ID',
'Nomor Registrasi',
'Tanggal Permohonan',
'Pemohon',
'Cabang',
'Tujuan Penilaian',
'Jenis Fasilitas Kredit',
'Jenis Penilaian',
'Status',
];
}
}

View File

@@ -1,232 +0,0 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithCustomStartCell;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Branch;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class LaporanUserLimitExport implements FromCollection, WithHeadings, WithMapping, WithTitle, WithCustomStartCell, WithEvents
{
protected $request;
public function __construct($request)
{
$this->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')) {
$startDate = $this->request->start_date ?? '1900-01-01';
$endDate = $this->request->end_date ?? now()->toDateString();
$query->where(function ($q) use ($startDate, $endDate) {
$q->whereHas('penilaian', function ($q2) use ($startDate, $endDate) {
$q2->whereBetween('tanggal_kunjungan', [$startDate, $endDate]);
});
// OR check if has penawaran with date in range
$q->orWhereHas('penawaran', function ($q3) use ($startDate, $endDate) {
$q3->whereBetween('tanggal_penilaian_sebelumnya', [$startDate, $endDate]);
});
});
}
// 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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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++;
$npw = 0;
if (isset($permohonan->penilai->lpj)) {
$lpj = json_decode($permohonan->penilai->lpj, true);
$npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0);
}
return [
$this->rowNumber,
$permohonan->nomor_registrasi,
$permohonan->debiture->branch->name ?? '',
$permohonan->debiture->name ?? '',
$permohonan->user->name ?? $permohonan->mig_nama_ao ?? '',
$permohonan->tanggal_permohonan ?? '',
$permohonan->penilaian->_user_penilai->userPenilaiTeam->name ?? '',
$permohonan->penilaian && $permohonan->penilaian->tanggal_kunjungan
? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan)
: '',
formatRupiah($npw, 2),
];
}
public function headings(): array
{
return [
'No',
'Nomor Registrasi',
'Cabang',
'Nama Debitur',
'Pemohon',
'Tanggal Permohonan',
'Nama Penilai',
'Tanggal Laporan',
'Nilai Pasar Wajar',
];
}
/**
* @return string
*/
public function title(): string
{
return 'Laporan User Limit';
}
/**
* @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);
},
];
}
}

View File

@@ -2,48 +2,33 @@
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\HolidayCalendar; use Modules\Lpj\Models\HolidayCalendar;
use Modules\Lpj\Models\JenisDokumen;
use Modules\Lpj\Models\Laporan;
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\TeamsUsers; use Modules\Lpj\Models\JenisDokumen;
use Modules\Usermanagement\Models\User;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
function formatTanggalIndonesia($date, $time = false) function formatTanggalIndonesia($date, $time = false)
{ {
Carbon::setLocale('id'); Carbon::setLocale('id');
try { $waktu = Carbon::parse($date);
$waktu = Carbon::parse($date); if (!$time) {
if (!$time) { return $waktu->translatedFormat('d F Y');
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';
} }
function formatRupiah($number, $decimals = 0) function formatRupiah($number)
{ {
$number = (float) $number; $number = (float) $number;
return 'Rp ' . number_format($number, $decimals, ',', '.'); return 'Rp ' . number_format($number, 2, ',', '.');
} }
function formatAlamat($alamat) 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 ?? ''); return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->postal_code ?? '');
} }
// andy add // andy add
@@ -51,10 +36,10 @@
{ {
$penawaran = PenawaranTender::find($id); $penawaran = PenawaranTender::find($id);
$start_date = strtotime($penawaran->start_date); $start_date = strtotime($penawaran->start_date);
$end_date = strtotime($penawaran->end_date); $end_date = strtotime($penawaran->end_date);
$todays_date = strtotime(now()); // $todays_date = strtotime(now());
//$todays_date = strtotime("+1 day", strtotime(now())); $todays_date = strtotime("+1 day", strtotime(now()));
$allow = true; $allow = true;
if ($todays_date >= $start_date && $todays_date <= $end_date) { if ($todays_date >= $start_date && $todays_date <= $end_date) {
@@ -128,49 +113,57 @@
$maxCode = PenawaranTender::max('code'); $maxCode = PenawaranTender::max('code');
// chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
// $penawaran = PenawaranTender::latest()->first(); // $penawaran = PenawaranTender::latest()->first();
$penawaran = PenawaranTender::where('code', '=', $maxCode)->first(); $penawaran = PenawaranTender::where('code','=',$maxCode)->first();
$code_penawaran_last = ''; $code_penawaran_last='';
// nomor di set 0001 // nomor di set 0001
$noUrutAkhirString = sprintf("%04s", 1); $noUrutAkhirString = sprintf("%04s", 1);
if ($penawaran) { if($penawaran)
{
$isNum = substr($maxCode, 2); // memastikan string ke 3 s/d 8 adalan numiric $isNum = substr($maxCode, 2); // memastikan string ke 3 s/d 8 adalan numiric
$isNP = substr($maxCode, 0, 2); $isNP = substr($maxCode, 0, 2);
if ((8 == strlen($maxCode)) && ("NP" == $isNP) && (ctype_digit($isNum))) { if((8 == strlen($maxCode)) && ("NP"==$isNP) && (isNumeric($isNum)))
$code_penawaran_last = substr($maxCode, -4); {
$code_penawaran_last = substr ($maxCode, -4);
$year_penawaran_last = Carbon::parse($penawaran->created_at)->year; $year_penawaran_last = Carbon::parse($penawaran->created_at)->year;
$year_now = Carbon::now()->year; $year_now = Carbon::now()->year;
if ($year_now == $year_penawaran_last) { if ($year_now == $year_penawaran_last) {
$noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1)); $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; return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
} }
// generate last penawaran.no_spk function isNumeric($str)
function onLastnumberCodePenawaranSPK($jenis_laporan_code) {
: string return ctype_digit($str);
}
// generate last penawaran.no_spk
function onLastnumberCodePenawaranSPK($jenis_laporan_code): string
{ {
// 20241124_001 ==> spk_no_core // 20241124_001 ==> spk_no_core
// XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024 // XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024
// 001 / PJ / JKT / XI / FR / 2024 // 001 / PJ / JKT / XI / FR / 2024
$maxCode = PenawaranTender::max('spk_no_core'); $maxCode = PenawaranTender::max('spk_no_core');
$penawaran = PenawaranTender::where('spk_no_core', '=', $maxCode)->first(); $penawaran = PenawaranTender::where('spk_no_core','=',$maxCode)->first();
$no_spk_penawaran_last = ''; $no_spk_penawaran_last='';
$year_penawaran_last = ''; $year_penawaran_last='';
$year_now = Carbon::now()->year; $year_now = Carbon::now()->year;
// nomor di set 001 // nomor di set 001
$noUrutAkhirString = sprintf("%03s", 1); $noUrutAkhirString = sprintf("%03s", 1);
if ($penawaran) { if($penawaran)
$no_spk_penawaran_last = substr($maxCode, -3); {
$year_penawaran_last = substr($maxCode, 0, 4); $no_spk_penawaran_last = substr ($maxCode, -3);
$year_penawaran_last = substr ($maxCode, 0, 4);
if ($year_now == $year_penawaran_last) { if($year_now == $year_penawaran_last)
{
$noUrutAkhirString = sprintf("%03s", abs($no_spk_penawaran_last + 1)); $noUrutAkhirString = sprintf("%03s", abs($no_spk_penawaran_last + 1));
} }
// jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 001 // jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 001
@@ -178,68 +171,90 @@
$month = onRomawi(Carbon::now()->month); $month = onRomawi(Carbon::now()->month);
$lastSPK = $noUrutAkhirString . ' / PJ / JKT / ' . $month . ' / ' . $jenis_laporan_code . ' / ' . $year_now; $lastSPK = $noUrutAkhirString.' / PJ / JKT / '. $month .' / ' .$jenis_laporan_code.' / '.$year_now;
return $lastSPK; return $lastSPK;
} }
function onRomawi(int $bln) function onRomawi(int $bln): string
: string
{ {
return convertToRoman($bln); 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 = [
"",
"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));
} }
return $temp;
} }
function terbilang($nilai) function penyebut($nilai) {
{ $nilai = abs($nilai);
if ($nilai < 0) { $huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas");
$hasil = "minus " . trim(penyebut($nilai)); $temp = "";
} else { if ($nilai < 12) {
$hasil = trim(penyebut($nilai)); $temp = " ". $huruf[$nilai];
} } else if ($nilai <20) {
return $hasil; $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));
}
return $temp;
}
function terbilang($nilai) {
if($nilai<0) {
$hasil = "minus ". trim(penyebut($nilai));
} else {
$hasil = trim(penyebut($nilai));
}
return $hasil;
}
// andy add // andy add
@@ -262,44 +277,25 @@
return $hariKerja; return $hariKerja;
} }
function holidays()
{
return HolidayCalendar::pluck('date')->map(
function ($item) {
return Carbon::parse($item)->format('Y-m-d');
},
)->toArray();
}
function countPermohonanForUser($userId) function countPermohonanForUser($userId)
{ {
$validStatuses = [ return Penilaian::whereHas('userPenilai', function ($query) use ($userId) {
'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); $query->where('user_id', $userId);
}) })
->whereHas('permohonan', function ($query) use ($validStatuses) { ->whereHas('permohonan', function ($query) {
$query->whereIn('status', $validStatuses); $query->where('status', 'assign');
}) })
->get() ->count();
->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();
} }
@@ -315,377 +311,3 @@
return $maxSizeInKB; 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;
}
}
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));
return $labelCache[$key];
}
function calculateSLA($permohonan, $type)
{
if (!$type) {
return 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 string $key
* @param int $jenisLegalitas
*
* @return int
*/
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) {
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];
}
}
}
}
}
}
}
return $total > 0 ? $total : 0;
}
function ubahNomorHp($nomorHp)
{
$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;
} else {
return "Nomor HP tidak valid";
}
}
function parsePembandingMigration($keterangan) {
$keterangan = preg_replace('/[-]{5,}/', '',$keterangan); // Hapus ------
$keterangan = preg_replace('/[.]{5,}/', '',$keterangan); // Hapus .....
$keterangan = preg_replace('/\s+/', ' ',$keterangan);
$keterangan = preg_replace('/\s*\n\s*/', "\n",$keterangan);
// Pecah teks per baris untuk diproses
$lines = explode("\n",$keterangan);
$cleaned = [];
foreach ($lines as $line) {
$line = trim($line);
if (!empty($line)) {
// Format angka dalam format Rp. 123.456.789
$line = preg_replace_callback('/Rp\.\s*([\d.,]+)/', function($matches) {
$angka = str_replace(['.', ','], '', $matches[1]);
return 'Rp. ' . number_format((int)$angka, 0, ',', '.');
}, $line);
// Jika ada tanda pagar (#), pisahkan menjadi baris baru
$line = str_replace('#', "\n#", $line);
$cleaned[] = $line;
}
}
return implode("\n", $cleaned);
}
/**
* get full path to internal storage file or external storage file
*
* @param string $path
* @return string
*/
function getFilePath($path)
{
// define base path external storage (use .env) example: 'F:\path\to\storage' in windows
$externalBase = env('EXTERNAL_STORAGE_BASE_PATH', 'F:LPJ/lpj/LPJ Gambar/001/');
$segments = explode('/', $path);
if(strtoupper($segments[0]) === 'SURVEYOR'){
$year = $segments[1];
$month = ucfirst(strtolower($segments[2]));
$date = $segments[3];
$code = $segments[4];
$file = $segments[5] ?? '';
$extenalFullpath = $externalBase . $year . '/' . $month . '/' . $date . '/' . $code . '/' . $file;
if(File::exists($extenalFullpath)){
return $extenalFullpath;
}
}
// if not found in external storage, try to find in internal storage
if (Storage::exists($path)) {
return Storage::url('app/' . $path);
}
return $path;
}
function parseTimestamp(?string $timestamp): ?string
{
if (!$timestamp) {
return null;
}
// Trim whitespace dan normalize
$timestamp = trim($timestamp);
// Log untuk debugging
Log::info('Mencoba parsing timestamp: "' . $timestamp . '"');
// Parsing dengan DateTime native PHP untuk lebih robust
try {
// Pattern untuk format d/m/Y H:i:s
if (preg_match('/^(\d{1,2})\/(\d{1,2})\/(\d{4})\s+(\d{1,2}):(\d{1,2}):(\d{1,2})$/', $timestamp, $matches)) {
$day = (int) $matches[1];
$month = (int) $matches[2];
$year = (int) $matches[3];
$hour = (int) $matches[4];
$minute = (int) $matches[5];
$second = (int) $matches[6];
// Validasi nilai
if ($day >= 1 && $day <= 31 && $month >= 1 && $month <= 12 && $year >= 1900 && $year <= 2100 &&
$hour >= 0 && $hour <= 23 && $minute >= 0 && $minute <= 59 && $second >= 0 && $second <= 59) {
// Buat DateTime object langsung
$dateTime = new \DateTime();
$dateTime->setDate($year, $month, $day);
$dateTime->setTime($hour, $minute, $second);
$result = $dateTime->format('Y-m-d H:i:s');
Log::info('Berhasil parsing dengan DateTime: ' . $timestamp . ' -> ' . $result);
return $result;
}
}
// Pattern untuk format d/m/Y tanpa waktu
if (preg_match('/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/', $timestamp, $matches)) {
$day = (int) $matches[1];
$month = (int) $matches[2];
$year = (int) $matches[3];
// Validasi nilai
if ($day >= 1 && $day <= 31 && $month >= 1 && $month <= 12 && $year >= 1900 && $year <= 2100) {
// Buat DateTime object langsung
$dateTime = new \DateTime();
$dateTime->setDate($year, $month, $day);
$dateTime->setTime(0, 0, 0);
$result = $dateTime->format('Y-m-d H:i:s');
Log::info('Berhasil parsing tanpa waktu dengan DateTime: ' . $timestamp . ' -> ' . $result);
return $result;
}
}
} catch (\Exception $e) {
Log::error('Gagal parsing dengan DateTime: ' . $timestamp . '. Error: ' . $e->getMessage());
}
// Fallback ke format Carbon standar untuk format lainnya
$formats = [
'Y-m-d H:i:s',
'Y-m-d',
'd-m-Y H:i:s',
'd-m-Y',
'j-n-Y H:i:s',
'j-n-Y',
];
foreach ($formats as $format) {
try {
$carbon = \Carbon\Carbon::createFromFormat($format, $timestamp);
if ($carbon && $carbon->format($format) === $timestamp) {
// Jika format tidak mengandung waktu, set ke awal hari
if (!str_contains($format, 'H:i:s')) {
$carbon = $carbon->startOfDay();
}
Log::info('Berhasil parsing dengan format ' . $format . ': ' . $timestamp . ' -> ' . $carbon->toDateTimeString());
return $carbon->toDateTimeString();
}
} catch (\Exception $e) {
// Lanjut ke format berikutnya
continue;
}
}
Log::error('Tidak dapat memparsing timestamp dengan format apapun: "' . $timestamp . '"');
return null;
}

View File

@@ -4,7 +4,6 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use Exception;
use Carbon\Carbon;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
@@ -14,8 +13,6 @@ use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Exports\PermohonanExport; use Modules\Lpj\Exports\PermohonanExport;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\Teams;
use Illuminate\Support\Facades\DB;
class ActivityController extends Controller class ActivityController extends Controller
{ {
@@ -48,193 +45,40 @@ class ActivityController extends Controller
$teamId = $userTeam?->teams_id; $teamId = $userTeam?->teams_id;
} }
$teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles']) $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles'])
->whereHas('team', function ($q) use ($regionId, $teamId) { ->whereHas('team', function ($q) use ($regionId, $teamId) {
$q->when($regionId, fn ($q) => $q->where('regions_id', $regionId)) $q->when($regionId, fn($q) => $q->where('regions_id', $regionId))
->when($teamId, fn ($q) => $q->where('id', $teamId)); ->when($teamId, fn($q) => $q->where('id', $teamId));
}) })
->where('user_id', '!=', $user->id) ->where('user_id', '!=', $user->id)
->whereHas('user.roles', fn ($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai'])) ->whereHas('user.roles', fn($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai']))
->get(); ->get();
$teamId = is_array($teamId) ? $teamId : [$teamId]; return view('lpj::activity.progres_activity.index', compact('teamsActivity'));
$teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn(
'id',
$teamId
)->get();
return view('lpj::activity.progres_activity.index', compact('teamsActivity', 'teamPenilai'));
} }
public function updateTeamAssingment(Request $request) function updateTeamAssingment(Request $request) {
{
try { try {
$id = $request->input('id');
// dd($request->all()); $user = PenilaianTeam::where('penilaian_id', $id)->get();
$validatedData = $request->validate([ if ($user) {
'id' => 'required|integer', // penilaian_id foreach ($user as $item) {
'team_member_id' => 'nullable|integer', if($item->role == 'surveyor') {
'region_id' => 'nullable|integer', $item->update(['user_id' => $request->surveyor_id]);
'permohonan_id' => 'required|integer',
'user_id' => 'required|integer',
'team_id' => 'required|integer',
'penugasan' => 'required|string',
], [
'team_member_id.required_without' => 'Field team harus diisi.',
'.required_without' => 'Field harus diisi.',
]);
$penilaianId = $validatedData['id'];
$teamMemberId = $validatedData['team_member_id'] ?? null;
$regionId = $validatedData['region_id'] ?? null;
$permohonanId = $validatedData['permohonan_id'];
$userId = $validatedData['user_id'];
$teamId = $validatedData['team_id'];
$penugasan = $validatedData['penugasan'];
// Cek apakah permohonan ada
$permohonan = Permohonan::findOrFail($permohonanId);
// Validasi status permohonan
// if ($permohonan->status !== 'assign' && $permohonan->status !== 'proses-survey' && $permohonan->status !== 'survey' && $permohonan->status !== 'proses-laporan') {
// return response()->json([
// 'status' => 'error',
// 'message' => 'Tidak dapat mengganti tim, status permohonan tidak memungkinkan.',
// ]);
// }
// Ambil tim berdasarkan penilaian_id dan user_id
if ($penugasan === 'sama') {
$teams = PenilaianTeam::where('penilaian_id', $penilaianId)
->where('user_id', $userId)
->get();
// Cek apakah tim ditemukan
if ($teams->isEmpty()) {
return response()->json([
'status' => 'error',
'message' => 'Data tim tidak ditemukan.',
]);
}
// Mulai transaksi
DB::beginTransaction();
$updated = false;
$status_permohonan = $permohonan->status;
// Proses update berdasarkan region_id
if ($regionId) {
foreach ($teams as $team) {
if ($team->role === 'surveyor') {
$team->update([
'team_id' => $regionId,
'user_id' => null,
'status' => $status_permohonan,
]);
$permohonan->update([
'status' => 'reassign'
]);
$updated = true;
}
if ($team->role === 'penilai') {
$team->update([
'team_id' => $regionId,
'user_id' => null,
'status' => $status_permohonan
]);
$permohonan->update([
'status' => 'reassign',
'region_id' => $regionId,
]);
$updated = true;
}
}
}
// Proses update berdasarkan team_member_id
if ($teamMemberId) {
foreach ($teams as $team) {
if ($team->role === 'surveyor' || $team->role === 'penilai') {
$team->update(['user_id' => $teamMemberId]);
$updated = true;
}
} }
} }
return redirect()->route('activity.progres.index')->with('success', 'Surveyor berhasil diganti');
} }
if ($penugasan === 'surveyor' || $penugasan === 'penilai') {
$teams = PenilaianTeam::where('penilaian_id', $penilaianId)
->where('user_id', $userId)
->where('role', $penugasan)
->first();
// Cek apakah tim ditemukan
if (!$teams) {
return response()->json([
'status' => 'error',
'message' => 'Data tim tidak ditemukan.',
]);
}
// Mulai transaksi
DB::beginTransaction();
$updated = false;
// Proses update berdasarkan region_id
if ($regionId) {
$teams->update([
'team_id' => $regionId,
'user_id' => null
]);
$permohonan->update([
'status' => $status_permohonan,
'region_id' => $regionId,
]);
$updated = true;
}
// Proses update berdasarkan team_member_id
if ($teamMemberId) {
$teams->update(['user_id' => $teamMemberId]);
$updated = true;
}
}
if ($updated) {
DB::commit();
return response()->json([
'status' => 'success',
'message' => 'Data tim berhasil diperbarui.',
]);
}
DB::rollBack();
return response()->json([
'status' => 'error',
'message' => 'Tidak ada perubahan yang dilakukan.',
]);
} catch (\Throwable $th) { } catch (\Throwable $th) {
// Rollback transaksi jika terjadi error return redirect()->route('activity.progres.index')->with('success', $th->getMessage());
DB::rollBack();
return response()->json([
'status' => 'error',
'message' => 'Terjadi kesalahan: ' . $th->getMessage(),
], 500);
} }
} }
public function senior() public function senior()
{ {
return view('lpj::activity.senior_officer.index'); return view('lpj::activity.senior_officer.index');
@@ -293,20 +137,10 @@ class ActivityController extends Controller
// abort(403, 'Sorry! You are not allowed to view users.'); // abort(403, 'Sorry! You are not allowed to view users.');
} }
$userRole = $user->roles->pluck('name')->first();
$regionId = null;
// If user is senior-officer, get their regionId
if ($userRole === 'senior-officer') {
$userTeam = TeamsUsers::with('team')->firstWhere('user_id', $user->id);
$regionId = $userTeam?->team->regions_id;
}
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query(); $query = Permohonan::query();
// Apply search filter if provided // Apply search filter if provided
$query = $query->orderBy('nomor_registrasi', 'desc');
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
@@ -325,9 +159,7 @@ class ActivityController extends Controller
}); });
} }
// Default sorting if no sort provided
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder'); $order = $request->get('sortOrder');
$column = $request->get('sortField'); $column = $request->get('sortField');
@@ -336,57 +168,48 @@ class ActivityController extends Controller
$query->orderBy('nomor_registrasi', 'asc'); $query->orderBy('nomor_registrasi', 'asc');
} }
// Get the total count of records // Get total count of records before pagination
$totalRecords = $query->count(); $totalRecords = $query->count();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// Filter by region if user is senior-officer // Pagination
if ($regionId) {
$query->whereHas('region', function ($q) use ($regionId) {
$q->where('region_id', $regionId);
});
}
// Filter for specific roles
if (in_array($userRole, ['surveyor', 'penilai'])) {
$query->whereHas('penilaian.userPenilai', function ($q) use ($user) {
$q->where('user_id', $user->id);
});
}
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) { if ($request->has('page') && $request->has('size')) {
$page = $request->get('page'); $page = (int) $request->get('page', 1);
$size = $request->get('size'); $size = (int) $request->get('size', 10);
$offset = ($page - 1) * $size; // Calculate the offset $offset = ($page - 1) * $size;
$query->skip($offset)->take($size); $query->skip($offset)->take($size);
} }
// Get the filtered count of records // Get filtered count
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get data with necessary relationships // Get data
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'dokumenjaminan','nilaiPlafond'])->get();
// Calculate the page count $data = null;
$pageCount = ceil($totalRecords / $size); $userRole = $user->roles[0]->name ?? null;
// Calculate the current page number if (in_array($userRole, ['surveyor', 'surveyor-penilai'])) {
$currentPage = max(1, $request->get('page', 1)); $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian',])
->whereHas('penilaian.userPenilai', function ($q) use ($user) {
$q->where('user_id', $user->id);
})
->get();
} else {
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])
->get();
}
// Calculate total pages
$pageCount = ceil($totalRecords / $request->get('size', 10));
// Return the response data as a JSON object
return response()->json([ return response()->json([
'draw' => $request->get('draw'), 'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords, 'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords, 'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount, 'pageCount' => $pageCount,
'page' => $currentPage, 'page' => $request->get('page', 1),
'totalCount' => $totalRecords, 'totalCount' => $totalRecords,
'data' => $data, 'data' => $data,
]); ]);
@@ -423,36 +246,12 @@ class ActivityController extends Controller
'permohonan.debiture', 'permohonan.debiture',
'permohonan.tujuanPenilaian', 'permohonan.tujuanPenilaian',
'permohonan.debiture.documents.jenisJaminan', 'permohonan.debiture.documents.jenisJaminan',
'userPenilai' => function ($query) use ($id) { 'userPenilai'
$query->where('user_id', $id);
},
'permohonan.penilai',
'permohonan.approveEo',
'permohonan.approveDd',
'permohonan.approveSo',
]) ])
->whereHas('userPenilai', function ($q) use ($id) { ->whereHas('userPenilai', function ($q) use ($id) {
$q->where('user_id', $id); $q->where('user_id', $id);
}) })->whereHas('permohonan', function ($q) {
->whereHas('permohonan', function ($q) { $q->where('status', 'assign');
$q->whereIn('status', [
'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'
]);
}); });
@@ -483,104 +282,6 @@ class ActivityController extends Controller
// Ambil data dengan pagination // Ambil data dengan pagination
$data = $query->skip($offset)->take($size)->get(); $data = $query->skip($offset)->take($size)->get();
$data = $data->map(function ($item) {
$jeniAsset = null;
$statusPembayaran = trim(strtolower($item->permohonan->status_bayar ?? ''));
$tujuanPenilaian = $item->permohonan->tujuanPenilaian->name ?? null;
$plafond = $item->permohonan->nilaiPlafond->name ?? null;
$now = Carbon::now();
$type_report = $item->permohonan->penilai->type ?? "";
$hari = $hariPaparan = 0;
if ($type_report == "sederhana") {
$hari = 2;
$item->paparan = 'Tidak Ada';
} else {
if ($plafond == '< 2M') {
$item->paparan = 'Tidak Ada';
$hari = 3;
} elseif ($plafond == '2 M - 5 M') {
$hari = 3;
$hariPaparan = 2;
} else {
$hari = 5;
$hariPaparan = 3;
}
}
if ($tujuanPenilaian == 'RAP') {
$hari = 2;
$hariPaparan = 2;
}
if ($item->permohonan && $item->permohonan->debiture) {
$jeniAsset = $item->permohonan->debiture->documents->first() ?? null;
}
/*$hariTambahan = 0;
if ($tujuanPenilaian == 'RAP') {
$hariTambahan = 2;
} else {
if ($statusPembayaran == 'sudah_bayar') {
$hariTambahan = 1; // H+1 untuk yang sudah bayar
} else {
$hariTambahan = 2; // H+2 untuk yang belum bayar
}
}*/
$tanggalMulai = $item->waktu_penilaian;
if ($tanggalMulai) {
if (!$tanggalMulai instanceof Carbon) {
$tanggalMulai = Carbon::parse($tanggalMulai);
}
$hariKerjaBerikutnya = hitungHariKerja($tanggalMulai->toDateString(), $tanggalMulai->copy()->addDays(1));
$hariKerjaBerikutnya = max($hariKerjaBerikutnya, 1);
$tanggalMulai = $tanggalMulai->copy()->addDays($hariKerjaBerikutnya);
// Konversi string tanggal ke objek Carbon jika belum
if (!$tanggalMulai instanceof Carbon) {
$tanggalMulai = Carbon::parse($tanggalMulai);
}
// Hitung tanggal selesai berdasarkan hari tambahan
$tanggalSelesai = $tanggalMulai->copy()->addDays($hari);
$tanggalPaparan = $tanggalMulai->copy()->addDays($hariPaparan);
// Hitung hari kerja
$hariKerja = hitungHariKerja($tanggalMulai->toDateString(), $tanggalSelesai->toDateString());
$hariKerja = max($hariKerja, $hari);
$hariKerjaPaparan = hitungHariKerja($tanggalMulai->toDateString(), $tanggalPaparan->toDateString());
$hariKerjaPaparan = max($hariKerjaPaparan, $hariPaparan);
// Set due date SLA
$dueDateSla = $tanggalMulai->copy()->addDays($hariKerja);
$dueDateSlaPaparan = $tanggalMulai->copy()->addDays($hariKerjaPaparan);
// Cek apakah sudah melewati due date
/*if ($now->greaterThan($dueDateSla)) {
$item->due_date_sla = null;
} else {
$item->due_date_sla = $dueDateSla->toDateString();
}*/
$item->due_date_sla = $dueDateSla->toDateString();
$item->paparan = $dueDateSlaPaparan->toDateString();
} else {
$item->due_date_sla = null;
$item->paparan = null;
}
return $item;
});
$filteredRecords = $data->count(); $filteredRecords = $data->count();
$pageCount = ceil($totalRecords / $size); $pageCount = ceil($totalRecords / $size);

View File

@@ -1,311 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Log;
use Modules\Location\Models\Province;
use Modules\Lpj\Http\Requests\BankDataRequest;
use Modules\Lpj\Models\BankData;
use Modules\Lpj\Models\Inspeksi;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Services\BankDataService;
class BankDataController extends Controller
{
protected $bankDataService;
protected $user;
public function __construct(BankDataService $bankDataService)
{
$this->bankDataService = $bankDataService;
}
public function index(Request $request)
{
$provinces = Province::all();
$jenisJaminan = JenisJaminan::all();
//insert data pembanding
$inspeksi = Inspeksi::all();
foreach ($inspeksi as $item) {
if (isset($item->data_pembanding)) {
$data_pembanding = json_decode($item->data_pembanding);
$objekPenilaian = $data_pembanding->objek_penilaian;
if (isset($objekPenilaian)) {
$_lat = $objekPenilaian->kordinat_lat;
$_lng = $objekPenilaian->kordinat_lng;
if (!empty($_lat) && !empty($_lng) && $_lng !== null && $_lat !== null && $_lat !== '' && $_lng !== '') {
$_lat = floatval($_lat);
$_lng = floatval($_lng);
if ($_lat >= -90 && $_lat <= 90 && $_lng >= -180 && $_lng <= 180) {
$_data = [
'address' => $objekPenilaian->address,
'village_code' => $objekPenilaian->village_code,
'district_code' => $objekPenilaian->district_code,
'city_code' => $objekPenilaian->city_code,
'province_code' => $objekPenilaian->province_code,
'tahun' => $item->created_at->format('Y'),
//
'luas_tanah' => isset($objekPenilaian->luas_tanah) && is_numeric($objekPenilaian->luas_tanah) ? $objekPenilaian->luas_tanah : 0,
'luas_bangunan' => isset($objekPenilaian->luas_bangunan) && is_numeric($objekPenilaian->luas_bangunan) ? $objekPenilaian->luas_bangunan : 0,
//
'tahun_bangunan' => isset($objekPenilaian->tahun_bangunan) && is_numeric($objekPenilaian->tahun_bangunan) ? $objekPenilaian->tahun_bangunan : 0,
//
'harga' => isset($objekPenilaian->harga) && is_numeric($objekPenilaian->harga) ? $objekPenilaian->harga : 0,
'harga_diskon' => isset($objekPenilaian->harga_diskon) && is_numeric($objekPenilaian->harga_diskon) ? $objekPenilaian->harga_diskon : 0,
'diskon' => isset($objekPenilaian->diskon) && is_numeric(str_replace(',', '.', $objekPenilaian->diskon)) ? str_replace(',', '.', $objekPenilaian->diskon) : 0,
'total' => isset($objekPenilaian->total) && is_numeric($objekPenilaian->total) ? $objekPenilaian->total : 0,
'harga_penawaran' => isset($objekPenilaian->harga_penawaran) && is_numeric($objekPenilaian->harga_penawaran) ? $objekPenilaian->harga_penawaran : 0,
'nama_nara_sumber' => $objekPenilaian->nama_nara_sumber,
'peruntukan' => $objekPenilaian->peruntukan ?? "",
//
'penawaran' => $objekPenilaian->penawaran ?? "",
//
'telepon' => $objekPenilaian->telepon ?? "",
'hak_properti' => $objekPenilaian->hak_properti ?? "",
'jenis_aset' => $objekPenilaian->jenis_aset ?? "",
'foto_objek' => $objekPenilaian->foto_objek ?? "",
'tanggal' => $objekPenilaian->tanggal ?? null,
'kategori' => 'penilaian',
];
BankData::updateOrCreate(
[
'kordinat_lat' => $_lat,
'kordinat_lng' => $_lng,
'kategori' => 'penilaian'
],
$_data
);
}
} else {
// Invalid coordinates
Log::warning("Invalid coordinates: Lat: $_lat, Lng: $_lng");// Do something to handle this situation, such as logging an error or skipping the record
}
}
foreach ($data_pembanding->data_pembanding as $dataPembanding) {
$lat = $dataPembanding->kordinat_lat;
$lng = $dataPembanding->kordinat_lng;
if (!empty($lat) && !empty($lng) && $lng !== null && $lat !== null && $lat !== '' && $lng !== '') {
$lat = floatval($lat);
$lng = floatval($lng);
if ($lat >= -90 && $lat <= 90 && $lng >= -180 && $lng <= 180) {
$data = [
'address' => $dataPembanding->address,
'village_code' => $dataPembanding->village_code,
'district_code' => $dataPembanding->district_code,
'city_code' => $dataPembanding->city_code,
'province_code' => $dataPembanding->province_code,
'tahun' => isset($dataPembanding->tahun) && is_numeric($dataPembanding->tahun) ? $dataPembanding->tahun : 0,
'luas_tanah' => isset($dataPembanding->luas_tanah) && is_numeric($dataPembanding->luas_tanah) ? $dataPembanding->luas_tanah : 0,
'luas_bangunan' => isset($dataPembanding->luas_bangunan) && is_numeric($dataPembanding->luas_bangunan) ? $dataPembanding->luas_bangunan : 0,
'tahun_bangunan' => isset($dataPembanding->tahun_bangunan) && is_numeric($dataPembanding->tahun_bangunan) ? $dataPembanding->tahun_bangunan : 0,
'harga' => isset($dataPembanding->harga) && is_numeric($dataPembanding->harga) ? $dataPembanding->harga : 0,
'harga_diskon' => isset($dataPembanding->harga_diskon) && is_numeric($dataPembanding->harga_diskon) ? $dataPembanding->harga_diskon : 0,
'diskon' => isset($dataPembanding->diskon) && is_numeric(str_replace(',', '.', $dataPembanding->diskon)) ? str_replace(',', '.', $dataPembanding->diskon) : 0,
'total' => isset($dataPembanding->total) && is_numeric($dataPembanding->total) ? $dataPembanding->total : 0,
'harga_penawaran' => isset($dataPembanding->harga_penawaran) && is_numeric($dataPembanding->harga_penawaran) ? $dataPembanding->harga_penawaran : 0,
'nama_nara_sumber' => $dataPembanding->nama_nara_sumber,
'peruntukan' => $dataPembanding->peruntukan,
'penawaran' => $dataPembanding->penawaran,
'telepon' => $dataPembanding->telepon,
'hak_properti' => $dataPembanding->hak_properti,
'jenis_aset' => $dataPembanding->jenis_aset,
'foto_objek' => $dataPembanding->foto_objek,
'tanggal' => $dataPembanding->tanggal,
'kategori' => 'data_pembanding',
];
BankData::updateOrCreate(
[
'kordinat_lat' => $lat,
'kordinat_lng' => $lng,
'kategori' => 'data_pembanding'
],
$data
);
}
} else {
// Invalid coordinates
Log::warning("Invalid coordinates: Lat: $lat, Lng: $lng");// Do something to handle this situation, such as logging an error or skipping the record
}
}
}
}
return view('lpj::bank-data.index', compact('provinces', 'jenisJaminan'));
}
public function create()
{
return view('lpj::bank-data.create');
}
public function store(BankDataRequest $request)
{
$data = $request->validated();
$bankData = $this->bankDataService->createBankData($data);
return redirect()
->route('lpj.bank-data.show', $bankData->id)
->with('success', 'Bank data created successfully.');
}
public function show($id)
{
$bankData = $this->bankDataService->findBankData($id);
return view('lpj::bank-data.show', compact('bankData'));
}
public function edit($id)
{
$bankData = $this->bankDataService->findBankData($id);
return view('lpj::bank-data.edit', compact('bankData'));
}
public function update(BankDataRequest $request, $id)
{
$data = $request->validated();
$bankData = $this->bankDataService->updateBankData($id, $data);
return redirect()
->route('lpj.bank-data.show', $bankData->id)
->with('success', 'Bank data updated successfully.');
}
public function destroy($id)
{
$this->bankDataService->deleteBankData($id);
return redirect()->route('lpj.bank-data.index')->with('success', 'Bank data deleted successfully.');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('bank-data.view')) {
//abort(403, 'Sorry! You are not allowed to view bank data.');
}
// Retrieve data from the database
$query = BankData::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$search = json_decode($search, true);
if (is_array($search)) {
if ($search['province_code']) {
$query->ofProvince($search['province_code']);
}
if ($search['kategori']) {
$query->where('kategori', $search['kategori']);
}
if ($search['city_code']) {
$query->ofCity($search['city_code']);
}
if ($search['district_code']) {
$query->ofDistrict($search['district_code']);
}
if ($search['village_code']) {
$query->ofVillage($search['village_code']);
}
if ($search['jenis_asset']) {
$query->ofAssetType($search['jenis_asset']);
}
if ($search['tahun']) {
$query->where('tahun', $search['tahun']);
}
if ($search['start_date'] && $search['end_date']) {
$query->betweenDates($search['start_date'], $search['end_date']);
}
} else {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('jenis_aset', 'LIKE', '%' . $search . '%');
});
}
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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();
// Format the data as needed
$formattedData = $data->map(function ($item) {
return [
'id' => $item->id,
'jenis_aset' => $item->jenis_aset,
'tanggal' => $item->tanggal ? $item->tanggal->format('d-m-Y') : '-',
'tahun' => $item->tahun,
'luas_tanah' => $item->luas_tanah,
'luas_bangunan' => $item->luas_bangunan,
'harga' => $item->harga,
'sumber' => $item->kategori ? ucwords(str_replace('_', ' ', $item->kategori)) : '-',
'kategori' => $item->kategori ?? 'data_pembanding',
'nilai_pasar' => $item->nilai_pasar,
'location' => $item->kordinat_lat . ', ' . $item->kordinat_lng,
'address' => formatAlamat($item),
'photos' => json_decode($item->foto_objek, true) ?: [$item->foto_objek],
// Add more fields as needed
];
});
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = $request->get('page', 1);
// Ensure current page doesn't exceed page count
$currentPage = min($currentPage, $pageCount);
// 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' => $formattedData,
]);
}
}

View File

@@ -1,152 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\CategoryDaftarPustaka;
use Modules\Lpj\Http\Requests\CategoryDaftarPustakaRequest;
class CategoryDaftarPustakaController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::category-daftar-pustaka.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::category-daftar-pustaka.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(CategoryDaftarPustakaRequest $request)
{
$validated = $request->validated();
if ($validated) {
try {
CategoryDaftarPustaka::create($validated);
return redirect()->route('category-daftar-pustaka.index')->with('success', 'Data Berhasil Disimpan');
} catch (\Throwable $th) {
return redirect()->route('category-daftar-pustaka.index')->with('error', $th->getMessage());
}
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
$category = CategoryDaftarPustaka::where('id', $id)->first();
return view('lpj::category-daftar-pustaka.show', compact('category'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
return view('lpj::category-daftar-pustaka.create', ['category' => CategoryDaftarPustaka::where('id', $id)->first()]);
}
/**
* Update the specified resource in storage.
*/
public function update(CategoryDaftarPustakaRequest $request, $id)
{
$validated = $request->validated();
if ($validated) {
try {
CategoryDaftarPustaka::where('id', $id)->update($validated);
return redirect()->route('category-daftar-pustaka.index')->with('success', 'Data Berhasil Disimpan');
} catch (\Throwable $th) {
return redirect()->route('category-daftar-pustaka.index')->with('error', $th->getMessage());
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
CategoryDaftarPustaka::where('id', $id)->delete();
return response()->json(['success' => true, 'message' => 'Data Berhasil Dihapus']);
} catch (\Throwable $th) {
return response()->json(['success' => false, 'message' => $th->getMessage()]);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('jenis_aset.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = CategoryDaftarPustaka::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 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,
]);
}
}

View File

@@ -1,153 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\CustomFieldExport;
use Modules\Lpj\Http\Requests\CustomFieldRequest;
use Modules\Lpj\Models\CustomField;
class CustomFieldController extends Controller
{
public $user;
public function index()
{
return view('lpj::custom_fields.index');
}
public function store(CustomFieldRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
CustomField::create($validate);
return redirect()
->route('basicdata.custom-field.index')
->with('success', 'Custom Field created successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.custom-field.create')
->with('error', $e->getMessage());
}
}
}
public function create()
{
$urutan_prioritas = CustomField::max('urutan_prioritas')+1;
return view('lpj::custom_fields.create', compact('urutan_prioritas'));
}
public function edit($id)
{
$customField = CustomField::find($id);
$urutan_prioritas = $customField->urutan_prioritas ?? CustomField::max('urutan_prioritas')+1;
return view('lpj::custom_fields.create', compact('customField', 'urutan_prioritas' ));
}
public function update(CustomFieldRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Update in database
$customField = CustomField::find($id);
$customField->update($validate);
return redirect()
->route('basicdata.custom-field.index')
->with('success', 'Custom Field updated successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.custom-field.edit', $id)
->with('error', 'Failed to update custom field');
}
}
}
public function destroy($id)
{
try {
// Delete from database
$customField = CustomField::find($id);
$customField->delete();
echo json_encode(['success' => true, 'message' => 'Custom Field deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete custom field']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('custom_fields.view')) {
//abort(403, 'Sorry! You are not allowed to view custom fields.');
}
// Retrieve data from the database
$query = CustomField::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('name', 'LIKE', "%$search%");
$q->orWhere('label', 'LIKE', "%$search%");
$q->orWhere('type', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 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()
{
return Excel::download(new CustomFieldExport, 'custom_fields.xlsx');
}
}

View File

@@ -1,129 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\CategoryDaftarPustaka;
use Modules\Lpj\Services\DaftarPustakaService;
use Modules\Lpj\Http\Requests\DaftarPustakaRequest;
class DaftarPustakaController extends Controller
{
private $daftarPustaka;
public function __construct()
{
$this->daftarPustaka = app(DaftarPustakaService::class);
}
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$categories = CategoryDaftarPustaka::all();
$daftar_pustaka = $this->daftarPustaka->getAllDaftarPustaka($request);
return view('lpj::daftar-pustaka.index', [
'categories' => $categories,
'daftar_pustaka' => $daftar_pustaka,
'page' => $daftar_pustaka->currentPage(),
'pageCount' => $daftar_pustaka->lastPage(),
'limit' => $daftar_pustaka->perPage(),
'total' => $daftar_pustaka->total(),
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$categories = CategoryDaftarPustaka::all();
// dd($categories);
return view('lpj::daftar-pustaka.create', compact('categories'));
}
/**
* Store a newly created resource in storage.
*/
public function store(DaftarPustakaRequest $request)
{
$validate = $request->validated();
// dd($validate);
$file = $request->file('attachment');
if ($validate) {
try {
// Save to database
$this->daftarPustaka->storeDaftarPustaka($validate, $file);
return redirect()
->route('daftar-pustaka.index')
->with('success', 'Daftar Pustaka created successfully');
} catch (Exception $e) {
return redirect()
->route('daftar-pustaka.create')
->with('error', 'Failed to create daftar pustaka');
}
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
$daftarPustaka = $this->daftarPustaka->getDaftarPustakaById($id);
$categories = CategoryDaftarPustaka::all();
return view('lpj::daftar-pustaka.show', compact('daftarPustaka', 'categories'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$daftarPustaka = $this->daftarPustaka->getDaftarPustakaById($id);
$categories = CategoryDaftarPustaka::all();
return view('lpj::daftar-pustaka.create', compact('daftarPustaka', 'categories'));
}
/**
* Update the specified resource in storage.
*/
public function update(DaftarPustakaRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
$file = $request->file('attachment');
$this->daftarPustaka->updateDaftarPustaka($validate, $file, $id);
return redirect()
->route('daftar-pustaka.index')
->with('success', 'Daftar Pustaka updated successfully');
} catch (Exception $e) {
return redirect()
->route('daftar-pustaka.create')
->with('error', 'Failed to update daftar pustaka');
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$this->daftarPustaka->deleteDaftarPustaka($id);
return response()->json(['success' => true, 'message' => 'Daftar Pustaka deleted successfully']);
} catch (Exception $e) {
return response()->json(['success' => false, 'message' => 'Failed to delete daftar pustaka']);
}
}
}

View File

@@ -1,36 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Services\DashboardService;
class DashboardController extends Controller
{
public $dashboardService;
public function __construct(DashboardService $dashboardService)
{
$this->dashboardService = $dashboardService;
}
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
// nilai default
$start_date = $request->input('start_date', now()->startOfYear()->format('Y-m-d'));
$end_date = $request->input('end_date', now()->format('Y-m-d'));
$validate = $request->validate([
'start_date' => 'nullable|date_format:Y-m-d',
'end_date' => 'nullable|date_format:Y-m-d',
]);
$dashboard = $this->dashboardService->getDashboardData($start_date, $end_date);
// dd($dashboard);
return view('lpj::dashboard.index', compact('dashboard'));
}
}

View File

@@ -19,7 +19,6 @@
use Modules\Lpj\Models\JenisJaminan; use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan;
use Modules\Lpj\Models\PemilikJaminan; use Modules\Lpj\Models\PemilikJaminan;
use Illuminate\Support\Facades\Auth;
class DebitureController extends Controller class DebitureController extends Controller
{ {
@@ -94,29 +93,13 @@
public function destroy($id) public function destroy($id)
{ {
try { try {
// Periksa apakah pengguna adalah administrator // Delete from database
if (!auth()->user()->hasRole('administrator')) {
return response()->json(['success' => false, 'message' => 'Hanya administrator yang dapat menghapus debitur'], 403);
}
// Temukan debitur
$debitur = Debiture::find($id); $debitur = Debiture::find($id);
if (!$debitur) {
return response()->json(['success' => false, 'message' => 'Debitur tidak ditemukan'], 404);
}
// Periksa apakah debitur memiliki permohonan aktif
if ($debitur->permohonan()->exists()) {
return response()->json(['success' => false, 'message' => 'Tidak dapat menghapus debitur yang masih memiliki permohonan aktif'], 400);
}
// Hapus dari database
$debitur->delete(); $debitur->delete();
return response()->json(['success' => true, 'message' => 'Debitur berhasil dihapus']); echo json_encode(['success' => true, 'message' => 'Debitur deleted successfully']);
} catch (Exception $e) { } catch (Exception $e) {
return response()->json(['success' => false, 'message' => 'Gagal menghapus debitur: ' . $e->getMessage()], 500); echo json_encode(['success' => false, 'message' => 'Failed to delete debitur']);
} }
} }
@@ -129,10 +112,6 @@
// Retrieve data from the database // Retrieve data from the database
$query = Debiture::query(); $query = Debiture::query();
if (!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
@@ -172,7 +151,7 @@
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->with(['branch','permohonan'])->get(); $data = $query->with('branch')->get();
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size')); $pageCount = ceil($totalRecords / $request->get('size'));

View File

@@ -4,19 +4,15 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use Exception;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Http\UploadedFile;
use Log;
use Modules\Location\Models\City; use Modules\Location\Models\City;
use Modules\Location\Models\District; use Modules\Location\Models\District;
use Modules\Location\Models\Province; use Modules\Location\Models\Province;
use Modules\Location\Models\Village; use Modules\Location\Models\Village;
use Modules\Lpj\Http\Requests\DokumenJaminanRequest; use Modules\Lpj\Http\Requests\DokumenJaminanRequest;
use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\Debiture; use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DetailDokumenJaminan; use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\DokumenJaminan;
@@ -24,7 +20,6 @@
use Modules\Lpj\Models\JenisJaminan; use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan;
use Modules\Lpj\Models\PemilikJaminan; use Modules\Lpj\Models\PemilikJaminan;
use Modules\Lpj\Models\Permohonan;
use ZipArchive; use ZipArchive;
class DokumenJaminanController extends Controller class DokumenJaminanController extends Controller
@@ -36,13 +31,6 @@
{ {
$debitur = Debiture::find($id); $debitur = Debiture::find($id);
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get(); $documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
if (request()->get('permohonan_id') !== null) {
$permohonan_id = request()->get('permohonan_id');
$documents = DokumenJaminan::with('pemilik', 'detail')
->where('debiture_id', $id)
->where('permohonan_id', $permohonan_id)
->get();
}
return view( return view(
'lpj::debitur.edit', 'lpj::debitur.edit',
@@ -105,7 +93,7 @@
$file_name, $file_name,
); );
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; $dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; $dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
} }
} }
} }
@@ -120,13 +108,13 @@
} }
DB::commit(); DB::commit();
return redirect()->route('debitur.jaminan.index',['id'=>$id,'pemrohonan_id' => $validate['permohonan_id'] ])->with( return redirect()->route('debitur.jaminan.index', $id)->with(
'success', 'success',
'Dokumen Jaminan berhasil ditambahkan', 'Dokumen Jaminan berhasil ditambahkan',
); );
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
return redirect()->route('debitur.jaminan.create',['id'=>$id,'pemrohonan_id' => $validate['permohonan_id'] ])->with('error', $e->getMessage()); return redirect()->route('debitur.jaminan.index', $id)->with('error', 'ggl' . $e->getMessage());
} }
} }
} }
@@ -139,10 +127,7 @@
$jenisLegalitasJaminan = JenisLegalitasJaminan::all(); $jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$pemilikJaminan = PemilikJaminan::where('debiture_id', $id)->get(); $pemilikJaminan = PemilikJaminan::where('debiture_id', $id)->get();
$hubunganPemilik = HubunganPemilikJaminan::all(); $hubunganPemilik = HubunganPemilikJaminan::all();
$permohonan = null;
if(request()->get('permohonan_id')) {
$permohonan = Permohonan::where('id', request()->get('permohonan_id'))->first();
}
return view( return view(
'lpj::debitur.jaminan', 'lpj::debitur.jaminan',
compact( compact(
@@ -152,7 +137,6 @@
'jenisLegalitasJaminan', 'jenisLegalitasJaminan',
'pemilikJaminan', 'pemilikJaminan',
'hubunganPemilik', 'hubunganPemilik',
'permohonan'
), ),
); );
} }
@@ -162,6 +146,7 @@
$debitur = Debiture::find($id); $debitur = Debiture::find($id);
$validate = $request->validated(); $validate = $request->validated();
if ($validate) { if ($validate) {
try { try {
DB::beginTransaction(); DB::beginTransaction();
@@ -250,119 +235,68 @@
'jenis_legalitas_jaminan_id' => $value, 'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key], 'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key], 'keterangan' => $request->keterangan[$key],
'details' => isset($request->custom_field[$key]) ? json_encode(array_values($request->custom_field[$key])) : '' 'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : ''
]; ];
$dokumenJaminan = []; $dokumenJaminan = [];
$dokumenNomor = []; $dokumenNomor=[];
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) { if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
foreach ($request->dokumen_jaminan[$key] as $index => $file) { foreach ($request->dokumen_jaminan[$key] as $index => $file) {
if ($file instanceof \Illuminate\Http\UploadedFile) { if ($file) {
// Jika file baru diupload
$file_name = $file->getClientOriginalName(); $file_name = $file->getClientOriginalName();
$file->storeAs( $file->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/', 'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name, $file_name,
); );
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; $dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
} elseif (is_string($file) && !empty($file)) { $dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
// Jika file tidak diubah, gunakan path yang sudah ada
$dokumenJaminan[] = $file;
} else {
// Jika file kosong atau null, tambahkan placeholder atau skip
$dokumenJaminan[] = null; // atau skip dengan continue;
} }
// Selalu update dokumen_nomor, baik file diubah atau tidak
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
} }
} }
// Setelah loop, periksa apakah ada dokumen yang dihapus
$existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null);
if ($existingDetail) {
$existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? [];
$existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? [];
$newDokumenJaminan = [];
$newDokumenNomor = [];
$allFilesDeleted = true;
foreach ($existingDokumen as $index => $existingFile) {
if (isset($request->dokumen_jaminan[$key][$index])) {
$allFilesDeleted = false;
$file = $request->dokumen_jaminan[$key][$index];
if ($file instanceof \Illuminate\Http\UploadedFile) {
// File baru diupload
$file_name = $file->getClientOriginalName();
$file->storeAs('public/jaminan/' . $debitur->id . '/' . $document->id . '/', $file_name);
$newDokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
} elseif (is_string($file) && !empty($file)) {
// File tidak diubah
$newDokumenJaminan[] = $existingFile;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? $existingNomor[$index];
}
} else {
// File dihapus, hapus dari storage jika ada
if (Storage::exists('public/' . $existingFile)) {
Storage::delete('public/' . $existingFile);
}
}
}
// Tambahkan file baru yang mungkin ditambahkan
foreach ($request->dokumen_jaminan[$key] ?? [] as $index => $file) {
if ($file instanceof UploadedFile) {
$allFilesDeleted = false;
$file_name = $file->getClientOriginalName();
$path = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
if (!in_array($path, $newDokumenJaminan)) {
$file->storeAs('public/' . dirname($path), $file_name);
$newDokumenJaminan[] = $path;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
}
} elseif (is_string($file) && !empty($file) && !in_array($file, $newDokumenJaminan)) {
$allFilesDeleted = false;
$newDokumenJaminan[] = $file;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
}
}
if ($allFilesDeleted) {
$dokumenJaminan = [];
$dokumenNomor = [];
} else {
$dokumenJaminan = $newDokumenJaminan;
$dokumenNomor = $newDokumenNomor;
}
}
if (!empty($dokumenJaminan)) { if (!empty($dokumenJaminan)) {
$detailData['dokumen_jaminan'] = json_encode($dokumenJaminan); $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
$detailData['dokumen_nomor'] = json_encode($dokumenNomor); $detailData['dokumen_nomor'] = json_encode($dokumenNomor);
} else if(empty($dokumenJaminan)){
$detailData['dokumen_jaminan'] = null;
$detailData['dokumen_nomor'] = null;
} }
if (isset($request->detail_dokumen_jaminan_id[$key])) { if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailId = $request->detail_dokumen_jaminan_id[$key]; $detailId = $request->detail_dokumen_jaminan_id[$key];
$detailDocument = $existingDetails->get($detailId); $detailDocument = $existingDetails->get($detailId);
$detailDocument->update($detailData); if ($detailDocument) {
// Merge new files with existing ones
if (!empty($dokumenJaminan)) {
$existingFiles = json_decode(
$detailDocument->dokumen_jaminan,
true,
) ?: [];
$existingNomor = json_decode(
$detailDocument->dokumen_nomor,
true,
) ?: [];
$mergedFiles = array_merge($existingFiles, $dokumenJaminan);
$mergedNomor = array_merge($existingNomor, $dokumenNomor);
$detailData['dokumen_jaminan'] = json_encode($mergedFiles);
$detailData['dokumen_nomor'] = json_encode($mergedNomor);
}
$detailDocument->update($detailData);
$existingDetails->forget($detailId);
}
} else { } else {
DetailDokumenJaminan::create($detailData); DetailDokumenJaminan::create($detailData);
} }
} }
} }
// Delete any remaining existing details that weren't updated
foreach ($existingDetails as $detail) {
$files = json_decode($detail->dokumen_jaminan, true) ?: [];
foreach ($files as $file) {
Storage::delete('public/' . $file);
}
$detail->delete();
}
DB::commit(); DB::commit();
return redirect()->route('debitur.jaminan.index', $id)->with( return redirect()->route('debitur.jaminan.index', $id)->with(
'success', 'success',
@@ -378,8 +312,7 @@
public function edit( public function edit(
$id, $id,
$jaminan, $jaminan,
) ) {
{
$document = DokumenJaminan::find($jaminan); $document = DokumenJaminan::find($jaminan);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get(); $details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get();
@@ -393,10 +326,9 @@
$jenisJaminan = JenisJaminan::all(); $jenisJaminan = JenisJaminan::all();
$jenisLegalitasJaminan = JenisLegalitasJaminan::all(); $jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id); $_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitas='';
$legalitas = ''; if($_jenisJaminan) {
if ($_jenisJaminan) {
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true); $legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn( $currentLegalitasJaminan = JenisLegalitasJaminan::whereIn(
@@ -406,9 +338,7 @@
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan // Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
$legalitasJaminan = is_array($legalitasJaminan) $legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray());
? array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray())
: [];
$legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get(); $legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get();
} }
@@ -438,47 +368,25 @@
public function destroy( public function destroy(
$id, $id,
$jaminan_id, $jaminan_id,
) ) {
{
try { try {
// Periksa apakah pengguna adalah admin
if (!auth()->user()->hasRole('administrator')) {
return response()->json(['success' => false, 'message' => 'Hanya administrator yang dapat menghapus dokumen jaminan'], 403);
}
$jaminan = DokumenJaminan::find($jaminan_id); $jaminan = DokumenJaminan::find($jaminan_id);
if (!$jaminan) {
return response()->json(['success' => false, 'message' => 'Dokumen Jaminan tidak ditemukan'], 404);
}
// Periksa apakah dokumen jaminan terkait dengan permohonan aktif
if ($jaminan->permohonan()->exists()) {
return response()->json(['success' => false, 'message' => 'Tidak dapat menghapus dokumen jaminan yang terkait dengan permohonan aktif'], 400);
}
DB::beginTransaction();
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $jaminan->id)->get(); $details = DetailDokumenJaminan::where('dokumen_jaminan_id', $jaminan->id)->get();
foreach ($details as $detail) { foreach ($details as $detail) {
Storage::delete('public/' . $detail->dokumen_jaminan); Storage::delete('public/' . $detail->dokumen_jaminan);
$detail->delete(); $detail->delete();
} }
$jaminan->delete(); $jaminan->delete();
echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']);
DB::commit();
return response()->json(['success' => true, 'message' => 'Dokumen Jaminan berhasil dihapus']);
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']);
return response()->json(['success' => false, 'message' => 'Gagal menghapus Dokumen Jaminan: ' . $e->getMessage()], 500);
} }
} }
public function bulkDownload() public function bulkDownload()
{ {
$dokumenIds = request()->get('jaminan'); // Expecting an array of dokumen_jaminan_id $dokumenIds = request()->get('jaminan'); // Expecting an array of dokumen_jaminan_id
$documents = DokumenJaminan::where('id', $dokumenIds)->with(['jenisJaminan', 'detail', 'debiture'])->get(); $documents = DokumenJaminan::where('id', $dokumenIds)->with(['jenisJaminan', 'detail','debiture'])->get();
if ($documents->isEmpty()) { if ($documents->isEmpty()) {
return redirect()->back()->with('error', 'No documents found for the provided IDs.'); return redirect()->back()->with('error', 'No documents found for the provided IDs.');
@@ -490,23 +398,23 @@
if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) { if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) {
foreach ($documents as $document) { foreach ($documents as $document) {
$jenisJaminan = $document->permohonan->nomor_registrasi ?? 'Uncategorized'; $jenisJaminan = $document->debiture->permohonan->nomor_registrasi ?? 'Uncategorized';
$folderName = $this->sanitizeFolderName($jenisJaminan); $folderName = $this->sanitizeFolderName($jenisJaminan);
foreach ($document->detail as $detail) { foreach ($document->detail as $detail) {
if ($detail->dokumen_jaminan) { if($detail->dokumen_jaminan) {
$folderJaminanName = $this->sanitizeFolderName($detail->jenisLegalitasJaminan->name ?? 'Uncategorized'); $folderJaminanName = $this->sanitizeFolderName($detail->jenisLegalitasJaminan->name?? 'Uncategorized');
$files = is_array(json_decode($detail->dokumen_jaminan)) $files = is_array(json_decode($detail->dokumen_jaminan))
? json_decode($detail->dokumen_jaminan) ? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan]; : [$detail->dokumen_jaminan];
foreach ($files as $file) { foreach ($files as $file) {
$filePath = storage_path('app/public/' . $file); $filePath = storage_path('app/public/' . $file);
if (file_exists($filePath)) { if (file_exists($filePath)) {
$zip->addFile($filePath, $folderName . '/' . $folderJaminanName . '/' . basename($filePath)); $zip->addFile($filePath, $folderName . '/' .$folderJaminanName.'/'.basename($filePath));
} else { } else {
// Log or display an error message for missing files // Log or display an error message for missing files
Log::warning('File not found: ' . $filePath); \Log::warning('File not found: ' . $filePath);
} }
} }
} }
@@ -556,8 +464,7 @@
public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1) public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1)
: JsonResponse : JsonResponse {
{
$jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId); $jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id; $legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
$newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get(); $newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
@@ -574,12 +481,6 @@
foreach ($document->detail as $detail) { foreach ($document->detail as $detail) {
// Only include existing legalitas if its id is in the new set // Only include existing legalitas if its id is in the new set
if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) { if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) {
$customFields = [];
if($detail->jenisLegalitasJaminan->custom_fields) {
$customFields = CustomField::whereIn('id', $detail->jenisLegalitasJaminan->custom_fields)
->get();
}
$existingLegalitas[] = [ $existingLegalitas[] = [
'id' => $detail->id, 'id' => $detail->id,
'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id, 'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id,
@@ -587,11 +488,10 @@
'dokumen_jaminan' => json_decode( 'dokumen_jaminan' => json_decode(
$detail->dokumen_jaminan, $detail->dokumen_jaminan,
) ?? $detail->dokumen_jaminan, ) ?? $detail->dokumen_jaminan,
'dokumen_nomor' => json_decode( 'dokumen_nomor' => json_decode(
$detail->dokumen_nomor, $detail->dokumen_nomor,
) ?? $detail->dokumen_nomor, ) ?? $detail->dokumen_nomor,
'custom_field' => $detail->jenisLegalitasJaminan->custom_field, 'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
'custom_fields' => $customFields,
'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type, 'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type,
'details' => $detail->details, 'details' => $detail->details,
'keterangan' => $detail->keterangan, 'keterangan' => $detail->keterangan,
@@ -604,20 +504,14 @@
foreach ($newLegalitasJaminan as $legalitas) { foreach ($newLegalitasJaminan as $legalitas) {
if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) { if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) {
$customFields = [];
if($legalitas->custom_fields) {
$customFields = CustomField::whereIn('id', $legalitas->custom_fields)->get();
}
$newLegalitas[] = [ $newLegalitas[] = [
'id' => null, 'id' => null,
'jenis_legalitas_jaminan_id' => $legalitas->id, 'jenis_legalitas_jaminan_id' => $legalitas->id,
'name' => $legalitas->name, 'name' => $legalitas->name,
'dokumen_jaminan' => null, 'dokumen_jaminan' => null,
'dokumen_nomor' => null, 'dokumen_nomor' => null,
'custom_field' => $legalitas->custom_field, 'custom_field' => $legalitas->custom_field,
'custom_field_type' => $legalitas->custom_field_type, 'custom_field_type' => $legalitas->custom_field_type,
'custom_fields' => $customFields,
'details' => null, 'details' => null,
'keterangan' => null, 'keterangan' => null,
'is_existing' => false, 'is_existing' => false,
@@ -628,40 +522,4 @@
$combinedLegalitas = array_merge($existingLegalitas, $newLegalitas); $combinedLegalitas = array_merge($existingLegalitas, $newLegalitas);
return response()->json($combinedLegalitas); return response()->json($combinedLegalitas);
} }
public function clearDetail(Request $request)
{
try {
DB::beginTransaction();
$detailId = $request->input('detail_id');
$detail = DetailDokumenJaminan::findOrFail($detailId);
// Delete associated files
if ($detail->dokumen_jaminan) {
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan))
? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan];
foreach ($dokumen_jaminan as $dokumen) {
if (Storage::exists($dokumen)) {
Storage::delete($dokumen);
}
}
}
// Delete the detail record
$detail->delete();
DB::commit();
return response()->json(['success' => true, 'message' => 'Detail berhasil dihapus']);
} catch (\Exception $e) {
DB::rollBack();
return response()->json([
'success' => false,
'message' => 'Gagal menghapus detail: ' . $e->getMessage()
], 500);
}
}
} }

View File

@@ -1,172 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\JenisLampiranExport;
use Modules\Lpj\Http\Requests\JenisLampiranRequest;
use Modules\Lpj\Models\JenisLampiran;
class JenisLampiranController extends Controller
{
public function index()
{
$jenisLampirans = JenisLampiran::all();
return view('lpj::jenis_lampiran.index', compact('jenisLampirans'));
}
public function store(JenisLampiranRequest $request)
{
DB::beginTransaction();
try {
$validated = $request->validated();
$validated['created_by'] = Auth::id();
$jenisLampiran = JenisLampiran::create($validated);
DB::commit();
return redirect()
->route('basicdata.jenis-lampiran.index')
->with('success', 'Jenis Lampiran berhasil ditambahkan.');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->back()
->with('error', 'Gagal menambahkan Jenis Lampiran: ' . $e->getMessage())
->withInput();
}
}
public function create()
{
return view('lpj::jenis_lampiran.create');
}
public function show($id)
{
$jenisLampiran = JenisLampiran::findOrFail($id);
return view('lpj::jenis_lampiran.show', compact('jenisLampiran'));
}
public function edit($id)
{
$jenisLampiran = JenisLampiran::findOrFail($id);
return view('lpj::jenis_lampiran.create', compact('jenisLampiran'));
}
public function update(JenisLampiranRequest $request, $id)
{
DB::beginTransaction();
try {
$jenisLampiran = JenisLampiran::findOrFail($id);
$validated = $request->validated();
$validated['updated_by'] = Auth::id();
$jenisLampiran->update($validated);
DB::commit();
return redirect()
->route('basicdata.jenis-lampiran.index')
->with('success', 'Jenis Lampiran berhasil diperbarui.');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->back()
->with('error', 'Gagal memperbarui Jenis Lampiran: ' . $e->getMessage())
->withInput();
}
}
public function destroy($id)
{
DB::beginTransaction();
try {
$jenisLampiran = JenisLampiran::findOrFail($id);
$jenisLampiran->deleted_by = Auth::id();
$jenisLampiran->save();
$jenisLampiran->delete();
DB::commit();
echo json_encode(['success' => true, 'message' => 'Jenis Lampiran berhasil dihapus.']);
} catch (Exception $e) {
DB::rollBack();
echo json_encode([
'success' => false,
'message' => 'Gagal menghapus Jenis Lampiran: ' . $e->getMessage()
]);
}
}
public function dataForDatatables(Request $request)
{
// Retrieve data from the database
$query = JenisLampiran::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nama', 'LIKE', "%$search%")
->orWhere('deskripsi', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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();
// 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()
{
if (is_null($this->user) || !$this->user->can('jenis_lampiran.export')) {
abort(403, 'Sorry! You are not allowed to export jenis lampiran.');
}
return Excel::download(new JenisLampiranExport, 'jenis_lampiran.xlsx');
}
}

View File

@@ -8,7 +8,6 @@
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\JenisLegalitasJaminanExport; use Modules\Lpj\Exports\JenisLegalitasJaminanExport;
use Modules\Lpj\Http\Requests\JenisLegalitasJaminanRequest; use Modules\Lpj\Http\Requests\JenisLegalitasJaminanRequest;
use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan;
class JenisLegalitasJaminanController extends Controller class JenisLegalitasJaminanController extends Controller
@@ -41,15 +40,13 @@
public function create() public function create()
{ {
$customFields = CustomField::orderBy('urutan_prioritas', 'asc')->get(); return view('lpj::jenis_legalitas_jaminan.create');
return view('lpj::jenis_legalitas_jaminan.create',compact('customFields'));
} }
public function edit($id) public function edit($id)
{ {
$jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id);
$customFields = CustomField::orderBy('urutan_prioritas', 'asc')->get(); return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan'));
return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan', 'customFields'));
} }
public function update(JenisLegalitasJaminanRequest $request, $id) public function update(JenisLegalitasJaminanRequest $request, $id)
@@ -150,16 +147,4 @@
{ {
return Excel::download(new JenisLegalitasJaminanExport, 'jenis_legalitas_jaminan.xlsx'); return Excel::download(new JenisLegalitasJaminanExport, 'jenis_legalitas_jaminan.xlsx');
} }
public function getCustomFields($id)
{
$jenisLegalitasJaminan = JenisLegalitasJaminan::findOrFail($id);
if(!$jenisLegalitasJaminan->custom_fields) {
return response()->json([]);
}
$customFields = CustomField::whereIn('id', $jenisLegalitasJaminan->custom_fields)->get();
return response()->json($customFields);
}
} }

View File

@@ -1,45 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Modules\Lpj\Models\LampiranDokumen;
class LampiranDokumenController extends Controller
{
public function download($id)
{
$lampiran = LampiranDokumen::findOrFail($id);
return Storage::download($lampiran->path_file, $lampiran->nama_file);
}
public function upload(Request $request)
{
$request->validate([
'permohonan_id' => 'required|exists:permohonan,id',
'jenis_lampiran_id' => 'required|exists:jenis_lampiran,id',
'nama_file' => 'nullable|string|max:255',
'file' => 'required|file|max:10240',
'keterangan' => 'nullable|string|max:255',
]);
$lampiran = LampiranDokumen::uploadLampiran($request->all());
if ($lampiran) {
return redirect()->back()->with('success', 'Lampiran uploaded successfully');
} else {
return redirect()->back()->with('error', 'Unauthorized or upload failed');
}
}
public function delete(LampiranDokumen $lampiran)
{
if ($lampiran->deleteLampiran()) {
return redirect()->back()->with('success', 'Lampiran deleted successfully');
} else {
return redirect()->back()->with('error', 'Unauthorized or delete failed');
}
}
}

View File

@@ -1,180 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\LaporanAdminKreditExport;
use Modules\Lpj\Models\LaporanAdminKredit;
use Modules\Lpj\Models\Permohonan;
class LaporanAdminKreditController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
$permohonan = Permohonan::where(['status' => 'done'])->get();
foreach ($permohonan as $_permohonan) {
$npw = 0;
if (isset($_permohonan->penilai->lpj)) {
$npw = json_decode($_permohonan->penilai->lpj, true);
$npw = $npw['total_nilai_pasar_wajar'] ?? 0;
}
$dataAdk = [
'jenis_agunan' => $_permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '),
'alamat_agunan' => $_permohonan->documents->map(function ($document) {
return formatAlamat($document);
})->unique()->implode(', '),
'nama_pemilik' => $_permohonan->documents->pluck('pemilik.name')->unique()->implode(', '),
'tanggal_kunjungan' => $_permohonan->penilaian->tanggal_kunjungan,
'nama_penilai' => $_permohonan->penilaian->_user_penilai->userPenilaiTeam->name,
'nilai_likuidasi' => $_permohonan->nilai_liquidasi,
'nilai_pasar_wajar' => str_replace('.', '', $npw),
'bukti_kepemilikan' => $_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(', '),
];
LaporanAdminKredit::updateOrCreate([
'debiture_id' => $_permohonan->debiture_id,
], $dataAdk);
}
$laporans = LaporanAdminKredit::with('debiture')->paginate(10);
return view('lpj::laporan_admin_kredit.index', compact('laporans'));
}
public function dataForDatatables(Request $request)
{
if (is_null($this->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 = LaporanAdminKredit::query();
if ($request->has('tanggal_awal') && $request->has('tanggal_akhir')) {
$query->whereBetween('tanggal_kunjungan', [$request->tanggal_awal, $request->tanggal_akhir]);
}
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$search_ = json_decode($search);
if (isset($search_->search)) {
$query->where(function ($q) use ($search_) {
$q->where('kode_register_t24', 'LIKE', '%' . $search_->search . '%')
->orWhere('jenis_agunan', 'LIKE', '%' . $search_->search . '%')
->orWhere('nama_pemilik', 'LIKE', '%' . $search_->search . '%')
->orWhereHas('debiture', function ($query) use ($search_) {
$query->where('name', 'LIKE', '%' . $search_->search . '%');
});
});
}
if (isset($search_->tanggal_awal) && isset($search_->tanggal_akhir)) {
$query->whereBetween('tanggal_kunjungan', [$search_->tanggal_awal, $search_->tanggal_akhir]);
}
}
// 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();
// 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()
{
return Excel::download(new LaporanAdminKreditExport, 'laporan_admin_kredit.xlsx');
}
public function edit($id)
{
$laporanAdminKredit = LaporanAdminKredit::with('debiture.branch')->find($id);
return view('lpj::laporan_admin_kredit.form', compact('laporanAdminKredit'));
}
public function update(Request $request, $id)
{
$request->validate([
'kode_register_t24' => 'nullable',
'cif' => 'required',
]);
try {
$laporanAdminKredit = LaporanAdminKredit::find($id);
// Update only the editable fields
$laporanAdminKredit->update([
'kode_register_t24' => $request->kode_register_t24,
'updated_by' => Auth::id(),
]);
// Update CIF in the debiture table if needed
if ($laporanAdminKredit->debiture) {
$laporanAdminKredit->debiture->update([
'cif' => $request->cif,
'updated_by' => Auth::id(),
]);
}
return redirect()
->route('laporan-admin-kredit.index')
->with('success', 'Laporan Admin Kredit updated successfully');
} catch (Exception $e) {
return redirect()
->route('laporan-admin-kredit.edit', $id)
->with('error', 'Failed to update Laporan Admin Kredit');
}
}
}

View File

@@ -1,23 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class LaporanBiayaInternalExternalController extends Controller
{
/**
* Display a listing of the resource.
*/
public function showLaporanBiayaInternal()
{
return view('lpj::laporan-biaya.internal');
}
public function showLaporanBiayaExternal()
{
return view('lpj::laporan-biaya.external');
}
}

View File

@@ -4,22 +4,14 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Http\Controllers\PenilaiController;
class LaporanController extends Controller class LaporanController extends Controller
{ {
public $user; public $user;
public $penilaiController;
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
public function __construct(PenilaiController $penilaiController){
$this->penilaiController = $penilaiController;
}
public function index() public function index()
{ {
return view('lpj::laporan.index'); return view('lpj::laporan.index');
@@ -38,106 +30,11 @@ class LaporanController extends Controller
/** /**
* Show the specified resource. * Show the specified resource.
*/ */
public function show($id) { public function show($id) {}
$permohonan = Permohonan::with([
'penilai',
'dokumenjaminan',
])->find($id);
if ($permohonan->penilai->type_penilai == 'memo') {
return $this->penilaiController->print_out($request = new Request(['documentId' => $permohonan->penilai->dokument_id, 'jaminanId' => $permohonan->dokumenjaminan[0]->jenis_jaminan_id, 'permohonanId' => $permohonan->id, 'statusLpj' => 1, 'type' => 'memo']));
}
if ($permohonan->penilai->type_penilai == 'rap') {
return $this->penilaiController->print_out($request = new Request(['documentId' => $permohonan->penilai->dokument_id, 'jaminanId' => $permohonan->dokumenjaminan[0]->jenis_jaminan_id, 'permohonanId' => $permohonan->id, 'statusLpj' => 1, 'type' => 'rap']));
}
return view('lpj::laporan.show', compact('permohonan'));
}
/** /**
* Store form inspeksi. * Store form inspeksi.
*/ */
public function store(Request $request) { public function store(Request $request) {}
$permohonan = Permohonan::find($request->permohonan_id);
if($request->nilai_liquidasi) {
$permohonan->nilai_liquidasi = $request->liquidasi;
$permohonan->save();
return redirect()->route('laporan.index')->with('success', 'Nilai Liquidasi updated successfully');
}
}
public function update(Request $request, $id) {} public function update(Request $request, $id) {}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query()
->whereIn('status',['proses-laporan','done', 'paparan', 'proses-paparan']);
$query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','jenisFasilitasKredit', 'documents.inspeksi','penilai','documents.detail','noc'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $request->get('page', 1));
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
} }

View File

@@ -1,33 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Services\LaporanDebitureService;
class LaporanDebitureController extends Controller
{
private $laporanDebitureService;
public function __construct()
{
$this->laporanDebitureService = app(LaporanDebitureService::class);
}
/**
* Display a listing of the resource.
*/
public function index()
{
$debiture = Debiture::all();
return view('lpj::laporan-debiture.index', compact('debiture'));
}
public function dataTableForDebiture(Request $request)
{
return $this->laporanDebitureService->dataForDatatables($request);
}
}

View File

@@ -1,173 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\LaporanExternal;
use Modules\Lpj\Http\Requests\LaporanExternalRequest;
use Modules\Lpj\Models\Permohonan;
class LaporanExternalController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
$laporanExternals = LaporanExternal::with('permohonan')->paginate(10);
return view('lpj::laporan_external.index', compact('laporanExternals'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::laporan_external.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(LaporanExternalRequest $request)
{
$validatedData = $request->validated();
if ($request->hasFile('file_resume')) {
$validatedData['file_resume'] = $request->file('file_resume')->store('laporan_external/resume', 'public');
}
if ($request->hasFile('file_laporan')) {
$validatedData['file_laporan'] = $request->file('file_laporan')->store('laporan_external/laporan', 'public');
}
LaporanExternal::create($validatedData);
return redirect()->route('laporan-external.index')->with('success', 'Laporan External berhasil ditambahkan.');
}
/**
* Show the specified resource.
*/
public function show(LaporanExternal $laporanExternal)
{
return view('lpj::laporan_external.show', compact('laporanExternal'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(LaporanExternal $laporanExternal)
{
$permohonan = Permohonan::find($laporanExternal->permohonan_id);
return view('lpj::laporan_external.create', compact('laporanExternal','permohonan'));
}
/**
* Update the specified resource in storage.
*/
public function update(LaporanExternalRequest $request, LaporanExternal $laporanExternal)
{
$validatedData = $request->validated();
if ($request->hasFile('file_resume')) {
$validatedData['file_resume'] = $request->file('file_resume')->store('laporan_external/resume', 'public');
}
if ($request->hasFile('file_laporan')) {
$validatedData['file_laporan'] = $request->file('file_laporan')->store('laporan_external/laporan', 'public');
}
$laporanExternal->update($validatedData);
return redirect()->route('laporan-external.index')->with('success', 'Laporan External berhasil diperbarui.');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(LaporanExternal $laporanExternal)
{
$laporanExternal->delete();
return redirect()->route('laporan-external.index')->with('success', 'Laporan External berhasil dihapus.');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('jenis_aset.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = LaporanExternal::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_laporan', 'LIKE', "%$search%")
->orWhere('tanggal_laporan', 'LIKE', "%$search%")
->orWhereHas('permohonan', function($q) use ($search) {
$q->where('nomor_permohonan', 'LIKE', "%$search%");
})
->orWhere('tgl_final_laporan', 'LIKE', "%$search%")
->orWhere('nilai_pasar', 'LIKE', "%$search%")
->orWhere('indikasi_nilai_likuidasi', 'LIKE', "%$search%")
->orWhere('indikasi_nilai_pasar_tanah', 'LIKE', "%$search%")
->orWhere('estimasi_harga_tanah', 'LIKE', "%$search%")
->orWhere('estimasi_harga_bangunan', 'LIKE', "%$search%")
->orWhere('indikasi_nilai_pasar_bangunan', 'LIKE', "%$search%")
->orWhere('indikasi_nilai_pasar_sarana_pelengkap', 'LIKE', "%$search%")
->orWhere('indikasi_nilai_pasar_mesin', 'LIKE', "%$search%")
->orWhere('indikasi_nilai_pasar_kendaraan_alat_berat', 'LIKE', "%$search%")
->orWhere('file_resume', 'LIKE', "%$search%")
->orWhere('file_laporan', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['permohonan.debiture','permohonan.penawaran.tujuanPenilaianKjpp','permohonan.dokumenjaminan.jenisjaminan'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 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,
]);
}
}

View File

@@ -1,213 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\LaporanHasilPenilaianJaminanInternalExternalExport;
use Modules\Lpj\Models\Permohonan;
use Illuminate\Support\Facades\DB;
class LaporanHasilPenilaianJaminanInternalExternalController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::laporan_hasil_penilaian_jaminan_internal_external.index');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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');
}
}

View File

@@ -1,43 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Services\LaporanMonitoringSoService;
class LaporanMonitoringSoController extends Controller
{
private $laporanMonitoringSoService;
public function __construct(LaporanMonitoringSoService $laporanMonitoringSoService)
{
$this->laporanMonitoringSoService = $laporanMonitoringSoService;
}
/**
* Display a listing of the resource.
*/
public function index()
{
$user = auth()->user()->load('roles');
$result = $this->laporanMonitoringSoService->progresPengerjaanLaporan($user);
return view('lpj::laporan-monitoring.index', compact('result'));
}
/**
* Show details data.
* @return Response
*/
public function show($id){
return view('lpj::laporan-monitoring.show', compact('id'));
}
public function dataForDatatablePenilai(Request $request, $id){
return $this->laporanMonitoringSoService->showDetailsPermohonan($request, $id);
}
}

View File

@@ -1,140 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\LaporanPembatalanExport;
use Modules\Lpj\Models\PermohonanPembatalan;
class LaporanPembatalanController extends Controller
{
public $user;
public function index()
{
return view('lpj::laporan_pembatalan.index');
}
public function export(Request $request)
{
return Excel::download(new LaporanPembatalanExport($request), 'laporan_pembatalan.xlsx');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = PermohonanPembatalan::query();
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,
]);
}
}

View File

@@ -1,226 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Exports\LaporanPenilaiJaminanExport;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\Branch;
use Modules\Lpj\Services\PreviewLaporanService;
use Modules\Lpj\Models\Inspeksi;
use Modules\Lpj\Models\Penilai;
class LaporanPenilaiJaminanController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
protected $previewLaporanService;
public function __construct(PreviewLaporanService $previewLaporanService)
{
$this->previewLaporanService = $previewLaporanService;
}
public function index()
{
$status_permohonan = StatusPermohonan::all();
return view('lpj::laporan-penilai-jaminan.index', compact('status_permohonan'));
}
/**
* Show the specified resource.
*/
public function show($permohonan_id, $dokumen_id, $jaminan_id)
{
$back = route('laporan-penilai-jaminan.index');
return $this->previewLaporanService->previewLaporan($permohonan_id, $dokumen_id, $jaminan_id, $back);
}
public function dataForDatatables(Request $request)
{
$user = auth()->user();
// Check permissions
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
$userRole = $user->roles->pluck('name')->first();
$regionId = null;
// If user is senior-officer, get their regionId
if ($userRole === 'senior-officer') {
$userTeam = TeamsUsers::with('team')->firstWhere('user_id', $user->id);
$regionId = $userTeam?->team->regions_id;
}
$paramsSearch = null;
// dd($startDate);
// Retrieve data from the database
$query = Permohonan::query();
$query = $query->where('status', 'done')->orderBy('tanggal_permohonan', 'desc');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = json_decode($request->get('search'));
if (!empty($search->start_date) || !empty($search->end_date)) {
$startDate = $search->start_date ?? '1900-01-01';
$endDate = $search->end_date ?? now()->toDateString();
$query->where(function ($q) use ($startDate, $endDate) {
$q->whereHas('penilaian', function ($q2) use ($startDate, $endDate) {
$q2->whereBetween('tanggal_kunjungan', [$startDate, $endDate]);
});
// OR check if has penawaran with date in range
$q->orWhereHas('penawaran', function ($q3) use ($startDate, $endDate) {
$q3->whereBetween('tanggal_penilaian_sebelumnya', [$startDate, $endDate]);
});
});
}
if (isset($search->branch_id) && !empty($search->branch_id)) {
$query->where('branch_id', $search->branch_id);
}
if (isset($search->laporan) && is_array($search->laporan) && !empty($search->laporan)) {
foreach ($search->laporan as $type) {
$query->whereHas('penilai', function ($q) use ($type) {
$q->where('type_penilai', 'LIKE', '%' . $type . '%');
});
}
}
// dd($search->search);
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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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 data with necessary relationships
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'dokumenjaminan.jenisJaminan','nilaiPlafond', 'penilai', 'dokumenjaminan.inspeksi'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $request->get('page', 1));
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function export(Request $request)
{
$startDate = $request->input('start_date');
$endDate = $request->input('end_date');
// Validate the date format
if (isset($startDate) && isset($endDate)) {
$startDate = date('Y-m-d', strtotime($startDate));
$endDate = date('Y-m-d', strtotime($endDate));
if ($startDate > $endDate) {
return redirect()->back()->with('error', 'Tanggal awal tidak boleh lebih kecil dari tanggal akhir');
}
}
// name the file
$filename = $this->createNameLaporan($request);
return Excel::download(
new LaporanPenilaiJaminanExport($request),
$filename
);
}
public function createNameLaporan($request)
{
$startDate = $request->start_date ?? null;
$endDate = $request->end_date ?? null;
$branchId = $request->branch_id ?? null;
$laporan = $request->laporan ?? null;
// Initialize filename parts
$parts = ['Laporan Penilai Jaminan'];
if ($startDate && $endDate) {
$parts[] = "{$startDate}_{$endDate}";
}
if ($laporan) {
$parts[] = $laporan;
}
if ($branchId) {
$parts[] = $this->getBranchId($branchId);
}
// Return concatenated filename with extension
return implode('_', $parts) . '.xlsx';
}
public function getBranchId($branchId)
{
$branchesName = Branch::find($branchId)->name ?? null;
return $branchesName;
}
}

View File

@@ -1,180 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Exports\LaporanPenilaianJaminanExport;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PenawaranTender;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\DB;
class LaporanPenilaianJaminanController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::laporan_penilaian_jaminan.index');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->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 (!empty($search->start_date) || !empty($search->end_date)) {
$startDate = $search->start_date ?? '1900-01-01';
$endDate = $search->end_date ?? now()->toDateString();
$query->where(function ($q) use ($startDate, $endDate) {
$q->whereHas('penilaian', function ($q2) use ($startDate, $endDate) {
$q2->whereBetween('tanggal_kunjungan', [$startDate, $endDate]);
})
->orWhereHas('penawaran', function ($q3) use ($startDate, $endDate) {
$q3->whereBetween('tanggal_penilaian_sebelumnya', [$startDate, $endDate]);
});
});
}
// 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('debiture', DB::raw('LOWER(name)'), 'LIKE', '%' . strtolower($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)
{
$startDate = $request->start_date;
$endDate = $request->end_date;
// name of the file
$fileName = 'laporan_penilaian_jaminan_' . $startDate . '_' . $endDate . '.xlsx';
return Excel::download(new LaporanPenilaianJaminanExport($request), $fileName);
}
}

View File

@@ -1,124 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Exports\LaporanPermohonanExport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Auth;
class LaporanPermohonanController extends Controller
{
public $user;
public function index()
{
return view('lpj::laporan_permohonan.index');
}
public function export(Request $request)
{
return Excel::download(new LaporanPermohonanExport($request), 'laporan_permohonan.xlsx');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query();
if (!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
$query = $query->orderBy('nomor_registrasi', '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('tanggal_permohonan', [
$search->start_date ?? '1900-01-01',
$search->end_date ?? now()->toDateString()
]);
}
// Filter by status if provided
if (isset($search->status) && !empty($search->status)) {
$query->where('status', $search->status);
}
// Filter by branch if provided
if (isset($search->branch_id) && !empty($search->branch_id)) {
$query->where('branch_id', $search->branch_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();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','documents','jenisFasilitasKredit', 'jenisPenilaian'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $request->get('page', 1));
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
}

View File

@@ -1,32 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Services\LaporanSLAPenilaiService;
class LaporanSLAPenilaiController extends Controller
{
private $laporanSLAPenilaiService;
public function __construct()
{
$this->laporanSLAPenilaiService = app(LaporanSLAPenilaiService::class);
}
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::laporan-sla-penilai.index');
}
public function dataForDatatableSLaPenilai(Request $request)
{
return $this->laporanSLAPenilaiService->dataForDatatables($request);
}
}

View File

@@ -1,51 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\LaporanUserLimitExport;
use Modules\Lpj\Services\LaporanUserService;
class LaporanUserController extends Controller
{
private $laporanUserService;
public function __construct(LaporanUserService $laporanUserService)
{
$this->laporanUserService = $laporanUserService;
}
/**
* Display a listing of the resource.
*/
public function index()
{
// $user = $this->laporanUserService->getUserPemohon();
return view('lpj::laporan-user.index');
}
public function searchUserPemohon(Request $request)
{
$search = $request->get('search');
$user = $this->laporanUserService->getUserPemohon($search);
return response()->json($user);
}
public function dataTableForUserPemohon(Request $request)
{
return $this->laporanUserService->dataForDatatables($request);
}
public function export(Request $request)
{
$startDate = $request->start_date;
$endDate = $request->end_date;
// name of the file
$fileName = 'laporan_user_limit' . $startDate . '_' . $endDate . '.xlsx';
return Excel::download(new LaporanUserLimitExport($request), $fileName);
}
}

View File

@@ -6,7 +6,6 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Modules\Lpj\Http\Requests\NocRequest; use Modules\Lpj\Http\Requests\NocRequest;
use Modules\Lpj\Models\Noc;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PersetujuanPenawaran; use Modules\Lpj\Models\PersetujuanPenawaran;
@@ -19,20 +18,9 @@
* Display a listing of the resource. * Display a listing of the resource.
*/ */
public function index() public function index()
{
return redirect()->route('noc.pembayaran.index');
}
public function pembayaran()
{ {
$persetujuanPenawarans = PersetujuanPenawaran::all(); $persetujuanPenawarans = PersetujuanPenawaran::all();
return view('lpj::noc.pembayaran', compact('persetujuanPenawarans')); return view('lpj::noc.index', compact('persetujuanPenawarans'));
}
public function penyelesaian()
{
$persetujuanPenawarans = PersetujuanPenawaran::all();
return view('lpj::noc.penyelesaian', compact('persetujuanPenawarans'));
} }
/** /**
@@ -56,53 +44,41 @@
} }
$dataNoc = [ $persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate(
'nominal_bayar' => $validated['nominal_bayar'], ['penawaran_id' => $validated['penawaran_id']],
'tanggal_pembayaran' => $validated['tanggal_pembayaran'] ?? date('Y-m-d'), $validated,
'status_bayar' => $validated['nominal_bayar'] < $validated['total_harus_bayar'] ? false : true,
'catatan_noc' => $validated['catatan_noc'],
];
$noc = Noc::updateOrCreate(
[
'permohonan_id' => $validated['permohonan_id'],
'persetujuan_penawaran_id' => $validated['persetujuan_penawaran_id'],
],
$dataNoc,
); );
$folderPath = 'noc/' . request()->get('persetujuan_penawaran_id') . '/bukti_ksl/'; $folderPath = 'noc/' . $validated['penawaran_id'];
if ($request->hasFile('bukti_ksl')) { if ($request->hasFile('bukti_ksl')) {
$noc->bukti_ksl = $request->file('bukti_ksl')->store( $persetujuanPenawaran->bukti_ksl = $request->file('bukti_ksl')->store(
$folderPath, $folderPath,
'public', 'public',
); );
} }
$noc->save();
/* Update the status of the related permohonan to 'spk' $persetujuanPenawaran->save();
// Update the status of the related permohonan to 'spk'
$permohonan = Permohonan::find(request()->get('permohonan_id')); $permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) { if ($permohonan) {
$permohonan->status_bayar = request()->get('status_pembayar'); $permohonan->status_bayar = request()->get('status_bayar');
if ($permohonan->jenis_penilaian_id == 2) { $permohonan->status = $status;
$permohonan->status = $status;
}
$permohonan->save(); $permohonan->save();
// andy add, update status penawaran.status='spk' // andy add, update status penawaran.status='spk'
// $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
if ($permohonan->jenis_penilaian_id == 2) { PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ 'status' => $status,
'status' => $status, 'updated_by' => Auth::id(),
'updated_by' => Auth::id(), 'updated_at' => now(),
'updated_at' => now(), ]);
]);
}
// andy add, update status penawaran.status='spk' // andy add, update status penawaran.status='spk'
}*/ }
return redirect() return redirect()
->route('noc.index')->with('success', 'NOC berhasil disimpan.'); ->route('noc.index')->with('success', 'Penyelesaian KSL berhasil disimpan.');
} }
/** /**
@@ -110,58 +86,13 @@
*/ */
public function update(NocRequest $request, PersetujuanPenawaran $persetujuanPenawaran) public function update(NocRequest $request, PersetujuanPenawaran $persetujuanPenawaran)
{ {
$validated = $request->validated(); $validated = $request->validated();
$validated['updated_by'] = Auth::id();
if($request->get('is_memo')){
$memo = Noc::find($request->get('is_memo'));
$folderPath = 'noc/' . request()->get('persetujuan_penawaran_id') . '/memo_penyelesaian/';
if ($request->hasFile('memo_penyelesaian')) {
$memo->memo_penyelesaian = $request->file('memo_penyelesaian')->store(
$folderPath,
'public',
);
}
$memo->catatan_noc = $validated['catatan_noc'];
$memo->save();
return redirect()
->route('laporan.index')->with('success', 'Memo Penyelesaian updated successfully');
}
$dataNoc = [
'nominal_penyelesaian' => $validated['nominal_penyelesaian'],
'tanggal_penyelesaian' => $validated['tanggal_penyelesaian'] ?? date('Y-m-d'),
'status_pelunasan' => ((int)$validated['nominal_bayar'] + (int)$validated['nominal_penyelesaian']) === (int)$validated['total_harus_bayar'] ? true : false,
'catatan_noc' => $validated['catatan_noc'],
];
$noc = Noc::updateOrCreate(
[
'permohonan_id' => $validated['permohonan_id'],
'permohonan_id' => $validated['permohonan_id'],
'persetujuan_penawaran_id' => $validated['persetujuan_penawaran_id'],
],
$dataNoc,
);
$folderPath = 'noc/' . request()->get('persetujuan_penawaran_id') . '/bukti_penyelesaian/';
if ($request->hasFile('bukti_penyelesaian')) {
$noc->bukti_penyelesaian = $request->file('bukti_penyelesaian')->store(
$folderPath,
'public',
);
}
$noc->save();
$persetujuanPenawaran->update($validated);
return redirect() return redirect()
->route('noc.index')->with('success', 'NOC updated successfully'); ->route('noc.index')->with('success', 'Persetujuan Penawaran updated successfully');
} }
/** /**
@@ -175,16 +106,16 @@
/** /**
* Display the specified resource. * Display the specified resource.
*/ */
public function show(Noc $noc) { public function show($id) {}
return view('lpj::noc.memo', compact('noc'));
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
*/ */
public function edit($id) public function edit($id)
{ {
$persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->first(); $persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->with(
['penawaran.detail', 'penawaran.permohonan.debiture'],
)->first();
return view('lpj::noc.form', compact('persetujuanPenawaran')); return view('lpj::noc.form', compact('persetujuanPenawaran'));
} }
@@ -200,12 +131,6 @@
} }
public function dataForDatatables(Request $request) public function dataForDatatables(Request $request)
{
// Redirect to pembayaran datatables by default
return $this->dataForDatatablesPembayaran($request);
}
public function dataForDatatablesPembayaran(Request $request)
{ {
if (is_null($this->user) || !$this->user->can('noc.view')) { if (is_null($this->user) || !$this->user->can('noc.view')) {
//abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.');
@@ -214,16 +139,11 @@
// Retrieve data from the database // Retrieve data from the database
$query = PersetujuanPenawaran::query(); $query = PersetujuanPenawaran::query();
// Filter for pembayaran (where memo_penyelesaian is null)
$query->whereDoesntHave('noc', function($q) {
$q->whereNotNull('memo_penyelesaian');
});
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
$q->orWhereRelation('penawaran', 'nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->where('nomor_registrasi', 'LIKE', "%$search%");
}); });
} }
@@ -250,122 +170,16 @@
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->get(); $data = $query
->with(
[
'penawaran.permohonan.debiture',
'penawaran.permohonan.branch',
'penawaran.detail',
'penawaran.persetujuan',
],
)->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_pembayaran' => dateFormat(
$persetujuanPenawaran->noc->tanggal_pembayaran ?? $persetujuanPenawaran->noc?->created_at,
true,
),
'nominal_bayar' => currencyFormat($persetujuanPenawaran->nominal_bayar ?? 0,
),
'nominal_diterima' => currencyFormat(
$persetujuanPenawaran->noc->nominal_bayar ?? 0,
),
'bukti_ksl' => $persetujuanPenawaran->noc->bukti_ksl ?? $persetujuanPenawaran->bukti_ksl ?? null,
'bukti_bayar' => $persetujuanPenawaran->bukti_bayar ?? null,
'updated_at' => dateFormat($persetujuanPenawaran->updated_at, true),
];
})->sortBy('updated_at', 1);
// 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 dataForDatatablesPenyelesaian(Request $request)
{
if (is_null($this->user) || !$this->user->can('noc.view')) {
//abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.');
}
// Retrieve data from the database
$query = PersetujuanPenawaran::query();
// Filter for penyelesaian (where memo_penyelesaian is not null)
$query->whereHas('noc', function($q) {
$q->whereNotNull('memo_penyelesaian');
});
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->orWhereRelation('penawaran', 'nomor_registrasi', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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 ($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_pembayaran' => dateFormat(
$persetujuanPenawaran->noc->tanggal_pembayaran ?? $persetujuanPenawaran->noc?->created_at,
true,
),
'nominal_bayar' => currencyFormat($persetujuanPenawaran->nominal_bayar ?? 0,
),
'nominal_diterima' => currencyFormat(
$persetujuanPenawaran->noc->nominal_bayar ?? 0,
),
'bukti_ksl' => $persetujuanPenawaran->noc->bukti_ksl ?? $persetujuanPenawaran->bukti_ksl ?? null,
'bukti_bayar' => $persetujuanPenawaran->bukti_bayar ?? null,
'memo_penyelesaian' => $persetujuanPenawaran->noc->memo_penyelesaian ?? $persetujuanPenawaran->memo_penyelesaian ?? null,
'nominal_penyelesaian' => currencyFormat(
$persetujuanPenawaran->noc->nominal_penyelesaian ?? $persetujuanPenawaran->nominal_penyelesaian ?? 0,
),
'bukti_penyelesaian' => $persetujuanPenawaran->noc->bukti_penyelesaian ?? $persetujuanPenawaran->bukti_penyelesaian ?? null,
'tanggal_penyelesaian' => $persetujuanPenawaran->noc?->tanggal_penyelesaian ? dateFormat(
$persetujuanPenawaran->noc?->tanggal_penyelesaian,
true) : '-',
'updated_at' => dateFormat($persetujuanPenawaran->updated_at, true),
];
})->sortBy('updated_at', 1);
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size')); $pageCount = ceil($totalRecords / $request->get('size'));

View File

@@ -336,9 +336,8 @@
public function show($id) public function show($id)
{ {
$prosespenawaran = PenawaranTender::with(['permohonan','tujuanPenilaianKjpp'])->find($id); $prosespenawaran = PenawaranTender::find($id);
$permohonan = $prosespenawaran->permohonan; return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran'));
return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran','permohonan'));
} }
public function penawaranulang(Request $request, $id): JsonResponse public function penawaranulang(Request $request, $id): JsonResponse

View File

@@ -61,18 +61,12 @@
// Update Permohonan Pembatalan // Update Permohonan Pembatalan
if($request->status=='approved'){ if($request->status=='approved'){
$pembatalan->status = 'approved'; $pembatalan->status = 'approved';
$pembatalan->authorized_at = now();
$pembatalan->authorized_by = auth()->user()->id;
$pembatalan->authorized_status = 1;
$pembatalan->save(); $pembatalan->save();
$permohonan->status = 'batal'; $permohonan->status = 'batal';
$permohonan->save(); $permohonan->save();
} else{ } else{
$pembatalan->status = 'rejected'; $pembatalan->status = 'rejected';
$pembatalan->authorized_at = now();
$pembatalan->authorized_by = auth()->user()->id;
$pembatalan->authorized_status = 3;
$pembatalan->save(); $pembatalan->save();
} }

View File

@@ -1,331 +1,150 @@
<?php <?php
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use Exception;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest; // use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Permohonan; // use Modules\Lpj\Models\Regions;
use Modules\Lpj\Models\PersetujuanPenawaran;
// use Modules\Lpj\Models\JenisPenilaian; class PembayaranController extends Controller
// use Modules\Lpj\Models\Regions;
class PembayaranController extends Controller
{
public $user;
public function index()
{ {
return view('lpj::pembayaran.index'); public $user;
}
public function approval() public function index()
{ {
return view('lpj::pembayaran.approval'); return view('lpj::pembayaran.index');
}
public function dataApprovalForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('noc.view')) {
//abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.');
} }
// Retrieve data from the database public function dataForDatatables(Request $request)
$query = PersetujuanPenawaran::query(); {
// Apply search filter if provided if (is_null($this->user) || !$this->user->can('debitur.view')) {
if ($request->has('search') && !empty($request->get('search'))) { // abort(403, 'Sorry! You are not allowed to view users.');
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->orWhereRelation('penawaran', 'nomor_registrasi', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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(
[
'penawaran.permohonan.user',
'penawaran.permohonan.debiture',
'penawaran.permohonan.branch',
'permohonan.debiture',
'permohonan.branch',
'permohonan.user',
'permohonan.approveBayar',
'penawaran.permohonan.approveBayar',
'penawaran.detail',
'penawaran.persetujuan',
],
)->get();
// 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 edit($id)
{
$permohonan = Permohonan::find($id);
$persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $permohonan->id)->first();
return view('lpj::pembayaran.form', compact('permohonan', 'persetujuanPenawaran'));
}
public function store(PersetujuanPenawaranRequest $request)
{
$validated = $request->validated();
$validated['created_by'] = Auth::id();
$validated['status'] = '0';
$persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $validated['permohonan_id'] ?? null)->first();
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($persetujuanPenawaran) {
// if (isset($validated['penawaran_id'])) {
// $persetujuanPenawaran = PersetujuanPenawaran::create(
// ['penawaran_id' => $validated['penawaran_id']],
// $validated,
// );
$persetujuanPenawaran->fill($validated);
if ($request->hasFile('bukti_bayar')) {
$folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id'];
$persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->store($folderPath, 'public');
} }
$persetujuanPenawaran->save();
/*
$permohonan->approve_bayar_by = null; // Tentukan status berdasarkan otorisator
$permohonan->approve_bayar_at = null; $status = match ($otorisator) {
$permohonan->status = 'done'; 'Pelaporan' => 'proses-laporan',
$permohonan->save(); 'Pembayaran' => 'proses',
} else { 'Pembatalan' => 'batal',
$persetujuanPenawaran = PersetujuanPenawaran::create( 'SLA' => 'freeze',
$validated default => '',
); };
*/
$folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id']; // jenis_penilaian_id = 1 ==> Internal
$query = Permohonan::query()->where('jenis_penilaian_id', '=', 1)->whereIn('status_bayar', ['sudah_bayar']);
if ($request->hasFile('bukti_bayar')) { /*
$persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->store($folderPath, 'public'); // Pencarian berdasarkan parameter search
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('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('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
} }
$persetujuanPenawaran->save(); */
}
// Update the status of the related permohonan to 'spk' // Filter berdasarkan region user yang login
// $query->whereHas('region.teams.teamsUsers', function ($q) {
// $q->where('user_id', Auth::id());
// });
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->save();
// andy add, update status penawaran.status='spk' // Sorting berdasarkan sortField dan sortOrder
// $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ $order = $request->get('sortOrder');
'status' => 'noc', $column = $request->get('sortField');
'updated_by' => Auth::id(), $query->orderBy($column, $order);
'updated_at' => now(), }
// Hitung total records
$totalRecords = $query->count();
// Pagination (default page size 10)
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page', 1);
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
}
// Filtered records
$filteredRecords = $query->count();
// Ambil data dengan relasi
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers'])->get();
// Hitung jumlah halaman
$pageCount = ceil($totalRecords / $size);
// Ambil current page
$currentPage = max(1, $request->get('page', 1));
// Return JSON response
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]); ]);
// andy add, update status penawaran.status='spk'
} }
return redirect() public function update(Request $request, $id)
->route('pembayaran.index')->with('success', 'Pembayaran berhasil disimpan.'); : JsonResponse {
} // init
$data = [];
$dataku = [];
$tindakan = null;
if (request()->ajax()) {
try {
$dataku = [
'approve_bayar_by' => Auth::id(),
'approve_bayar_at' => now(),
];
public function update(Request $request, $id): JsonResponse if ($request->keterangan) {
{ $dataku['approve_keterangan_bayar'] = $request->keterangan;
// init }
$data = [];
$output = [];
$tindakan = null;
if (request()->ajax()) {
try {
$data = [
'approve_bayar_by' => Auth::id(),
'approve_bayar_at' => now(),
];
if ($request->keterangan) { $data['dataku'] = $dataku;
$data['approve_keterangan_bayar'] = $request->keterangan;
$modal = Permohonan::find($id);
$modal->update($dataku);
//
$data['status'] = 'success';
$data['message'] = ['Otorisasi' . $modal->nomor_registrasi . 'berhasil di lakukan'];
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] = ['Otorisasi gagal di lakukan.'];
} }
$output['data'] = $data;
}
// Update the status of the related permohonan to 'spk' return response()->json($data);
$permohonan = Permohonan::find($id);
if ($permohonan) {
if ($request->type === 'revisi') {
$data['status'] = 'revisi-pembayaran';
$data['status_bayar'] = 'belum_bayar';
} else {
$data['status_bayar'] = 'sudah_bayar';
$data['status'] = 'proses-laporan';
}
if ($permohonan->jenis_penilaian_id == 2) {
$data['status_bayar'] = 'sudah_bayar';
$data['status'] = 'spk';
}
if ($permohonan->jenis_penilaian_id == 1) {
unset(
$data['approval_so'],
$data['approval_so_at'],
$data['approval_eo'],
$data['approval_eo_at'],
$data['approval_dd'],
$data['approval_dd_at'],
$data['keterangan']
);
}
$permohonan->update($data);
if ($permohonan->jenis_penilaian_id == 2) {
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => 'spk',
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
}
}
$output['status'] = 'success';
$output['message'] = ['Otorisasi' . $permohonan->nomor_registrasi . 'berhasil di lakukan'];
} catch (Exception $e) {
$output['status'] = 'error';
$output['message'] = ['Otorisasi gagal di lakukan.'];
}
} }
return response()->json($output); }
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Permohonan::query()->where(function ($query) {
$query->where(['status_bayar' => 'belum_bayar', 'jenis_penilaian_id' => 1])
->orWhere('status', 'revisi-pembayaran');
})
->where(function ($query) {
$query->whereNotIn('id', function ($subquery) {
$subquery->select('permohonan_id')
->from('persetujuan_penawaran')
->whereNotNull('permohonan_id');
});
});
// Pencarian berdasarkan parameter search
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('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('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Sorting berdasarkan sortField dan sortOrder
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Hitung total records
$totalRecords = $query->count();
// Pagination (default page size 10)
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page', 1);
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
}
// Filtered records
$filteredRecords = $query->count();
// Ambil data dengan relasi
$data = $query->with(['user', 'debiture', 'branch', 'jenisPenilaian'])->get();
// Hitung jumlah halaman
$pageCount = ceil($totalRecords / $size);
// Ambil current page
$currentPage = max(1, $request->get('page', 1));
// Return JSON response
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,42 +5,22 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Lpj\Http\Requests\PenilaianRequest; use Modules\Lpj\Http\Requests\PenilaianRequest;
use Modules\Lpj\Models\Authorization;
use Modules\Lpj\Models\JenisPenilaian; use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\LaporanAdminKredit;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PenilaianTeam; use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\Teams; use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Inspeksi;
use Modules\Lpj\Models\Penilai;
use Modules\Lpj\Models\Regions; use Modules\Lpj\Models\Regions;
use Modules\Location\Models\Province; use Modules\Lpj\Models\TeamsUsers;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Village;
use Modules\Usermanagement\Models\User; use Modules\Usermanagement\Models\User;
use Modules\Lpj\Http\Controllers\SurveyorController; use Illuminate\Support\Facades\Auth;
use Modules\Lpj\Http\Controllers\PenilaiController;
use Modules\Lpj\Http\Requests\FormSurveyorRequest;
class PenilaianController extends Controller class PenilaianController extends Controller
{ {
public $user; public $user;
protected $surveyorController;
protected $penilaiController;
public function __construct(SurveyorController $surveyorController, PenilaiController $penilaiController)
{
$this->surveyorController = $surveyorController;
$this->penilaiController = $penilaiController;
}
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
@@ -63,12 +43,12 @@ class PenilaianController extends Controller
try { try {
DB::beginTransaction(); DB::beginTransaction();
$penilaian = Penilaian::create($validatedData); $penilaian = Penilaian::create($validatedData);
$validatedData['penilaian_id'] = $penilaian->id; $validatedData['penilaian_id'] = $penilaian->id;
$teams_ids = []; $teams_ids = [];
$user_ids = []; $user_ids = [];
$roles = []; $roles = [];
if ($validatedData['surveyor_id'] === 'pilih_dari_region') { if ($validatedData['surveyor_id'] === 'pilih_dari_region') {
$surveyor_region_id = $validatedData['surveyor_region_id']; $surveyor_region_id = $validatedData['surveyor_region_id'];
@@ -82,28 +62,20 @@ class PenilaianController extends Controller
} }
$teams_ids[] = $surveyor_region_id; $teams_ids[] = $surveyor_region_id;
$user_ids[] = null; $user_ids[] = null;
$roles[] = 'surveyor'; $roles[] = 'surveyor';
} else { } else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
if (isset($validatedData['penilai_surveyor_id'])) { if (isset($validatedData['penilai_surveyor_id'])) {
if ($validatedData['penilai_surveyor_id'] == 'pilih_dari_region') { $user_ids[] = $validatedData['penilai_surveyor_id'];
$teams_ids[] = $validatedData['surveyor_penilai_region_id'];
$user_ids[] = null;
} else {
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['penilai_surveyor_id'];
}
} else { } else {
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['surveyor_id']; $user_ids[] = $validatedData['surveyor_id'];
} }
$roles[] = 'surveyor'; $roles[] = 'surveyor';
} }
if ($validatedData['penilai_id'] === 'pilih_dari_region') { if ($validatedData['penilai_id'] === 'pilih_dari_region') {
@@ -118,46 +90,33 @@ class PenilaianController extends Controller
} }
$teams_ids[] = $penilaian_region_id; $teams_ids[] = $penilaian_region_id;
$user_ids[] = null; $user_ids[] = null;
$roles[] = 'penilai'; $roles[] = 'penilai';
} else { } else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
if (isset($validatedData['penilai_surveyor_id'])) { if (isset($validatedData['penilai_surveyor_id'])) {
if ($validatedData['penilai_surveyor_id'] == 'pilih_dari_region') { $user_ids[] = $validatedData['penilai_surveyor_id'];
$permohonan->update([
'region_id' => $validatedData['surveyor_penilai_region_id'],
]);
$teams_ids[] = $validatedData['surveyor_penilai_region_id'];
$user_ids[] = null;
} else {
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['penilai_surveyor_id'];
}
} else { } else {
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['penilai_id']; $user_ids[] = $validatedData['penilai_id'];
} }
$roles[] = 'penilai'; $roles[] = 'penilai';
} }
// dd($validatedData['penilai_region_id'],$validatedData['teams_id']);
foreach ($teams_ids as $key => $teams_id) { foreach ($teams_ids as $key => $teams_id) {
PenilaianTeam::create([ PenilaianTeam::create([
'penilaian_id' => $validatedData['penilaian_id'], 'penilaian_id' => $validatedData['penilaian_id'],
'team_id' => $teams_id, 'team_id' => $teams_id,
'user_id' => $user_ids[$key], 'user_id' => $user_ids[$key],
'role' => $roles[$key], 'role' => $roles[$key],
]); ]);
} }
if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region' || $validatedData['penilai_surveyor_id'] === 'pilih_dari_region') { if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') {
$status = 'reassign'; $status = $permohonan->status;
} else { } else {
$status = 'assign'; $status = 'assign';
} }
@@ -167,9 +126,8 @@ class PenilaianController extends Controller
]); ]);
DB::commit(); DB::commit();
return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200); return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200);
} catch (Exception $e) { } catch (Exception $e) {
dd($e);
DB::rollBack(); DB::rollBack();
return response()->json(['error' => $e->getMessage()]); return response()->json(['error' => $e->getMessage()]);
@@ -194,8 +152,6 @@ class PenilaianController extends Controller
DB::beginTransaction(); DB::beginTransaction();
$penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first(); $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first();
$surveyTeam = null;
$penilaiTeam = null;
$penilaianId = $penilaian->id; $penilaianId = $penilaian->id;
$penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get(); $penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get();
@@ -205,39 +161,28 @@ class PenilaianController extends Controller
if ($item->role === 'surveyor' && $item->user_id === null) { if ($item->role === 'surveyor' && $item->user_id === null) {
$item->update([ $item->update([
'user_id' => $request->surveyor_id, 'user_id' => $request->surveyor_id,
'role' => 'surveyor', 'role' => 'surveyor',
]); ]);
$surveyTeam = $item->team_id;
} }
if ($item->role === 'penilai' && $item->user_id === null) { if ($item->role === 'penilai' && $item->user_id === null) {
$item->update([ $item->update([
'user_id' => $request->penilai_id, 'user_id' => $request->penilai_id,
'role' => 'penilai', 'role' => 'penilai',
]); ]);
} }
if ($item->role === 'penilai' && $surveyTeam) {
$penilaiTeam = $item->team_id;
}
} }
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
if ($surveyTeam && $penilaiTeam) {
$permohonan->update([
'region_id' => $penilaiTeam,
]);
}
$permohonan->update([ $permohonan->update([
'status' => 'assign', 'status' => 'assign',
]); ]);
DB::commit(); DB::commit();
return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200); return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200);
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
return response()->json(['success' => false, 'error' => $e->getMessage()]); return response()->json([ 'success' => false, 'error' => $e->getMessage()]);
} }
} }
@@ -257,18 +202,20 @@ class PenilaianController extends Controller
])->findOrFail($id); ])->findOrFail($id);
$idPenilaian = $permohonan->jenis_penilaian_id; $idPenilaian = $permohonan->jenis_penilaian_id;
$idRegion = $permohonan->region_id; $idRegion = $permohonan->region_id;
$jenisPenilaian = JenisPenilaian::find($idPenilaian); $jenisPenilaian = JenisPenilaian::find($idPenilaian);
$userTeam = Teams::with(['regions', 'teamsUsers.user'])->whereHas('regions', function ($q) use ($idRegion) { $userTeam = Teams::with(['regions', 'teamsUsers.user'])
$q->where('id', $idRegion); ->whereHas('regions', function ($q) use ($idRegion) {
})->get(); $q->where('id', $idRegion);
})
->get();
$teamPenilai = $userTeam->flatMap(function ($team) { $teamPenilai = $userTeam->flatMap(function ($team) {
return $team->teamsUsers->filter(function ($teamUser) { return $team->teamsUsers->filter(function ($teamUser) {
return $teamUser->user->roles->contains(function ($role) { return $teamUser->user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'penilai' || $role->name === 'administrator'; return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'administrator';
}); });
})->map(function ($teamUser) { })->map(function ($teamUser) {
return $teamUser->user; return $teamUser->user;
@@ -277,10 +224,9 @@ class PenilaianController extends Controller
$existingTeamIds = $userTeam->pluck('id')->toArray(); $existingTeamIds = $userTeam->pluck('id')->toArray();
$updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn( $updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])
'id', ->whereNotIn('id', $existingTeamIds)
$existingTeamIds, ->get();
)->get();
$regionName = null; $regionName = null;
foreach ($userTeam as $item) { foreach ($userTeam as $item) {
@@ -294,22 +240,8 @@ class PenilaianController extends Controller
$penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get(); $penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get();
} }
// dd($penilaianTeam); return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai', 'penilaianTeam'));
return view(
'lpj::penilaian.form',
compact(
'permohonan',
'teamPenilai',
'jenisPenilaian',
'penilaian',
'regionName',
'updateTeamPenilai',
'penilaianTeam',
),
);
} }
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*/ */
@@ -318,7 +250,9 @@ class PenilaianController extends Controller
{ {
$validatedData = $request->validated(); $validatedData = $request->validated();
if ($validatedData) { if ($validatedData) {
try { try {
if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) { if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) {
$file_name = $validatedData['dokumen']->getClientOriginalName(); $file_name = $validatedData['dokumen']->getClientOriginalName();
$validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name); $validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name);
@@ -326,8 +260,8 @@ class PenilaianController extends Controller
$dataToUpdate = [ $dataToUpdate = [
'keterangan' => $validatedData['keterangan'], 'keterangan' => $validatedData['keterangan'],
'dokumen' => 'dokumen_revisi/' . $file_name, 'dokumen' => 'dokumen_revisi/' . $file_name,
'status' => 'revisi', 'status' => 'revisi',
]; ];
@@ -342,9 +276,12 @@ class PenilaianController extends Controller
} }
public function dataForDatatables(Request $request) public function dataForDatatables(Request $request)
{ {
if (is_null($this->user) || !$this->user->can('debitur.view')) { if (is_null($this->user) || !$this->user->can('debitur.view')) {
} }
$query = Permohonan::query(); $query = Permohonan::query();
@@ -362,11 +299,10 @@ class PenilaianController extends Controller
}); });
} }
$query->whereIn('status', ['registered', 'registrasi-final', 'reassign']); $query->whereIn('status', ['registered', 'registrasi-final']);
// Filter berdasarkan role
if (Auth::user()->roles[0]->name !== 'administrator') { if (Auth::user()->roles[0]->name !== 'administrator') {
$query->whereHas('region.teams.teamsUsers.user', function ($q) { $query->whereHas('region.teams.teamsUsers.user', function ($q) {
$q->where('id', Auth::user()->id); $q->where('id', Auth::user()->id);
}); });
@@ -393,10 +329,7 @@ class PenilaianController extends Controller
} }
$filteredRecords = $query->count(); $filteredRecords = $query->count();
$data = $query->with( $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'])->get();
['user', 'debiture', 'branch', 'tujuanPenilaian', 'jenisPenilaian', 'region.teams.teamsUsers.user',
]
)->get();
$pageCount = ceil($totalRecords / $size); $pageCount = ceil($totalRecords / $size);
@@ -413,85 +346,47 @@ class PenilaianController extends Controller
} }
public function otorisator(Request $request) public function otorisator(Request $request)
{ {
$type = $request->route('type');
$type = $request->route('type');
$headers = [ $headers = [
'pelaporan' => 'Pelaporan', 'pelaporan' => 'Pelaporan',
'pembayaran' => 'Pembayaran', 'pembayaran' => 'Pembayaran',
'pembatalan' => 'Pembatalan', 'pembatalan' => 'Pembatalan',
'sla' => 'SLA', 'sla' => 'SLA',
'paparan' => 'Paparan'
]; ];
$regions = Regions::all();
$header = $headers[$type] ?? 'Pelaporan'; $header = $headers[$type] ?? 'Pelaporan';
switch ($header) { return view('lpj::penilaian.otorisator.index', compact('header'));
case 'SLA':
return view('lpj::penilaian.otorisator.index-sla', compact('header'));
case 'Paparan':
return view('lpj::penilaian.paparan-so', compact('header'));
default:
return view('lpj::penilaian.otorisator.index', compact('header', 'regions'));
}
} }
public function show($id, $type) public function show($id, $type)
{ {
$headers = [ $headers = [
'Pelaporan' => 'Pelaporan', 'Pelaporan' => 'Pelaporan',
'Pembayaran' => 'Pembayaran', 'Pembayaran' => 'Pembayaran',
'Pembatalan' => 'Pembatalan', 'Pembatalan' => 'Pembatalan',
'SLA' => 'SLA', 'SLA' => 'SLA',
'Paparan' => 'Paparan'
]; ];
$header = $headers[$type] ?? 'Pelaporan'; $header = $headers[$type] ?? 'Pelaporan';
$authorization = null; $permohonan = Permohonan::find($id);
if ($header === 'SLA') {
$authorization = Authorization::with(['user','permohonan.lampiranDokumen.jenisLampiran'])->find($id); return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header'));
$permohonan = Permohonan::with(['lampiranDokumen.jenisLampiran'])->find($authorization->permohonan_id);
} else {
$permohonan = Permohonan::with(['lampiranDokumen.jenisLampiran'])->find($id);
}
if ($header === 'SLA') {
return view('lpj::penilaian.otorisator.sla', compact('permohonan', 'header', 'authorization'));
}
if ($header === 'Paparan') {
$authorization = Authorization::with(['user'])->where('permohonan_id', $id)->first();
return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header', 'authorization'));
}
return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header', 'authorization'));
} }
public function otorisatorUpdate(Request $request, $id, $context) public function otorisatorUpdate(Request $request, $id, $context)
{ {
if ($context === 'Freze SLA' || $context === 'Unfreeze SLA') {
$authorization = Authorization::with(['user'])->find($id);
if (!$authorization) {
return response()->json([
'message' => 'Data authorization SLA tidak ditemukan.',
], 404);
}
$permohonan = Permohonan::find($authorization->permohonan_id);
} elseif ($context === 'Paparan') {
$authorization = Authorization::with(['user'])->find($id);
if (!$authorization) {
return response()->json([
'message' => 'Data authorization Paparan tidak ditemukan.',
], 404);
}
$permohonan = Permohonan::find($authorization->permohonan_id);
} else {
$permohonan = Permohonan::find($id);
}
$permohonan = Permohonan::find($id);
if (!$permohonan) { if (!$permohonan) {
return response()->json([ return response()->json([
'message' => 'Data permohonan tidak ditemukan.', 'message' => 'Data permohonan tidak ditemukan.'
], 404); ], 404);
} }
@@ -502,192 +397,53 @@ class PenilaianController extends Controller
$permohonan->update([ $permohonan->update([
'status_bayar' => $newStatus, 'status_bayar' => $newStatus,
'keterangan' => $request->keterangan, 'keterangan' => $request->message
]); ]);
break; break;
case 'pembatalan': case 'pembatalan':
$permohonan->update([ $permohonan->update([
'status' => 'batal', 'status' => 'batal',
'keterangan' => $request->keterangan, 'keterangan' => $request->message
]); ]);
break; break;
case 'pelaporan': case 'pelaporan':
$role = Auth::user()->roles[0]->name;
$status = 'done';
$approvalField = null;
if ($role === 'senior-officer') {
$approvalField = 'approval_so';
$status = in_array($permohonan->nilai_plafond_id, [3]) ? 'done' : 'proses-laporan';
} elseif ($role === 'EO Appraisal') {
$approvalField = 'approval_eo';
$status = in_array($permohonan->nilai_plafond_id, [2, 1]) ? 'done' : 'proses-laporan';
} elseif ($role === 'DD Appraisal') {
$approvalField = 'approval_dd';
$status = 'done';
}
if ($status == 'done' && $permohonan->status_bayar === 'sudah_bayar' && $permohonan->penilai->type_penilai === 'standar' || $permohonan->penilai->type_penilai === 'sederhana') {
$_permohonan = Permohonan::with(['documents.jenisJaminan','penilaian._user_penilai','penilai','documents.detail.jenisLegalitasJaminan'])->find($permohonan->id);
if (isset($_permohonan->penilai->lpj)) {
$npw = json_decode($_permohonan->penilai->lpj, true);
$npw = $npw['total_nilai_pasar_wajar'] ?? 0;
}
$dataAdk = [
'debiture_id' => $_permohonan->debiture_id,
'jenis_agunan' => $_permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '),
'alamat_agunan' => $_permohonan->documents->map(function ($document) {
return formatAlamat($document);
})->unique()->implode(', '),
'nama_pemilik' => $_permohonan->documents->pluck('pemilik.name')->unique()->implode(', '),
'tanggal_kunjungan' => $_permohonan->penilaian->tanggal_kunjungan,
'nama_penilai' => $_permohonan->penilaian->_user_penilai->userPenilaiTeam->name,
'nilai_likuidasi' => $_permohonan->nilai_liquidasi,
'nilai_pasar_wajar' => str_replace('.', '', $npw),
'bukti_kepemilikan' => $_permohonan->documents->flatMap(function ($document) {
return $document->detail->map(function ($detail) {
return $detail->jenisLegalitasJaminan->name ?? null;
});
})->filter()->unique()->implode(', '),
];
LaporanAdminKredit::create($dataAdk);
}
if ($approvalField) {
$this->updatePermohonan($permohonan, $status, $approvalField, $request->keterangan);
}
break;
case 'freze sla':
if (Auth::user()->roles[0]->name === 'senior-officer' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so === null) {
$authorization->update([
'status' => '3',
'status_so' => '1',
'approve_so' => Auth::user()->id,
'approve_so_at' => now(),
'keterangan_so' => $request->message,
]);
} elseif (Auth::user()->roles[0]->name === 'EO Appraisal' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so && $authorization->approve_eo === null) {
$status = '2';
if (in_array($permohonan->nilai_plafond_id, [1, 2])) {
$status = '1';
$permohonan->update([
'status' => $authorization->request
]);
}
$authorization->update([
'status' => $status,
'status_eo' => '1',
'approve_eo' => Auth::user()->id,
'approve_eo_at' => now(),
'keterangan_eo' => $request->message,
]);
} elseif (Auth::user()->roles[0]->name === 'DD Appraisal' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so && $authorization->approve_eo && $authorization->approve_dd === null) {
$authorization->update([
'status' => '1',
'status_dd' => '1',
'approve_dd' => Auth::user()->id,
'approve_dd_at' => now(),
'keterangan_dd' => $request->message,
]);
$permohonan->update([
'status' => $authorization->request
]);
}
break;
case 'paparan':
if (Auth::user()->roles[0]->name === 'senior-officer' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so === null) {
$status = '3';
if (in_array($permohonan->nilai_plafond_id, [3])) {
$status = '1';
$permohonan->update([
'status' => $authorization->request
]);
}
$authorization->update([
'status' => $status,
'status_so' => '1',
'approve_so' => Auth::user()->id,
'approve_so_at' => now(),
'keterangan_so' => $request->keterangan,
]);
$permohonan->update([
'tanggal_paparan' => $request->tanggalPaparan,
'keterangan' => $request->keterangan
]);
} elseif (Auth::user()->roles[0]->name === 'EO Appraisal') {
$status = '2';
if (in_array($permohonan->nilai_plafond_id, [1,2, 3])) {
$status = '1';
$permohonan->update([
'status' => $authorization->request
]);
}
$authorization->update([
'status' => $status,
'status_eo' => '1',
'approve_eo' => Auth::user()->id,
'approve_eo_at' => now(),
'keterangan_eo' => $request->keterangan,
]);
} elseif (Auth::user()->roles[0]->name === 'DD Appraisal' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so && $authorization->approve_dd === null) {
$authorization->update([
'status' => '1',
'status_dd' => '1',
'approve_dd' => Auth::user()->id,
'approve_dd_at' => now(),
'keterangan_dd' => $request->keterangan,
]);
$permohonan->update([
'status' => 'paparan'
]);
}
break;
case 'unfreeze sla':
$authorization->update([
'request' => 'unfreeze-sla',
]);
$permohonan->update([ $permohonan->update([
'status' => 'unfreeze-sla', 'status' => 'proses-laporan',
'keterangan' => $request->message
]);
break;
case 'sla':
$permohonan->update([
'status' => 'proses-sla',
'keterangan' => $request->message
]); ]);
break; break;
default: default:
return response()->json([ return response()->json([
'message' => 'Konteks otorisasi tidak valid.', 'message' => 'Konteks otorisasi tidak valid.'
], 400); ], 400);
} }
return response()->json([ return response()->json([
'message' => 'Otorisasi berhasil dilakukan.', 'message' => 'Otorisasi berhasil dilakukan.',
'data' => $permohonan, 'data' => $permohonan
]); ]);
} }
public function updatePermohonan($permohonan, $status, $approvalField, $message)
{
$permohonan->update([
'status' => $status,
$approvalField => Auth::user()->id,
"{$approvalField}_at" => now(),
'keterangan' => $message,
]);
}
public function dataForAuthorization(Request $request, $otorisator) public function dataForAuthorization(Request $request, $otorisator)
{ {
if (is_null($this->user) || !$this->user->can('debitur.view')) { if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.'); // abort(403, 'Sorry! You are not allowed to view users.');
} }
@@ -695,12 +451,11 @@ class PenilaianController extends Controller
// Tentukan status berdasarkan otorisator // Tentukan status berdasarkan otorisator
$status = match ($otorisator) { $status = match ($otorisator) {
'Pelaporan' => 'proses-laporan', 'Pelaporan' => 'proses-laporan',
'Pembayaran' => 'proses', 'Pembayaran' => 'proses',
'Pembatalan' => 'batal', 'Pembatalan' => 'batal',
'SLA' => 'request-freeze', 'SLA' => 'freeze',
'Paparan' => 'proses-paparan', default => '',
default => '',
}; };
@@ -709,7 +464,6 @@ class PenilaianController extends Controller
// Pencarian berdasarkan parameter search // Pencarian berdasarkan parameter search
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
@@ -717,7 +471,6 @@ class PenilaianController extends Controller
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('region', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%');
}); });
} }
@@ -730,35 +483,15 @@ class PenilaianController extends Controller
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]); $query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
} elseif ($status == 'batal') { } elseif ($status == 'batal') {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]); $query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
} elseif ($status == 'request-freeze') { } elseif ($status == 'freeze') {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]); $query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
} elseif ($status == 'proses-paparan') {
$query->whereRaw('LOWER(status) IN (?, ?)', ['proses-paparan', 'paparan']);
} }
} }
// Filter berdasarkan region user yang login // Filter berdasarkan region user yang login
// if ($status == 'proses-laporan') { $query->whereHas('region.teams.teamsUsers', function ($q) {
// $requestedRegion = $request->get('search'); $q->where('user_id', Auth::id());
});
// if ($requestedRegion) {
// $query->whereHas('region', function ($q) use ($requestedRegion) {
// $q->where('name', $requestedRegion);
// });
// } else {
// $query->whereHas('region.teams.teamsUsers', function ($q) {
// $q->where('user_id', Auth::id());
// });
// }
// } else {
if (Auth::user()->hasRole('senior-officer')) {
$query->whereHas('region.teams.teamsUsers', function ($q) {
$q->where('user_id', Auth::id());
});
}
// }
// Sorting berdasarkan sortField dan sortOrder // Sorting berdasarkan sortField dan sortOrder
@@ -788,24 +521,7 @@ class PenilaianController extends Controller
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Ambil data dengan relasi // Ambil data dengan relasi
$data = $query->with([ $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers'])->get();
'user',
'debiture',
'branch',
'tujuanPenilaian',
'nilaiPlafond',
'penilaian.userPenilai' => function ($q) {
$q->where('role', 'penilai')->with(['user', 'team.regions']);
},
'penilai',
'approveSo',
'approveEo',
'approveDd',
'authorization.approveSo',
'authorization.approveEo',
'authorization.approveDd'
])->get();
// Hitung jumlah halaman // Hitung jumlah halaman
@@ -826,191 +542,5 @@ class PenilaianController extends Controller
]); ]);
} }
public function view_laporan(Request $request)
{
$id = $request->permohonanId;
$documentId = $request->query('documentId');
$jaminanId = $request->query('jaminanId');
$permohonan = $this->surveyorController->getPermohonanJaminanId($id, $documentId, $jaminanId);
$basicData = $this->surveyorController->getCommonData();
$provinces = Province::all();
$inspeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $documentId)->first();
$lpj = Penilai::where('permohonan_id', $id)
->where('dokument_id', $documentId)
->first();
$penilai = $lpj;
$forminspeksi = null;
$lpjData = null;
if ($inspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true);
}
$nomorLaporan = $this->penilaiController->generateNoLaporan($permohonan, $documentId, $lpj->type_penilai);
$formFoto = $formPeta = $cities = $districts = $villages = $memo = null;
if ($lpj) {
$lpjData = json_decode($lpj->lpj, true);
$resumeData = json_decode($lpj->resume, true);
$callReport = json_decode($lpj->call_report, true);
if (isset($lpj->memo)) {
$memo = json_decode($lpj->memo);
}
if (isset($memo->lokasi->province_code)) {
$cities = City::where('province_code', $memo->lokasi->province_code)->get();
}
if (isset($memo->lokasi->city_code)) {
$districts = District::where('city_code', $memo->lokasi->city_code)->get();
}
if (isset($memo->lokasi->district_code)) {
$villages = Village::where('district_code', $memo->lokasi->district_code)->get();
}
$rap = json_decode($lpj->rap, true);
}
if (empty($lpj->type_penilai)) {
return redirect()->back()->with('error', 'Masih diproses');
}
$viewLaporan = $this->getViewLaporan($lpj->type_penilai);
if (empty($viewLaporan)) {
return redirect()->back()->with('error', 'Laporan belum dibuat');
}
return view('lpj::' . $viewLaporan, compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'resumeData', 'rap', 'memo', 'cities', 'districts', 'villages', 'formFoto', 'formPeta', 'nomorLaporan', 'penilai', 'callReport'));
}
private function getViewLaporan($tipe)
{
$viewMap = [
'sederhana' => 'penilai.components.lpj-sederhana-standar',
'standar' => 'penilai.components.lpj-sederhana-standar',
'resume' => 'penilai.components.resume',
'memo' => 'penilai.components.memo',
'rap' => 'penilai.components.rap-penilai',
'call-report' => 'penilai.components.call-report',
];
return $viewMap[$tipe] ?? '';
}
public function storePenilaiLaporan(Request $request)
{
DB::beginTransaction();
try {
$validatedRequest = app(FormSurveyorRequest::class);
$this->surveyorController->store($validatedRequest);
$data = [
'luas_tanah_penilai' => $request->input('luas_tanah_penilai'),
'nilai_tanah_1' => $request->input('nilai_tanah_1'),
'nilai_tanah_2' => $request->input('nilai_tanah_2'),
'luas_bangunan_penilai' => $request->input('luas_bangunan_penilai'),
'nilai_bangunan_1' => $request->input('nilai_bangunan_1'),
'nilai_bangunan_2' => $request->input('nilai_bangunan_2'),
'sarana_pelengkap_penilai' => $request->input('sarana_pelengkap_penilai'),
'nilai_sarana_pelengkap_1' => $request->input('nilai_sarana_pelengkap_1'),
'nilai_sarana_pelengkap_2' => $request->input('nilai_sarana_pelengkap_2'),
'total_nilai_pasar_wajar' => $request->input('total_nilai_pasar_wajar'),
'likuidasi' => $request->input('likuidasi'),
'likuidasi_nilai_1' => $request->input('likuidasi_nilai_1'),
'likuidasi_nilai_2' => $request->input('likuidasi_nilai_2'),
'asuransi_luas_bangunan' => $request->input('asuransi_luas_bangunan'),
'asuransi_nilai_1' => $request->input('asuransi_nilai_1'),
'asuransi_nilai_2' => $request->input('asuransi_nilai_2'),
];
// Update atau buat data baru
Penilai::updateOrCreate(
[
'permohonan_id' => $request->permohonanId,
'dokument_id' => $request->documentId,
],
[
'lpj' => json_encode($data),
]
);
DB::commit();
return response()->json([
'success' => true,
'message' => 'Berhasil Update Laporan penilai',
'data' => $request->all(),
], 200);
} catch (\Throwable $e) {
DB::rollBack();
return response()->json([
'success' => false,
'message' => 'Terjadi kesalahan',
'error' => $e->getMessage()
], 500);
}
}
public function revisiLaporan(Request $request, $id)
{
// dd($id);
if ($request->dataHeader == 'Paparan' || $request->dataHeader == 'Freze SLA') {
$authorization = Authorization::find($id);
$permohonan = Permohonan::find($authorization->permohonan_id);
} else {
$permohonan = Permohonan::find($id);
$userRole = Auth::user()->roles[0]->name;
}
if ($permohonan->status === 'proses-paparan') {
if ($authorization) {
$authorization->delete();
}
$status = 'revisi-paparan';
} elseif ($permohonan->status === 'request-freeze') {
if ($authorization) {
$authorization->delete();
}
$status = 'reject-freeze';
} elseif ($permohonan->status === 'proses-laporan' && $userRole === 'senior-officer') {
$status = 'revisi-laporan';
} elseif ($permohonan->status === 'proses-laporan' && $userRole === 'EO Appraisal') {
$permohonan->update([
'approval_so' => 0,
'approval_so_at' => null,
]);
$status = 'revisi-laporan';
} elseif ($permohonan->status === 'proses-laporan' && $userRole === 'DD Appraisal') {
$permohonan->update([
'approval_so' => 0,
'approval_so_at' => null,
'approval_eo' => 0,
'approval_eo_at' => null,
]);
$status = 'revisi-laporan';
} else {
return response()->json([
'success' => false,
'message' => 'Tidak ada tindakan yang dapat dilakukan untuk status saat ini.',
], 400);
}
// Perbarui status dan informasi lainnya
$permohonan->update([
'status' => $status,
'keterangan' => $request->keterangan,
'submitted_at' => now(),
]);
return response()->json([
'success' => true,
'message' => 'Berhasil Revisi Laporan penilai.',
], 200);
}
} }

View File

@@ -3,16 +3,15 @@
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf;
use Exception; use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\City; use Modules\Location\Models\City;
use Modules\Location\Models\District; use Modules\Location\Models\District;
use Modules\Location\Models\Province; use Modules\Location\Models\Province;
use Modules\Location\Models\Village; use Modules\Location\Models\Village;
use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Exports\PermohonanExport; use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Http\Requests\PermohonanRequest; use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Branch;
@@ -20,9 +19,7 @@
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisFasilitasKredit; use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond; use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Lpj\Services\PermohonanHistoryService;
@@ -71,14 +68,6 @@
$permohonan->toArray(), $permohonan->toArray(),
$filePath, $filePath,
); );
$documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
if (count($documents) < 1) {
return redirect()->route(
'debitur.jaminan.create',
array_merge(['permohonan_id' => $permohonan->id], ['id' => $permohonan->debiture->id]),
)->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
}
return redirect() return redirect()
->route('permohonan.index')->with('success', 'Permohonan created successfully'); ->route('permohonan.index')->with('success', 'Permohonan created successfully');
} catch (Exception $e) { } catch (Exception $e) {
@@ -146,6 +135,30 @@
); );
} }
public function update(PermohonanRequest $request, $id)
{
$permohonan = Permohonan::findOrFail($id);
$beforeRequest = $permohonan->toArray();
$validate = $request->validated();
if ($validate) {
try {
// Update in database
if ($permohonan->status == 'revisi') {
$validate['status'] = 'order';
}
$permohonan->update($validate);
return redirect()
->route('permohonan.index')->with('success', 'Permohonan updated successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan');
}
}
}
public function destroy($id) public function destroy($id)
{ {
try { try {
@@ -167,18 +180,12 @@
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query(); $query = Permohonan::query();
if (!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
$query = $query->orderBy('nomor_registrasi', 'desc'); $query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('mig_mst_lpj_nomor_jaminan', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
@@ -215,37 +222,7 @@
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->get(); $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian'])->get();
$data = $data->map(function ($item) {
return [
'id' => $item->id,
'nomor_registrasi' => $item->nomor_registrasi,
'mig_mst_lpj_nomor_jaminan' => $item->mig_mst_lpj_nomor_jaminan,
'tanggal_permohonan' => $item->tanggal_permohonan ? dateFormat(
$item->tanggal_permohonan,
) : null,
'pemohon' => $item->user->name ?? 'N/A',
'branch' => $item->branch->name ?? 'N/A',
'debiture' => [
'name' => $item->debiture->name,
],
'tujuan_penilaian' => [
'code' => $item->tujuanPenilaian->code ?? null,
'name' => $item->tujuanPenilaian->name ?? null,
],
'status' => $item->status,
'documents' => count($item->documents),
'keterangan' => $item->keterangan,
'penilaian' => [
'id' => $item->penilaian->id ?? null,
'waktu_penilaian' => $item->penilaian->waktu_penilaian ?? null,
'rejected_note' => $item->penilaian->rejected_note ?? null,
'authorized_status' => $item->penilaian->authorized_status ?? null,
],
'registrasi_catatan' => $item->registrasi_catatan,
];
});
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $size); $pageCount = ceil($totalRecords / $size);
@@ -267,7 +244,7 @@
public function export() public function export()
{ {
return Excel::download(new PermohonanExport(), 'permohonan.xlsx'); return Excel::download(new PermohonanExport, 'permohonan.xlsx');
} }
public function authorization() public function authorization()
@@ -282,11 +259,7 @@
} }
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query()->with('documents')->has('documents', '>', 0)->where('status', '=', 'order'); $query = Permohonan::query();
if (!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
@@ -325,7 +298,8 @@
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->where('status', '=', 'order')->get(
);
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size')); $pageCount = ceil($totalRecords / $request->get('size'));
@@ -383,10 +357,11 @@
public function showPembatalan($id) public function showPembatalan($id)
{ {
$permohonan = Permohonan::with(['pembatalan', 'debiture'])->findOrFail($id); $permohonan = Permohonan::with(['pembatalan','debiture'])->findOrFail($id);
return view('lpj::permohonan.pembatalan-form', compact('permohonan')); return view('lpj::permohonan.pembatalan-form', compact('permohonan'));
} }
public function pembatalan(Request $request) public function pembatalan(Request $request)
{ {
// Validate the request // Validate the request
@@ -413,106 +388,4 @@
return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval'); return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval');
} }
public function storeAproved(Request $request, $id)
: JsonResponse {
$data = [];
if (request()->ajax()) {
try {
$penilaian = Penilaian::findOrFail($id);
$penilaian->update([
'authorized_status' => 1,
]);
$permohonan = Permohonan::findOrFail($request->permohonan_id);
$permohonan->update([
'status' => 'proses-survey',
]);
$data['status'] = 'success';
$data['message'] = 'Jadwal ' . $request->noReg . ' berhasil di aprove';
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] = 'Gagal membuat jadwal: ' . $e->getMessage();
}
} else {
$data['status'] = 'error';
$data['message'] = "no ajax request";
}
return response()->json($data);
}
public function update(PermohonanRequest $request, $id)
{
$permohonan = Permohonan::findOrFail($id);
$beforeRequest = $permohonan->toArray();
$validate = $request->validated();
if ($validate) {
try {
// Update in database
if ($permohonan->status == 'revisi') {
$validate['status'] = 'order';
}
$permohonan->update($validate);
$documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
if (count($documents) < 1) {
return redirect()->route(
'debitur.jaminan.create',
array_merge(['permohonan_id' => $permohonan->id], ['id' => $permohonan->debiture->id]),
)->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
}
return redirect()
->route('permohonan.index')->with('success', 'Permohonan updated successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan');
}
}
}
public function storeRescheduleSurvey(Request $request, $id)
{
try {
$validatedData = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id',
'penilaian_id' => 'nullable',
'nomor_registrasi' => 'required',
'reschedule_note' => 'required',
'reschedule_date' => 'required',
'keterangan' => 'required',
]);
DB::beginTransaction();
$permohonan = Permohonan::findOrFail($request->permohonan_id);
$permohonan->update([
'status' => 'request-reschedule',
]);
$penilaian = Penilaian::findOrFail($id);
$penilaian->update([
'reschedule_date' => $request->reschedule_date,
'reschedule_note' => $request->reschedule_note,
]);
DB::commit();
return response()->json([
'status' => 'success',
'message' => 'Proses request reschedule permohonan Nomor registrasi ' . $request->nomor_registrasi . ' berhasil',
]);
} catch (Exception $e) {
DB::rollBack();
return response()->json([
'status' => 'error',
'message' => 'Gagal membuat request reschedule: ' . $e->getMessage(),
]);
}
}
} }

View File

@@ -6,7 +6,6 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest; use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest;
use Modules\Lpj\Models\Noc;
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranDetailTenderLog; use Modules\Lpj\Models\PenawaranDetailTenderLog;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
@@ -68,20 +67,22 @@
$persetujuanPenawaran->save(); $persetujuanPenawaran->save();
// Update the status of the related permohonan to 'spk'
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->status = 'noc';
$permohonan->save();
// Save NOC // andy add, update status penawaran.status='spk'
try { // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
$noc = Noc::updateOrCreate([ PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'permohonan_id' => $persetujuanPenawaran->permohonan_id, 'status' => 'noc',
'persetujuan_penawaran_id' => $persetujuanPenawaran->id 'updated_by' => Auth::id(),
],[ 'updated_at' => now(),
'bukti_bayar' => $persetujuanPenawaran->bukti_bayar,
]); ]);
} catch (\Exception $e) { // andy add, update status penawaran.status='spk'
\Log::error('Failed to create or update NOC: ' . $e->getMessage());
return redirect()
->route('persetujuan-penawaran.index')
->with('error', 'Persetujuan Penawaran berhasil disimpan tetapi gagal membuat NOC: ' . $e->getMessage());
} }
return redirect() return redirect()

View File

@@ -23,7 +23,6 @@ use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
class ProsesPenawaranController extends Controller class ProsesPenawaranController extends Controller
{ {
@@ -95,10 +94,10 @@ class ProsesPenawaranController extends Controller
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
$q->where('penawaran.nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
//$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
//$q->orWhereRelation('tujuanPenilaianKJPP', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaianKJPP', 'name', 'LIKE', '%' . $search . '%');
//$q->orWhere('status', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%');
}); });
} }
@@ -181,7 +180,7 @@ class ProsesPenawaranController extends Controller
if (request()->ajax()) { if (request()->ajax()) {
$id = $request->id; $id = $request->id;
$penawaran = PenawaranTender::with('permohonan.debiture')->find($id); $penawaran = PenawaranTender::find($id);
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') ->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
@@ -437,11 +436,7 @@ class ProsesPenawaranController extends Controller
public function show($id) public function show($id)
{ {
$prosespenawaran = PenawaranTender::find($id); $prosespenawaran = PenawaranTender::find($id);
$permohonan = ""; return view('lpj::prosespenawaran.show', compact('id', 'prosespenawaran'));
if($prosespenawaran){
$permohonan = Permohonan::where('nomor_registrasi',$prosespenawaran->nomor_registrasi)->first();
}
return view('lpj::prosespenawaran.show', compact('id', 'prosespenawaran','permohonan'));
} }
public function updateDraft(Request $request, $id): JsonResponse public function updateDraft(Request $request, $id): JsonResponse
@@ -609,7 +604,7 @@ class ProsesPenawaranController extends Controller
if (request()->ajax()) { if (request()->ajax()) {
$id = $request->id; $id = $request->id;
$penawaran = PenawaranTender::with('permohonan.debiture')->where('status','=','proposal-tender')->find($id); $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id);
if ($penawaran) { if ($penawaran) {
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
@@ -966,7 +961,7 @@ class ProsesPenawaranController extends Controller
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
// dd($permohonan); // dd($permohonan);
$status = StatusPermohonan::all(); $status = StatusPermohonan::all();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); $tujuan_penilaian_kjpp = TujuanPenilaian::all();
$jenis_laporan = JenisLaporan::all(); $jenis_laporan = JenisLaporan::all();
$kjpp = KJPP::all(); $kjpp = KJPP::all();

View File

@@ -117,8 +117,8 @@ class ProsesPenawaranUlangController extends Controller
$penawrandetails = array(); $penawrandetails = array();
if (request()->ajax()) { if (request()->ajax()) {
$id = $request->id; $id = $request->id;
$penawaran = PenawaranTender::with('permohonan.debiture')->where('status','=','proposal-tender')->find($id); $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id);
if ($penawaran) { if ($penawaran) {
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)

View File

@@ -9,10 +9,7 @@
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisPenilaian; use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Penilai;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Regions; use Modules\Lpj\Models\Regions;
@@ -32,9 +29,7 @@
} }
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query() $query = Permohonan::query()->where('status', '=', 'preregister');
->whereIn('status', ['preregister', 'revisi']);
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
@@ -99,8 +94,7 @@
} }
public function setData(Request $request) public function setData(Request $request)
: JsonResponse : JsonResponse {
{
$data = []; $data = [];
$datas = []; $datas = [];
@@ -125,42 +119,15 @@
$data['message'] ['message_data'] = ["data not found"]; $data['message'] ['message_data'] = ["data not found"];
} }
} else { } else {
$data['status'] = 'error'; $data['status'] = 'error';
$data['message']['message_ajax'] = ["no ajax request"]; $data['message']['message_ajax'] = ["no ajax request"];
} }
return response()->json($data); return response()->json($data);
} }
public function show($id)
{
$permohonan = Permohonan::find($id);
$debitur = Debiture::find($permohonan->debiture_id);
$documents = DokumenJaminan::with('pemilik', 'detail')->where('permohonan_id', $id)->get();
return view('lpj::registrasi.show', compact('id', 'permohonan', 'documents', 'debitur'));
}
public function storeRevisi(Request $request, $id)
{
try {
$permohonan = Permohonan::find($id);
$permohonan->update([
'status' => 'registered'
]);
return redirect()->route('registrasi.index')->with('success', 'Submit Revision successfully');
} catch (Exception $e) {
return redirect()
->route('registrasi.index')
->with('error', 'Failed to create permohonan' . $e->getMessage());
}
}
public function update(Request $request, $id) public function update(Request $request, $id)
: JsonResponse : JsonResponse {
{
// init // init
$data = []; $data = [];
$dataku = []; $dataku = [];
@@ -182,6 +149,7 @@
if ($tindakan == 0) { if ($tindakan == 0) {
$dataku['jenis_penilaian_id'] = $request->jenis_penilaian; $dataku['jenis_penilaian_id'] = $request->jenis_penilaian;
$dataku['region_id'] = $request->region; $dataku['region_id'] = $request->region;
$dataku['sla'] = $request->sla;
$dataku['status'] = 'registered'; $dataku['status'] = 'registered';
if ($request->catatan2) { if ($request->catatan2) {
$dataku['registrasi_catatan'] = $request->catatan2; $dataku['registrasi_catatan'] = $request->catatan2;
@@ -196,18 +164,6 @@
$modal = Permohonan::find($id); $modal = Permohonan::find($id);
$modal->update($dataku); $modal->update($dataku);
if ($modal && $request->jenis_laporan) {
foreach ($modal->documents as $document) {
Penilai::updateOrCreate(
[
'permohonan_id' => $id,
'dokument_id' => $document->id
],
['type' => $request->jenis_laporan]
);
}
}
// //
$data['status'] = 'success'; $data['status'] = 'success';
$data['message'] ['message_success'] = ['Regitrasi ' . $modal->nomor_registrasi . ' successfully']; $data['message'] ['message_success'] = ['Regitrasi ' . $modal->nomor_registrasi . ' successfully'];
@@ -250,7 +206,13 @@
$validateIt['region'] = ['required']; $validateIt['region'] = ['required'];
$messageIt ['region.required'] = 'Silahkan pilih Region'; $messageIt ['region.required'] = 'Silahkan pilih Region';
} }
} else if ($tindakan == 1) { else
{
$validateIt['sla'] = ['required'];
$messageIt ['sla.required'] = 'Silahkan isi SLA';
}
} elseif ($tindakan == 1) {
$validateIt['catatan'] = ['required']; $validateIt['catatan'] = ['required'];
$messageIt ['catatan.required'] = 'Silahkan isi Catatan'; $messageIt ['catatan.required'] = 'Silahkan isi Catatan';
} }
@@ -262,4 +224,11 @@
return $data; return $data;
} }
public function show($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::registrasi.show', compact('id', 'permohonan'));
}
} }

View File

@@ -46,19 +46,21 @@
} }
// Retrieve data from the database // Retrieve data from the database
$query =PenawaranTender::query() $query = PenawaranTender::with(['permohonan', 'tujuanPenilaianKjpp'])->whereHas(
->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') 'permohonan',
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') function ($q) {
->where('penawaran.status','=','spk') $q->where('status', '=', 'spk');
->withCount('penawarandetails'); },
)->withCount('penawarandetails');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
//$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
//$q->orWhere('status', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
}); });
} }

View File

@@ -1,22 +0,0 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\TujuanPenilaian;
class RekapHarianSoController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$total_laporan_debitur = 0;
$tujuan_penilaian = TujuanPenilaian::all();
return view('lpj::rekap-harian-so.index', compact('tujuan_penilaian', 'total_laporan_debitur'));
}
}

View File

@@ -4,11 +4,9 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Modules\Lpj\Models\Authorization;
class SLAController extends Controller class SLAController extends Controller
{ {
public $user;
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
@@ -64,72 +62,4 @@ class SLAController extends Controller
{ {
// //
} }
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Authorization::query()->with('permohonan.debiture', 'user', 'approveSo', 'approveEo', 'approveDd')->where('jenis', 'sla')->where('request', 'freeze');
// Pencarian berdasarkan parameter search
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->orWhereRelation('permohonan', 'nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('permohonan', 'tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('permohonan.debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Sorting berdasarkan sortField dan sortOrder
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Hitung total records
$totalRecords = $query->count();
// Pagination (default page size 10)
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page', 1);
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
}
// Filtered records
$filteredRecords = $query->count();
// Ambil data dengan relasi
$data = $query->get();
// Hitung jumlah halaman
$pageCount = ceil($totalRecords / $size);
// Ambil current page
$currentPage = max(1, $request->get('page', 1));
// Return JSON response
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
} }

View File

@@ -46,8 +46,9 @@ use Illuminate\Support\Facades\Auth;
$search = $request->get('search'); $search = $request->get('search');
$query->where(function ($q) use ($search) { $query->where(function ($q) use ($search) {
$q->whereRelation('permohonan','nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->whereRelation('permohonan','nomor_registrasi', 'LIKE', '%' . $search . '%');
//$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
//$q->orWhere('status', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
}); });
} }
@@ -148,17 +149,26 @@ use Illuminate\Support\Facades\Auth;
public function edit($id) public function edit($id)
{ {
$penawaran = PenawaranTender::with(['jenisLaporan','tujuanPenilaianKjpp','detail.kjpp','penilaian','persetujuan_penawaran'])->where('id',$id)->first(); // dd(Carbon::now()->addDays(1)->format('d F Y'));
$penawaran->attachmentku = $penawaran->detail->attachment; // dd(Carbon::now()->subDays(1)->format('d F Y')); jenis_laporan_name
$penawaran->detail_penawaran_no_proposal = $penawaran->detail->no_proposal; $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
$penawaran->detail_penawaran_tgl_proposal = $penawaran->detail->tgl_proposal; ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
$penawaran->detail_penawaran_biaya_penawaran = $penawaran->detail->biaya_penawaran; ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
$penawaran->kjpp_name = $penawaran->detail->kjpp->name; ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
$penawaran->kjpp_address = $penawaran->detail->kjpp->address; ->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi')
$penawaran->jenis_laporan_name = $penawaran->jenisLaporan->name; ->where('detail_penawaran.status','=',1)
$penawaran->jenis_laporan_code = $penawaran->jenisLaporan->code; ->where('penawaran.id','=', $id)
$penawaran->tujuan_penilaian_kjpp_name = $penawaran->tujuanPenilaianKjpp->name; ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
$penawaran->penilaian_waktu_penilain = $penawaran->penilaian->waktu_penilaian ?? ""; 'detail_penawaran.no_proposal as detail_penawaran_no_proposal',
'detail_penawaran.tgl_proposal as detail_penawaran_tgl_proposal',
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name',
'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name',
'jenis_laporan.code as jenis_laporan_code',
'penilaian.waktu_penilaian as penilaian_waktu_penilain'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
@@ -166,7 +176,7 @@ use Illuminate\Support\Facades\Auth;
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address'); 'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan.detail'])->first(); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first();
if($penawaran->detail_penawaran_tgl_proposal) if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
@@ -227,24 +237,28 @@ use Illuminate\Support\Facades\Auth;
public function update(Request $request, $id): JsonResponse public function update(Request $request, $id): JsonResponse
{ {
// init // init
$data1 = []; $data1 = [];
// $dataPermohonan = array(); // $dataPermohonan = array();
$dataPenawaran = []; $dataPenawaran = [];
// data // data
$penawaran = PenawaranTender::with(['jenisLaporan','tujuanPenilaianKjpp','detail.kjpp','penilaian','persetujuan_penawaran'])->where('id',$id)->first(); $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
$penawaran->attachmentku = $penawaran->detail->attachment; ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
$penawaran->detail_penawaran_no_proposal = $penawaran->detail->no_proposal; ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
$penawaran->detail_penawaran_tgl_proposal = $penawaran->detail->tgl_proposal; ->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi')
$penawaran->detail_penawaran_biaya_penawaran = $penawaran->detail->biaya_penawaran; ->where('detail_penawaran.status','=',1)
$penawaran->kjpp_name = $penawaran->detail->kjpp->name; ->where('penawaran.id','=', $id)
$penawaran->kjpp_address = $penawaran->detail->kjpp->address; ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
$penawaran->jenis_laporan_name = $penawaran->jenisLaporan->name; 'detail_penawaran.no_proposal as detail_penawaran_no_proposal',
$penawaran->jenis_laporan_code = $penawaran->jenisLaporan->code; 'detail_penawaran.tgl_proposal as detail_penawaran_tgl_proposal',
$penawaran->tujuan_penilaian_kjpp_name = $penawaran->tujuanPenilaianKjpp->name; 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
$penawaran->penilaian_waktu_penilain = $penawaran->penilaian->waktu_penilaian ?? ""; 'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name',
'jenis_laporan.code as jenis_laporan_code',
'penilaian.waktu_penilaian as penilaian_waktu_penilain'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
@@ -385,21 +399,4 @@ use Illuminate\Support\Facades\Auth;
return response()->download(storage_path('app/public/' .$document->spk_dokumen_path)); return response()->download(storage_path('app/public/' .$document->spk_dokumen_path));
} }
public function updateSla(Request $request, $id): JsonResponse
{
$request->validate([
'sla' => 'required|integer|min:1',
]);
$penawaran = PenawaranTender::find($id);
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)->first();
$permohonan->sla = $request->sla;
$permohonan->save();
return response()->json(['message' => 'SLA updated successfully']);
}
} }

File diff suppressed because it is too large Load Diff

View File

@@ -293,12 +293,12 @@ class TenderController extends Controller
} }
// Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan // Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan
if ($permohonan->documents->isEmpty()) { if ($permohonan->debiture->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
foreach ($permohonan->documents as $document) { foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -338,12 +338,12 @@ class TenderController extends Controller
} }
// Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan // Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan
if ($permohonan->documents->isEmpty()) { if ($permohonan->debiture->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
foreach ($permohonan->documents as $document) { foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -535,7 +535,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
foreach ($permohonan->documents as $document) { foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -563,7 +563,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
foreach ($permohonan->documents as $document) { foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -602,7 +602,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
if ($permohonan->documents->isEmpty()) { if ($permohonan->debiture->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
@@ -679,18 +679,11 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
if ($permohonan->documents->isEmpty()) { if ($permohonan->debiture->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)->get();
foreach ($detail_penawaran as $detail) {
$this->kirimEmailKJPP($noreg, $detail->kjpp_rekanan_id);
}
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id) $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)
->where('status', '=', 1) ->where('status', '=', 1)
->pluck('kjpp_rekanan_id') ->pluck('kjpp_rekanan_id')
@@ -700,17 +693,15 @@ class TenderController extends Controller
$kjpps = KJPP::whereIn('id', $detail_penawaran) $kjpps = KJPP::whereIn('id', $detail_penawaran)
->get() ->get()
->map(function ($item) { ->map(function ($item) {
$emails = collect(explode(',', $item->email_kantor))->filter()->unique(); $emails = [$item->email_kantor];
// Parse JSON string jika ada dan tidak kosong // Parse JSON string jika ada dan tidak kosong
if (!empty($item->detail_email_kantor) && $item->detail_email_kantor !== '[]') { if (!empty($item->detail_email_kantor) && $item->detail_email_kantor !== '[]') {
$detail_emails = json_decode($item->detail_email_kantor, true); $detail_emails = json_decode($item->detail_email_kantor, true);
if (is_array($detail_emails)) { if (is_array($detail_emails)) {
foreach ($detail_emails as $detail) { foreach ($detail_emails as $detail) {
if (is_array($detail) && isset($detail['email_kantor'])) { if (isset($detail['email_kantor'])) {
$emails->push($detail['email_kantor']); $emails[] = $detail['email_kantor'];
} elseif (is_string($detail)) {
$emails->push($detail);
} }
} }
} }
@@ -718,12 +709,11 @@ class TenderController extends Controller
return [ return [
'kjpp' => $item, 'kjpp' => $item,
'emails' => array_filter($emails->unique()->values()->all()) 'emails' => array_filter($emails)
]; ];
}); });
foreach ($permohonan->debiture->documents as $document) {
foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -734,7 +724,6 @@ class TenderController extends Controller
$districts = District::where('code', $district_permohonan)->get(); $districts = District::where('code', $district_permohonan)->get();
$cities = City::where('code', $city_permohonan)->get(); $cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get();
$user = auth::user();
$subject = 'Send Penawaran Email'; $subject = 'Send Penawaran Email';
@@ -745,21 +734,19 @@ class TenderController extends Controller
'villages' => $villages, 'villages' => $villages,
'districts' => $districts, 'districts' => $districts,
'cities' => $cities, 'cities' => $cities,
'provinces' => $provinces, 'provinces' => $provinces
'user' => $user,
])->render(); ])->render();
// Dispatch job untuk mengirim email // Dispatch job untuk mengirim email
// SendPenawaranTenderJob::dispatch( SendPenawaranTenderJob::dispatch(
// $kjpps->pluck('emails')->flatten()->toArray(), $kjpps->pluck('emails')->flatten()->toArray(),
// $penawaran, $penawaran,
// $permohonan, $permohonan,
// $villages, $villages,
// $districts, $districts,
// $cities, $cities,
// $provinces, $provinces
// $user );
// );
try { try {
// Proses log email untuk setiap KJPP // Proses log email untuk setiap KJPP
@@ -815,7 +802,7 @@ class TenderController extends Controller
} }
} }
return redirect()->back() return redirect()->route('tender.penawaran.ulang.index')
->with('success', 'Email Penawaran Berhasil Terkirim!'); ->with('success', 'Email Penawaran Berhasil Terkirim!');
} catch (\Exception $e) { } catch (\Exception $e) {
// Log email gagal untuk setiap KJPP // Log email gagal untuk setiap KJPP
@@ -871,7 +858,7 @@ class TenderController extends Controller
} }
} }
return redirect()->back() return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])
->with('error', 'Email Penawaran Gagal Terkirim!'); ->with('error', 'Email Penawaran Gagal Terkirim!');
} }
} }
@@ -890,41 +877,37 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
if ($permohonan->documents->isEmpty()) { if ($permohonan->debiture->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
$detail_penawaran = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray(); $detail_penawaran = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran) $kjpps = KJPP::whereIn('id', $detail_penawaran)
->get() ->get()
->map(function ($item) { ->map(function ($item) {
$emails = collect(explode(',', $item->email_kantor))->filter()->unique(); $emails = [$item->email_kantor];
// Parse JSON string jika ada dan tidak kosong // Parse JSON string jika ada dan tidak kosong
if (!empty($item->detail_email_kantor) && $item->detail_email_kantor !== '[]') { if (!empty($item->detail_email_kantor) && $item->detail_email_kantor !== '[]') {
$detail_emails = json_decode($item->detail_email_kantor, true); $detail_emails = json_decode($item->detail_email_kantor, true);
if (is_array($detail_emails)) { if (is_array($detail_emails)) {
foreach ($detail_emails as $detail) { foreach ($detail_emails as $detail) {
if (is_array($detail) && isset($detail['email_kantor'])) { if (isset($detail['email_kantor'])) {
$emails->add($detail['email_kantor']); $emails[] = $detail['email_kantor'];
} elseif (is_string($detail)) { }
$emails->add($detail); }
} }
} }
}
}
return array_filter(array_values(iterator_to_array($emails))); return array_filter($emails);
}) })
->flatten() ->flatten()
->unique() ->toArray();
->values()
->toArray();
$dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first(); $dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first();
foreach ($permohonan->documents as $document) { foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -935,9 +918,8 @@ class TenderController extends Controller
$districts = District::where('code', $district_permohonan)->get(); $districts = District::where('code', $district_permohonan)->get();
$cities = City::where('code', $city_permohonan)->get(); $cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get();
$user = auth()->user();
$subject = 'Send Penawaran Email'; $subject = 'Send Penawaran K J P P Email';
$body_pdf = view('lpj::penawaran.kirimEmailKJPP', [ $body_pdf = view('lpj::penawaran.kirimEmailKJPP', [
'dp1' => $dp1, 'dp1' => $dp1,
@@ -947,8 +929,7 @@ class TenderController extends Controller
'villages' => $villages, 'villages' => $villages,
'districts' => $districts, 'districts' => $districts,
'cities' => $cities, 'cities' => $cities,
'provinces' => $provinces, 'provinces' => $provinces
'user' => $user,
])->render(); ])->render();
SendPenawaranKJPPTenderJob::dispatch( SendPenawaranKJPPTenderJob::dispatch(
@@ -959,8 +940,7 @@ class TenderController extends Controller
$villages, $villages,
$districts, $districts,
$cities, $cities,
$provinces, $provinces
$user
); );
try { try {
@@ -1015,7 +995,7 @@ class TenderController extends Controller
} }
} }
return redirect()->back()->with('success', 'Email Penawaran Berhasil Terkirim!'); return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!');
} catch (\Exception $e) { } catch (\Exception $e) {
// Log email gagal // Log email gagal
foreach ($kjpps as $email) { foreach ($kjpps as $email) {
@@ -1067,7 +1047,7 @@ class TenderController extends Controller
} }
} }
return redirect()->back()->with('error', 'Email Penawaran Gagal Terkirim!'); return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with('error', 'Email Penawaran Gagal Terkirim!');
} }
} }
} }

View File

@@ -1,57 +0,0 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class BankDataRequest extends FormRequest
{
public function authorize()
{
return true; // Adjust this based on your authorization logic
}
public function rules()
{
return [
'address' => 'nullable|string|max:255',
'village_code' => 'nullable|string|max:20',
'district_code' => 'nullable|string|max:20',
'city_code' => 'nullable|string|max:20',
'province_code' => 'nullable|string|max:20',
'tahun' => 'nullable|integer',
'luas_tanah' => 'nullable|numeric',
'luas_bangunan' => 'nullable|numeric',
'tahun_bangunan' => 'nullable|integer',
'status_nara_sumber' => 'nullable|string|max:50',
'harga' => 'nullable|numeric',
'harga_diskon' => 'nullable|numeric',
'diskon' => 'nullable|numeric',
'total' => 'nullable|numeric',
'nama_nara_sumber' => 'nullable|string|max:100',
'peruntukan' => 'nullable|string|max:100',
'penawaran' => 'nullable|string|max:50',
'telepon' => 'nullable|string|max:20',
'hak_properti' => 'nullable|string|max:50',
'kordinat_lat' => 'nullable|numeric',
'kordinat_lng' => 'nullable|numeric',
'jenis_aset' => 'nullable|string|max:50',
'foto_objek' => 'nullable|image|max:2048',
'tanggal' => 'nullable|date',
'harga_penawaran' => 'nullable|numeric',
'nomor_laporan' => 'nullable|string|max:50',
'tgl_final_laporan' => 'nullable|date',
'nilai_pasar' => 'nullable|numeric',
'indikasi_nilai_likuidasi' => 'nullable|numeric',
'indikasi_nilai_pasar_tanah' => 'nullable|numeric',
'estimasi_harga_tanah' => 'nullable|numeric',
'estimasi_harga_bangunan' => 'nullable|numeric',
'indikasi_nilai_pasar_bangunan' => 'nullable|numeric',
'indikasi_nilai_pasar_sarana_pelengkap' => 'nullable|numeric',
'indikasi_nilai_pasar_mesin' => 'nullable|numeric',
'indikasi_nilai_pasar_kendaraan_alat_berat' => 'nullable|numeric',
'photos' => 'nullable|array',
'photos.*' => 'nullable|image|max:2048',
];
}
}

View File

@@ -1,33 +0,0 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CategoryDaftarPustakaRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|max:255',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:category_daftar_pustaka,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:category_daftar_pustaka,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -1,58 +0,0 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Modules\Lpj\Models\CustomField;
use Illuminate\Validation\Rule;
class CustomFieldRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
return [
'name' => 'required|max:255',
'type' => 'required|in:text,select,radio,checkbox,date,number',
'label' => 'nullable|max:255',
'urutan_prioritas' => [
'nullable',
'integer',
Rule::unique('custom_fields')->ignore($this->route('custom_field')),
],
];
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function prepareValidationData($data){
if(!$this->type){
$this->merge(['type' => 'text']);
}
if (!$this->urutan_prioritas) {
$maxPrioritas = CustomField::max('urutan_prioritas') ?? 0;
$this->merge(['urutan_prioritas' => $maxPrioritas + 1]);
}
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'urutan_prioritas.unique' => 'Urutan prioritas sudah digunakan. Silakan pilih nomor lain.',
];
}
}

View File

@@ -1,38 +0,0 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class DaftarPustakaRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'judul' => 'required|max:255',
'category_id' => 'required',
'deskripsi' => 'nullable',
];
if ($this->method() == 'PUT') {
$rules['attachment'] = 'nullable|mimes:pdf,jpg,jpeg,png,gif';
} else {
$rules['attachment'] = 'required|mimes:pdf,jpg,jpeg,png,gif';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -13,17 +13,16 @@
: array : array
{ {
$rules = [ $rules = [
'debiture_id' => 'required|exists:debitures,id', 'debiture_id' => 'required|exists:debitures,id',
'permohonan_id' => 'required|exists:permohonan,id', 'pemilik_jaminan_id' => 'required',
'pemilik_jaminan_id' => 'required', 'jenis_jaminan_id' => 'required',
'jenis_jaminan_id' => 'required', 'province_code' => 'nullable|exists:provinces,code',
'province_code' => 'nullable|exists:provinces,code', 'city_code' => 'nullable|exists:cities,code',
'city_code' => 'nullable|exists:cities,code', 'district_code' => 'nullable|exists:districts,code',
'district_code' => 'nullable|exists:districts,code', 'village_code' => 'nullable|exists:villages,code',
'village_code' => 'nullable|exists:villages,code', 'address' => 'nullable|string',
'address' => 'nullable|string', 'postal_code' => 'nullable|string|max:10',
'postal_code' => 'nullable|string|max:10', 'status' => 'nullable|boolean',
'status' => 'nullable|boolean',
]; ];
return $rules; return $rules;

View File

@@ -43,7 +43,6 @@ class FormSurveyorRequest extends FormRequest
'apartemen-kantor' => $this->getUnitRules(), 'apartemen-kantor' => $this->getUnitRules(),
'lingkungan' => $this->getLinkunganRules(), 'lingkungan' => $this->getLinkunganRules(),
'fakta' => $this->getCommonRules(), 'fakta' => $this->getCommonRules(),
'rap' => $this->getRapRules()
]; ];
$rules = []; $rules = [];
@@ -52,7 +51,7 @@ class FormSurveyorRequest extends FormRequest
foreach ($pisah as $act) { foreach ($pisah as $act) {
if (isset($allRules[$act])) { if (isset($allRules[$act])) {
$rules = array_merge($rules, $allRules[$act]); $rules = array_merge($rules, $allRules[$act]);
if ($act == 'tanah' || $act == 'bangunan' || $act == 'apartemen-kantor' || $act == 'rap') { if ($act == 'tanah' || $act == 'bangunan' || $act == 'apartemen-kantor') {
$hasAssetDescriptionRules = true; $hasAssetDescriptionRules = true;
} }
} }
@@ -165,7 +164,6 @@ class FormSurveyorRequest extends FormRequest
'dekat_tps' => 'nullable', 'dekat_tps' => 'nullable',
'jarak_tps' => 'nullable', 'jarak_tps' => 'nullable',
'nama_tpu' => 'nullable', 'nama_tpu' => 'nullable',
'dekat_lainnya' => 'nullable',
'merupakan_daerah' => 'nullable', 'merupakan_daerah' => 'nullable',
'fasilitas_dekat_object' => 'nullable|array', 'fasilitas_dekat_object' => 'nullable|array',
'fasilitas_dekat_object_input' => 'nullable|array', 'fasilitas_dekat_object_input' => 'nullable|array',
@@ -176,23 +174,17 @@ class FormSurveyorRequest extends FormRequest
{ {
return [ return [
'action' => 'required', 'action' => 'required',
'nama_wakil_debitur' => 'nullable', 'nama_wakil_debitur' => 'required',
'hub_calon_debitur' => 'required', 'hub_calon_debitur' => 'required',
'dermaga' => 'nullable', 'dermaga' => 'required',
'nama_jalan' => 'required', 'desa_kelurahan' => 'required',
'perumahan_gang' => 'required', 'kecamatan' => 'required',
'blok_nomor' => 'required', 'kota_madya' => 'required',
'provinsi' => 'required',
'village_code' => 'nullable|string', 'jenis.*' => 'required',
'district_code' => 'nullable|string', 'size.*' => 'required',
'city_code' => 'nullable|string', 'kondisi.*' => 'required',
'province_code' => 'nullable|string', 'klasifikasi.*' => 'required',
'jenis_kapal' => 'required',
'jenis_kapal_lainnya' => 'nullable',
'size' => 'required',
'kondisi' => 'required',
'klasifikasi' => 'required',
'nama_kapal' => 'required', 'nama_kapal' => 'required',
'pemilik_kapal' => 'required', 'pemilik_kapal' => 'required',
@@ -256,10 +248,10 @@ class FormSurveyorRequest extends FormRequest
'kabel_perangkat' => 'required', 'kabel_perangkat' => 'required',
'deskripsi_kelistrikan' => 'required', 'deskripsi_kelistrikan' => 'required',
'kebersihan_dek_luar' => 'nullable', 'kebersihan_dek_luar' => 'required',
'tangki_limbah' => 'nullable', 'tangki_limbah' => 'required',
'sistem_pengelolaan_limbah' => 'nullable', 'sistem_pengelolaan_limbah' => 'required',
'pengelolaan_air_ballast' => 'nullable', 'pengelolaan_air_ballast' => 'required',
'deskripsi_kebersihan' => 'required', 'deskripsi_kebersihan' => 'required',
'fakta_positif.*' => 'nullable', 'fakta_positif.*' => 'nullable',
@@ -280,16 +272,10 @@ class FormSurveyorRequest extends FormRequest
'nama_jalan' => 'required', 'nama_jalan' => 'required',
'perumahan_gang' => 'required', 'perumahan_gang' => 'required',
'blok_nomor' => 'required', 'blok_nomor' => 'required',
'desa_kelurahan' => 'required',
'village_code' => 'nullable|string', 'kecamatan' => 'required',
'district_code' => 'nullable|string', 'kota_madya' => 'required',
'city_code' => 'nullable|string', 'provinsi' => 'required',
'province_code' => 'nullable|string',
'masa_stnk' => 'required',
'masa_pajak' => 'required',
'kendaraan.*' => 'required',
'kendaraan_input.*' => 'nullable',
'kondisi' => 'required', 'kondisi' => 'required',
'nomor_polisi' => 'required', 'nomor_polisi' => 'required',
'nomor_polis_tidak_sesuai' => 'nullable', 'nomor_polis_tidak_sesuai' => 'nullable',
@@ -303,47 +289,26 @@ class FormSurveyorRequest extends FormRequest
'nomor_mesin_tidak_sesuai' => 'nullable', 'nomor_mesin_tidak_sesuai' => 'nullable',
'posisi_kilometer' => 'required', 'posisi_kilometer' => 'required',
'transmisi' => 'required', 'transmisi' => 'required',
'transmisi_input' => 'nullable',
'mesin_panel_instrument.*' => 'required', 'mesin_panel_instrument.*' => 'required',
'mesin_panel_instrument_input.*' => 'nullable',
'fungsi_mesin_panel_instrument.*' => 'required', 'fungsi_mesin_panel_instrument.*' => 'required',
'fungsi_mesin_panel_instrument_input.*' => 'nullable',
'interior.*' => 'required', 'interior.*' => 'required',
'interior_input.*' => 'nullable',
'jumlah_pintu.*' => 'required', 'jumlah_pintu.*' => 'required',
'jumlah_pintu_input.*' => 'nullable',
'rangka_karoseri.*' => 'required', 'rangka_karoseri.*' => 'required',
'rangka_karoseri_input.*' => 'nullable',
'ban.*' => 'required', 'ban.*' => 'required',
'ban_input.*' => 'nullable',
'velg.*' => 'required', 'velg.*' => 'required',
'velg_input.*' => 'nullable',
'bamper_depan.*' => 'required', 'bamper_depan.*' => 'required',
'bamper_depan_input.*' => 'nullable',
'bamper_belakang.*' => 'required', 'bamper_belakang.*' => 'required',
'bamper_belakang_input.*' => 'nullable',
'lampu_depan.*' => 'required', 'lampu_depan.*' => 'required',
'lampu_depan_input.*' => 'nullable',
'lampu_belakang.*' => 'required', 'lampu_belakang.*' => 'required',
'lampu_belakang_input.*' => 'nullable',
'kaca_kendaraan.*' => 'required', 'kaca_kendaraan.*' => 'required',
'kaca_kendaraan_input.*' => 'nullable',
'air_conditioner.*' => 'required', 'air_conditioner.*' => 'required',
'air_conditioner_input.*' => 'nullable',
'tape_radio_cd.*' => 'required', 'tape_radio_cd.*' => 'required',
'tape_radio_cd_input.*' => 'nullable',
'sensor_parkir.*' => 'required', 'sensor_parkir.*' => 'required',
'sensor_parkir_input.*' => 'nullable',
'sensor_camera_recorder.*' => 'required', 'sensor_camera_recorder.*' => 'required',
'sensor_camera_recorder_input.*' => 'nullable',
'lcd.*' => 'required', 'lcd.*' => 'required',
'lcd_input.*' => 'nullable',
'sabuk_keselamatan.*' => 'required', 'sabuk_keselamatan.*' => 'required',
'sabuk_keselamatan_input.*' => 'nullable',
'airbag.*' => 'required', 'airbag.*' => 'required',
'airbag_input.*' => 'nullable',
'asuransi.*' => 'required', 'asuransi.*' => 'required',
'asuransi_input.*' => 'nullable',
'perusahaan_asuransi' => 'required', 'perusahaan_asuransi' => 'required',
'tahun_berakhir' => 'required', 'tahun_berakhir' => 'required',
'fakta_positif.*' => 'nullable', 'fakta_positif.*' => 'nullable',
@@ -385,15 +350,17 @@ class FormSurveyorRequest extends FormRequest
{ {
return [ return [
'action' => 'required', 'action' => 'required',
'nama_wakil' => 'required|string', 'tanggal_survey' => 'required',
'hub_calon_debitur' => 'required|string', 'nama_wakil' => 'required',
'hub_calon_debitur' => 'required',
'dengan_wadeb' => 'required',
'nama_jalan' => 'required', 'nama_jalan' => 'required',
'perumahan_gang' => 'required', 'perumahan_gang' => 'required',
'blok_nomor' => 'required', 'blok' => 'required',
'village_code' => 'nullable|string', 'desa_kelurahan' => 'required',
'district_code' => 'nullable|string', 'kecamatan' => 'required',
'city_code' => 'nullable|string', 'kota_madya' => 'required',
'province_code' => 'nullable|string', 'provinsi' => 'required',
'jenis_model' => 'required', 'jenis_model' => 'required',
'nomor_lambung' => 'required', 'nomor_lambung' => 'required',
'model_unit' => 'required', 'model_unit' => 'required',
@@ -410,30 +377,18 @@ class FormSurveyorRequest extends FormRequest
'nomor_mesin' => 'nullable', 'nomor_mesin' => 'nullable',
'hour_mesters' => 'nullable', 'hour_mesters' => 'nullable',
'overhaul_mesin' => 'nullable', 'overhaul_mesin' => 'nullable',
'mesin_panel.*' => 'nullable', 'mesin_panel.*' => 'nullable',
'mesin_panel_input.*' => 'nullable',
'fungsi_panel.*' => 'nullable', 'fungsi_panel.*' => 'nullable',
'fungsi_panel_input.*' => 'nullable',
'interior.*' => 'nullable', 'interior.*' => 'nullable',
'interior_input.*' => 'nullable',
'rangka_Karoseri.*' => 'nullable', 'rangka_Karoseri.*' => 'nullable',
'rangka_Karoseri_input.*' => 'nullable',
'ban.*' => 'nullable', 'ban.*' => 'nullable',
'ban_innput.*' => 'nullable',
'velg.*' => 'nullable', 'velg.*' => 'nullable',
'velg_input.*' => 'nullable',
'air_conditioner.*' => 'nullable', 'air_conditioner.*' => 'nullable',
'air_conditioner_input.*' => 'nullable',
'aksesoris.*' => 'nullable', 'aksesoris.*' => 'nullable',
'aksesoris_input.*' => 'nullable',
'lcd.*' => 'nullable', 'lcd.*' => 'nullable',
'lcd_innput.*' => 'nullable',
'perlengkapan.*' => 'nullable', 'perlengkapan.*' => 'nullable',
'perlengkapan_input.*' => 'nullable',
'asuransi.*' => 'nullable', 'asuransi.*' => 'nullable',
'asuransi_input.*' => 'nullable', 'perusahaan_asuransi.*' => 'nullable',
'perusahaan_asuransi' => 'nullable',
'tahun_berakhir.*' => 'nullable', 'tahun_berakhir.*' => 'nullable',
'sensor_kamera.*' => 'nullable', 'sensor_kamera.*' => 'nullable',
'lcd.*' => 'nullable', 'lcd.*' => 'nullable',
@@ -442,10 +397,10 @@ class FormSurveyorRequest extends FormRequest
'asuransi.*' => 'nullable', 'asuransi.*' => 'nullable',
'perusahan_asuransi' => 'nullable', 'perusahan_asuransi' => 'nullable',
'tahun_berakhir' => 'nullable', 'tahun_berakhir' => 'nullable',
'fakta_positif' => 'nullable|array', 'faktor_positif' => 'nullable',
'fakta_negatif' => 'nullable|array', 'faktor_negatif' => 'nullable',
'kesimpulan' => 'nullable', 'kesimpulan' => 'nullable',
'catatan' => 'nullable|array', 'catatan' => 'nullable',
]; ];
} }
@@ -455,19 +410,16 @@ class FormSurveyorRequest extends FormRequest
{ {
return [ return [
'action' => 'required', 'action' => 'required',
'nama_wakil' => 'required|string', 'tanggal_survey' => 'required',
'hub_calon_debitur' => 'required|string', 'nama_wakil' => 'required',
'nama_jalan' => 'required', 'hub_calon_debitur' => 'required',
'perumahan_gang' => 'required', 'bandara' => 'required',
'blok_nomor' => 'required', 'desa_kelurahan' => 'required',
'kecamatan' => 'required',
'village_code' => 'nullable|string', 'kota_madya' => 'required',
'district_code' => 'nullable|string', 'provinsi' => 'required',
'city_code' => 'nullable|string',
'province_code' => 'nullable|string',
'jenis_pesawat' => 'required', 'jenis_pesawat' => 'required',
'jenis_pesawat_lainnya' => 'nullable',
'size' => 'required', 'size' => 'required',
'kondisi' => 'required', 'kondisi' => 'required',
'nama_pesawat' => 'required', 'nama_pesawat' => 'required',
@@ -508,7 +460,7 @@ class FormSurveyorRequest extends FormRequest
'deskripsi_kabin' => 'required', 'deskripsi_kabin' => 'required',
'badan_pesawat' => 'nullable', 'badan_pesawat' => 'required',
'sayap_pesawat' => 'required', 'sayap_pesawat' => 'required',
'ekor_pesawat' => 'required', 'ekor_pesawat' => 'required',
'landing_gear' => 'required', 'landing_gear' => 'required',
@@ -554,10 +506,12 @@ class FormSurveyorRequest extends FormRequest
'sistem_hiburan_kabin' => 'required', 'sistem_hiburan_kabin' => 'required',
'deskripsi_Interior' => 'required', 'deskripsi_Interior' => 'required',
'fakta_positif' => 'nullable|array',
'fakta_negatif' => 'nullable|array',
'kesimpulan' => 'nullable', 'faktor_positif.*' => 'nullable',
'catatan' => 'nullable|array', 'faktor_negatif.*' => 'nullable',
'kesimpulan.*' => 'nullable',
'catatan.*' => 'nullable',
]; ];
@@ -567,21 +521,18 @@ class FormSurveyorRequest extends FormRequest
{ {
return [ return [
'permohonan_id' => 'required', 'permohonan_id' => 'required',
'dokument_id' => 'required',
'type' => 'required', 'type' => 'required',
'nomor_registrasi' => 'required',
'debitur_perwakilan' => 'required|array', 'debitur_perwakilan' => 'required|array',
'jenis_asset_name' => 'nullable|', 'jenis_asset_name' => 'nullable|',
'jenis_asset' => 'required', 'jenis_asset' => 'required',
'jenis_asset_tidak_sesuai' => 'nullable|string', 'jenis_asset_tidak_sesuai' => 'nullable|string',
'alamat_sesuai' => 'required', 'alamat_sesuai' => 'required',
'alamat_tidak_sesuai' => 'nullable|string', 'alamat_tidak_sesuai' => 'nullable|string',
'pihak_bank' => 'nullable|string',
'nomor_nib' => 'nullable|string', 'hub_cadeb' => 'required',
'hub_cadeb' => 'nullable|string',
'hub_cadeb_sesuai' => 'nullable|string', 'hub_cadeb_sesuai' => 'nullable|string',
'hub_cadeb_tidak_sesuai' => 'nullable|string', 'hub_cadeb_tidak_sesuai' => 'nullable|string',
'hub_cadeb_penghuni' => 'nullable', 'hub_cadeb_penghuni' => 'required',
'hub_cadeb_penghuni_sesuai' => 'nullable|string', 'hub_cadeb_penghuni_sesuai' => 'nullable|string',
'hub_penghuni_tidak_sesuai' => 'nullable|string', 'hub_penghuni_tidak_sesuai' => 'nullable|string',
@@ -626,73 +577,7 @@ class FormSurveyorRequest extends FormRequest
'foto_bhumi' => 'nullable', 'foto_bhumi' => 'nullable',
'foto_argis_region' => 'nullable', 'foto_argis_region' => 'nullable',
'foto_tempat' => 'nullable', 'foto_tempat' => 'nullable',
'upload_gs' => 'nullable', 'keterangan' => 'nullable',
'foto_sentuh_tanahku' => 'nullable',
'keterangan' => 'nullable|array',
];
}
private function getRapRules()
{
return [
'perizinan' => 'nullable|array',
'perizinan.*' => 'nullable|string',
'perizinan_file' => 'nullable|array',
'perizinan_file.*' => 'nullable|file|mimes:pdf,docx',
'brosur_price_list' => 'nullable|array',
'brosur_price_list.*' => 'nullable|string',
'brosur_price_list_file' => 'nullable|array',
'brosur_price_list_file.*' => 'nullable|file|mimes:pdf,docx',
'pengalaman_developer' => 'nullable',
'developer_anggota' => 'nullable',
'lainnya_developer.*' => 'nullable',
'kapan_mulai_dibangun' => 'nullable',
'kondisi_perumahan' => 'nullable',
'progres_pembangunan' => 'nullable',
'kontraktor' => 'nullable',
'lingkungan_sekitar' => 'nullable',
'komplek_disekitar' => 'nullable',
'pusat_keramaian' => 'nullable',
'transportasi_umum' => 'nullable',
'lainnya_kondisi.*' => 'nullable',
// Validasi untuk partisi yang diperbarui
'partisi' => 'nullable|array',
'partisi.*' => 'nullable|array',
'partisi.*.nama' => 'nullable|string',
'partisi.*.value' => 'nullable|string|max:255',
'jumlah_unit.*' => 'nullable',
'batas_batas_perumahan' => 'nullable',
'fasus_fasum.*' => 'nullable',
'progres_penjualan.*' => 'nullable',
'harga_unit.*' => 'nullable',
'target_market.*' => 'nullable',
'kerjasama_dengan_bank' => 'nullable',
'rute_menuju_lokasi' => 'nullable',
'peruntukan' => 'nullable',
'kdb' => 'nullable',
'kdh' => 'nullable',
'gsb' => 'nullable',
'max_lantai' => 'nullable',
'klb' => 'nullable',
'gss' => 'nullable',
'pelebaran_jalan' => 'nullable',
'nama_petugas' => 'nullable',
'lat' => 'nullable|numeric',
'lng' => 'nullable|numeric',
'foto_gistaru' => 'nullable',
'foto_bhumi' => 'nullable',
'foto_argis_region' => 'nullable',
'foto_tempat' => 'nullable',
'upload_gs' => 'nullable',
'foto_sentuh_tanahku' => 'nullable',
'keterangan' => 'nullable|array',
]; ];
} }

View File

@@ -1,54 +0,0 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class JenisLampiranRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$rules = [
'nama' => [
'required',
'string',
'max:255',
Rule::unique('jenis_lampiran')->where(function ($query) {
return $query->whereNull('deleted_at');
})->ignore($this->route('jenis_lampiran')),
],
'deskripsi' => 'nullable|string',
];
return $rules;
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'nama.required' => 'Nama jenis lampiran harus diisi.',
'nama.max' => 'Nama jenis lampiran tidak boleh lebih dari 255 karakter.',
];
}
}

View File

@@ -20,8 +20,6 @@
'slug' => 'required|max:255', 'slug' => 'required|max:255',
'custom_field' => 'nullable|max:255', 'custom_field' => 'nullable|max:255',
'custom_field_type' => 'nullable|max:255', 'custom_field_type' => 'nullable|max:255',
'custom_fields' => 'nullable|array',
'custom_fields.*' => 'required|string|max:255',
]; ];
} }
@@ -48,10 +46,5 @@
'slug' => Str::slug($this->name), 'slug' => Str::slug($this->name),
]); ]);
} }
// Ensure custom_fields is always an array
if (!is_array($this->custom_fields)) {
$this->merge(['custom_fields' => []]);
}
} }
} }

View File

@@ -1,41 +0,0 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LaporanExternalRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules()
: array
{
return [
'permohonan_id' => 'required|exists:permohonan,id',
'nomor_laporan' => 'nullable|string|max:255',
'tgl_final_laporan' => 'nullable|date',
'nilai_pasar' => 'nullable|numeric',
'indikasi_nilai_likuidasi' => 'nullable|numeric',
'indikasi_nilai_pasar_tanah' => 'nullable|numeric',
'estimasi_harga_tanah' => 'nullable|numeric',
'estimasi_harga_bangunan' => 'nullable|numeric',
'indikasi_nilai_pasar_bangunan' => 'nullable|numeric',
'indikasi_nilai_pasar_sarana_pelengkap' => 'nullable|numeric',
'indikasi_nilai_pasar_mesin' => 'nullable|numeric',
'indikasi_nilai_pasar_kendaraan_alat_berat' => 'nullable|numeric',
'file_resume' => 'nullable|file|mimes:pdf|max:10240', // 10MB max
'file_laporan' => 'nullable|file|mimes:pdf|max:10240',
];
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize()
: bool
{
return true;
}
}

View File

@@ -4,150 +4,20 @@
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
/**
* Form Request untuk validasi data NOC (Notice of Completion)
*/
class NocRequest extends FormRequest class NocRequest extends FormRequest
{ {
/**
* Konstanta untuk jenis file yang diizinkan
*/
private const ALLOWED_FILE_TYPES = 'pdf,jpg,jpeg,png';
/**
* Konstanta untuk ukuran file maksimum (dalam KB)
*/
private const MAX_FILE_SIZE = 10240;
/**
* Menentukan apakah pengguna berwenang untuk melakukan request ini
*
* @return bool
*/
public function authorize() public function authorize()
{ {
return true; return true;
} }
/**
* Mengumpulkan semua aturan validasi
*
* @return array
*/
public function rules() public function rules()
{
return array_merge(
$this->getBasicInfoRules(),
$this->getPaymentRules(),
$this->getSettlementRules(),
$this->getAuthorizationRules(),
);
}
/**
* Aturan validasi untuk informasi dasar
*
* @return array
*/
private function getBasicInfoRules()
{ {
return [ return [
'permohonan_id' => 'required|exists:permohonan,id', 'penawaran_id' => 'nullable|exists:penawaran,id',
'persetujuan_penawaran_id' => 'required|exists:persetujuan_penawaran,id', 'nominal_bayar' => 'nullable|numeric|min:0',
'status' => 'nullable|boolean', 'bukti_ksl' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240',
'created_by' => 'nullable|exists:users,id', 'status' => 'nullable|boolean',
'updated_by' => 'nullable|exists:users,id',
];
}
/**
* Aturan validasi untuk data pembayaran
*
* @return array
*/
private function getPaymentRules()
{
$fileRule = 'nullable|file|mimes:' . self::ALLOWED_FILE_TYPES . '|max:' . self::MAX_FILE_SIZE;
return [
'total_harus_bayar' => 'nullable|numeric|min:0',
'nominal_bayar' => 'nullable|numeric|min:0',
'bukti_ksl' => $fileRule,
'bukti_bayar' => $fileRule,
'status_bayar' => 'nullable|boolean',
'tanggal_pembayaran' => 'nullable|date',
];
}
/**
* Aturan validasi untuk data penyelesaian
*
* @return array
*/
private function getSettlementRules()
{
$fileRule = 'nullable|file|mimes:' . self::ALLOWED_FILE_TYPES . '|max:' . self::MAX_FILE_SIZE;
return [
'nominal_penyelesaian' => 'nullable|numeric|min:0',
'status_penyelesaian' => 'nullable|boolean',
'tanggal_penyelesaian' => 'nullable|date',
'bukti_penyelesaian' => $fileRule,
'memo_penyelesaian' => $fileRule,
'catatan_noc' => 'nullable|string',
];
}
/**
* Aturan validasi untuk otorisasi
*
* @return array
*/
private function getAuthorizationRules()
{
return [
'authorized_status' => 'nullable|boolean',
'authorized_at' => 'nullable|date',
'authorized_by' => 'nullable|exists:users,id',
];
}
/**
* Pesan khusus untuk validasi
*
* @return array
*/
public function messages()
{
return [
'permohonan_id.required' => 'ID Permohonan harus diisi',
'permohonan_id.exists' => 'ID Permohonan tidak valid',
'persetujuan_penawaran_id.required' => 'ID Persetujuan Penawaran harus diisi',
'persetujuan_penawaran_id.exists' => 'ID Persetujuan Penawaran tidak valid',
'nominal_bayar.numeric' => 'Nominal Bayar harus berupa angka',
'nominal_bayar.min' => 'Nominal Bayar minimal 0',
'bukti_ksl.file' => 'Bukti KSL harus berupa file',
'bukti_ksl.mimes' => 'Bukti KSL harus berformat pdf, jpg, jpeg, atau png',
'bukti_ksl.max' => 'Ukuran Bukti KSL maksimal 10MB',
'bukti_bayar.file' => 'Bukti Bayar harus berupa file',
'bukti_bayar.mimes' => 'Bukti Bayar harus berformat pdf, jpg, jpeg, atau png',
'bukti_bayar.max' => 'Ukuran Bukti Bayar maksimal 10MB',
'status.boolean' => 'Status harus berupa boolean',
'status_bayar.boolean' => 'Status Bayar harus berupa boolean',
'tanggal_pembayaran.date' => 'Format Tanggal Pembayaran tidak valid',
'nominal_penyelesaian.numeric' => 'Nominal Penyelesaian harus berupa angka',
'nominal_penyelesaian.min' => 'Nominal Penyelesaian minimal 0',
'status_penyelesaian.boolean' => 'Status Penyelesaian harus berupa boolean',
'tanggal_penyelesaian.date' => 'Format Tanggal Penyelesaian tidak valid',
'bukti_penyelesaian.file' => 'Bukti Penyelesaian harus berupa file',
'bukti_penyelesaian.mimes' => 'Bukti Penyelesaian harus berformat pdf, jpg, jpeg, atau png',
'bukti_penyelesaian.max' => 'Ukuran Bukti Penyelesaian maksimal 10MB',
'memo_penyelesaian.file' => 'Memo Penyelesaian harus berupa file',
'memo_penyelesaian.mimes' => 'Memo Penyelesaian harus berformat pdf, jpg, jpeg, atau png',
'memo_penyelesaian.max' => 'Ukuran Memo Penyelesaian maksimal 10MB',
'authorized_status.boolean' => 'Status Otorisasi harus berupa boolean',
'authorized_at.date' => 'Format Tanggal Otorisasi tidak valid',
'authorized_by.exists' => 'User Otorisasi tidak valid',
]; ];
} }
} }

View File

@@ -36,7 +36,7 @@ class PenilaianRequest extends FormRequest
'penilai_surveyor_id' => 'nullable', 'penilai_surveyor_id' => 'nullable',
'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id', 'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id',
'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id', 'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id',
'surveyor_penilai_region_id' => 'nullable',
'keterangan' => 'nullable', 'keterangan' => 'nullable',
]; ];

View File

@@ -23,7 +23,7 @@
'status' => 'nullable|string', 'status' => 'nullable|string',
'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id', 'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id',
'nilai_plafond_id' => 'required|exists:nilai_plafond,id', 'nilai_plafond_id' => 'required|exists:nilai_plafond,id',
'status_bayar' => 'nullable|string', 'status_bayar' => 'required|string',
'nilai_njop' => 'nullable|numeric' 'nilai_njop' => 'nullable|numeric'
]; ];

View File

@@ -14,7 +14,6 @@
public function rules() public function rules()
{ {
return [ return [
'permohonan_id' => 'nullable|exists:permohonan,id',
'penawaran_id' => 'nullable|exists:penawaran,id', 'penawaran_id' => 'nullable|exists:penawaran,id',
'nomor_proposal_penawaran' => 'nullable|string|max:255', 'nomor_proposal_penawaran' => 'nullable|string|max:255',
'tanggal_proposal_penawaran' => 'nullable|date', 'tanggal_proposal_penawaran' => 'nullable|date',
@@ -23,6 +22,8 @@
'sla_final' => 'nullable|numeric|min:0', 'sla_final' => 'nullable|numeric|min:0',
'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240',
'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240',
'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240',
'nominal_bayar' => 'nullable|numeric|min:0',
'status' => 'nullable|boolean', 'status' => 'nullable|boolean',
'authorized_status' => 'boolean', 'authorized_status' => 'boolean',
'authorized_at' => 'nullable|date', 'authorized_at' => 'nullable|date',
@@ -50,6 +51,9 @@
'surat_representasi.file' => 'Surat Representasi harus berupa file.', 'surat_representasi.file' => 'Surat Representasi harus berupa file.',
'surat_representasi.mimes' => 'Surat Representasi harus berupa file PDF, DOC, atau DOCX.', 'surat_representasi.mimes' => 'Surat Representasi harus berupa file PDF, DOC, atau DOCX.',
'surat_representasi.max' => 'Ukuran Surat Representasi tidak boleh lebih dari 10MB.', 'surat_representasi.max' => 'Ukuran Surat Representasi tidak boleh lebih dari 10MB.',
'bukti_bayar.file' => 'Bukti Bayar harus berupa file.',
'bukti_bayar.mimes' => 'Bukti Bayar harus berupa file PDF, JPG, JPEG, atau PNG.',
'bukti_bayar.max' => 'Ukuran Bukti Bayar tidak boleh lebih dari 10MB.',
'region_id.required' => 'Region ID wajib diisi.', 'region_id.required' => 'Region ID wajib diisi.',
'region_id.exists' => 'Region ID tidak valid.', 'region_id.exists' => 'Region ID tidak valid.',
'status.required' => 'Status wajib diisi.', 'status.required' => 'Status wajib diisi.',
@@ -57,6 +61,8 @@
'authorized_status.boolean' => 'Status otorisasi harus berupa nilai boolean.', 'authorized_status.boolean' => 'Status otorisasi harus berupa nilai boolean.',
'authorized_at.date' => 'Tanggal otorisasi harus berupa tanggal yang valid.', 'authorized_at.date' => 'Tanggal otorisasi harus berupa tanggal yang valid.',
'authorized_by.exists' => 'ID pengguna yang mengotorisasi tidak valid.', 'authorized_by.exists' => 'ID pengguna yang mengotorisasi tidak valid.',
'status_bayar.required' => 'Status bayar wajib diisi.',
'status_bayar.in' => 'Status bayar harus berupa "sudah_bayar" atau "belum_bayar".',
]; ];
} }
} }

View File

@@ -38,8 +38,6 @@ class SurveyorRequest extends FormRequest
'bentuk-unit' => 'bentuk_unit', 'bentuk-unit' => 'bentuk_unit',
'fasilitas-objek' => 'fasilitas_objek', 'fasilitas-objek' => 'fasilitas_objek',
'perkerasan-jalan' => 'perkerasan_jalan', 'perkerasan-jalan' => 'perkerasan_jalan',
'foto-objek-jaminan' => 'foto_objek_jaminan',
'perizinan' => 'perizinan'
]; ];
/** /**
@@ -86,9 +84,6 @@ class SurveyorRequest extends FormRequest
], ],
], ],
'foto-objek-jaminan' => [
'kategori' => 'required',
],
// Add more action specific rules here // Add more action specific rules here
default => [], default => [],
}; };

View File

@@ -13,7 +13,7 @@ class TenderPenawaranRequest extends FormRequest
{ {
$rules = [ $rules = [
'nama_kjpp_sebelumnya' => 'nullable', 'nama_kjpp_sebelumnya' => 'nullable',
'biaya_kjpp_sebelumnya' => 'nullable', 'biaya_kjpp_sebelumnya' => 'nullable|numeric',
'tanggal_penilaian_sebelumnya' => 'nullable', 'tanggal_penilaian_sebelumnya' => 'nullable',
'nomor_registrasi' => 'required', 'nomor_registrasi' => 'required',
'kjpp.*' => 'exists:kjpp,id', 'kjpp.*' => 'exists:kjpp,id',

View File

@@ -1,33 +0,0 @@
<?php
namespace Modules\Lpj\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Modules\Lpj\Emails\SendJadwalKunjunganEmail;
use Illuminate\Support\Facades\Mail;
class SendJadwalKunjunganEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $emailData;
/**
* Create a new job instance.
*/
public function __construct(array $emailData)
{
$this->emailData = $emailData;
}
/**
* Execute the job.
*/
public function handle(): void
{
Mail::to($this->emailData['email'])->send(new SendJadwalKunjunganEmail($this->emailData));
}
}

View File

@@ -22,12 +22,11 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
protected $districts; protected $districts;
protected $cities; protected $cities;
protected $provinces; protected $provinces;
protected $user;
/** /**
* Create a new job instance. * Create a new job instance.
*/ */
public function __construct($kjpps, $dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces, $user) public function __construct($kjpps, $dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces)
{ {
$this->kjpps = $kjpps; $this->kjpps = $kjpps;
$this->dp1 = $dp1; // Simpan keseluruhan array dp1, bukan dp1[0] $this->dp1 = $dp1; // Simpan keseluruhan array dp1, bukan dp1[0]
@@ -37,7 +36,6 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
$this->districts = $districts; $this->districts = $districts;
$this->cities = $cities; $this->cities = $cities;
$this->provinces = $provinces; $this->provinces = $provinces;
$this->user = $user;
} }
/** /**
@@ -52,8 +50,7 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
$this->villages, $this->villages,
$this->districts, $this->districts,
$this->cities, $this->cities,
$this->provinces, $this->provinces
$this->user // Kirim user ke email sebagai cc dan bcc
); );
$email->with([ $email->with([
@@ -64,7 +61,6 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
'districts' => $this->districts, 'districts' => $this->districts,
'cities' => $this->cities, 'cities' => $this->cities,
'provinces' => $this->provinces, 'provinces' => $this->provinces,
'user' => $this->user // Kirim user ke email sebagai cc dan bcc
]); ]);
$send = Mail::to($this->kjpps)->send($email); $send = Mail::to($this->kjpps)->send($email);

View File

@@ -21,12 +21,11 @@ class SendPenawaranTenderJob implements ShouldQueue
protected $districts; protected $districts;
protected $cities; protected $cities;
protected $provinces; protected $provinces;
protected $user; // Tidak perlu array [0] lagi
/** /**
* Create a new job instance. * Create a new job instance.
*/ */
public function __construct($kjpps, $penawaran, $permohonan, $villages, $districts, $cities, $provinces,$user) public function __construct($kjpps, $penawaran, $permohonan, $villages, $districts, $cities, $provinces)
{ {
$this->kjpps = $kjpps; $this->kjpps = $kjpps;
$this->penawaran = $penawaran; $this->penawaran = $penawaran;
@@ -35,7 +34,6 @@ class SendPenawaranTenderJob implements ShouldQueue
$this->districts = $districts; $this->districts = $districts;
$this->cities = $cities; $this->cities = $cities;
$this->provinces = $provinces; $this->provinces = $provinces;
$this->user = $user; // Simpan user yang dikirim email ke properti
} }
/** /**
@@ -51,7 +49,6 @@ class SendPenawaranTenderJob implements ShouldQueue
'districts' => $this->districts, 'districts' => $this->districts,
'cities' => $this->cities, 'cities' => $this->cities,
'provinces' => $this->provinces, 'provinces' => $this->provinces,
'user' => $this->user // Kirim user ke email ke properti sebagai additional data
]); ]);
Mail::to($this->kjpps)->send($email); Mail::to($this->kjpps)->send($email);

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaFactory; use Modules\Lpj\Database\Factories\AnalisaFactory;
class Analisa extends Base class Analisa extends Model
{ {
use HasFactory; use HasFactory;
protected $table = 'analisa'; protected $table = 'analisa';

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaFaktaFactory; use Modules\Lpj\Database\Factories\AnalisaFaktaFactory;
class AnalisaFakta extends Base class AnalisaFakta extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaLingkunganFactory; use Modules\Lpj\Database\Factories\AnalisaLingkunganFactory;
class AnalisaLingkungan extends Base class AnalisaLingkungan extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaTanahBagunanFactory; use Modules\Lpj\Database\Factories\AnalisaTanahBagunanFactory;
class AnalisaTanahBagunan extends Base class AnalisaTanahBagunan extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\AnalisaUnitFactory; use Modules\Lpj\Database\Factories\AnalisaUnitFactory;
class AnalisaUnit extends Base class AnalisaUnit extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -1,71 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Modules\Usermanagement\Models\User;
class Authorization extends Model
{
protected $table = 'authorizations';
protected $fillable = [
'permohonan_id',
'jenis',
'approve_so',
'status_so',
'keterangan_so',
'approve_so_at',
'approve_eo',
'status_eo',
'keterangan_eo',
'approve_eo_at',
'approve_dd',
'status_dd',
'keterangan_dd',
'approve_dd_at',
'status',
'keterangan',
'request',
'alasan',
'user_id',
];
protected $casts = [
// 'approve_so' => 'boolean',
// 'approve_eo' => 'boolean',
// 'approve_dd' => 'boolean',
'approve_so_at' => 'datetime',
'approve_eo_at' => 'datetime',
'approve_dd_at' => 'datetime',
];
/**
* Get the permohonan that owns the authorization.
*/
public function permohonan(): BelongsTo
{
return $this->belongsTo(Permohonan::class);
}
/**
* Get the user that owns the authorization.
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function approveEo(){
return $this->belongsTo(User::class, 'approve_eo', 'id');
}
public function approveDd(){
return $this->belongsTo(User::class, 'approve_dd', 'id');
}
public function approveSo(){
return $this->belongsTo(User::class, 'approve_so', 'id');
}
}

View File

@@ -1,104 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
class BankData extends Base
{
protected $table = 'bank_data';
protected $guarded = ['id'];
protected $casts = [
'tahun' => 'integer',
'luas_tanah' => 'decimal:2',
'luas_bangunan' => 'decimal:2',
'tahun_bangunan' => 'integer',
'harga' => 'decimal:2',
'harga_diskon' => 'decimal:2',
'diskon' => 'decimal:2',
'total' => 'decimal:2',
'kordinat_lat' => 'decimal:8',
'kordinat_lng' => 'decimal:8',
'harga_penawaran' => 'decimal:2',
'tanggal' => 'date',
'tgl_final_laporan' => 'date',
'nilai_pasar' => 'decimal:2',
'indikasi_nilai_likuidasi' => 'decimal:2',
'indikasi_nilai_pasar_tanah' => 'decimal:2',
'estimasi_harga_tanah' => 'decimal:2',
'estimasi_harga_bangunan' => 'decimal:2',
'indikasi_nilai_pasar_bangunan' => 'decimal:2',
'indikasi_nilai_pasar_sarana_pelengkap' => 'decimal:2',
'indikasi_nilai_pasar_mesin' => 'decimal:2',
'indikasi_nilai_pasar_kendaraan_alat_berat' => 'decimal:2',
'photos' => 'array'
];
// Scope for filtering by asset type
public function scopeOfAssetType($query, $assetType)
{
return $query->where('jenis_aset', $assetType);
}
// Scope for filtering by village
public function scopeOfVillage($query, $villageCode)
{
return $query->where('village_code', $villageCode);
}
// Scope for filtering by district
public function scopeOfDistrict($query, $districtCode)
{
return $query->where('district_code', $districtCode);
}
// Scope for filtering by city
public function scopeOfCity($query, $cityCode)
{
return $query->where('city_code', $cityCode);
}
// Scope for filtering by province
public function scopeOfProvince($query, $provinceCode)
{
return $query->where('province_code', $provinceCode);
}
// Scope for filtering by date
public function scopeOfDate($query, $date)
{
return $query->whereDate('tanggal', $date);
}
// Scope for filtering by date range
public function scopeBetweenDates($query, $startDate, $endDate)
{
return $query->whereBetween('tanggal', [$startDate, $endDate]);
}
public function village()
{
return $this->belongsTo(Village::class, 'village_code', 'code');
}
public function district()
{
return $this->belongsTo(District::class, 'district_code', 'code');
}
public function city()
{
return $this->belongsTo(City::class, 'city_code', 'code');
}
public function province()
{
return $this->belongsTo(Province::class, 'province_code', 'code');
}
}

View File

@@ -7,7 +7,6 @@
use Spatie\Activitylog\LogOptions; use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity; use Spatie\Activitylog\Traits\LogsActivity;
use Wildside\Userstamps\Userstamps; use Wildside\Userstamps\Userstamps;
use Illuminate\Notifications\Notifiable;
/** /**
@@ -15,7 +14,7 @@
*/ */
class Base extends Model class Base extends Model
{ {
use LogsActivity, SoftDeletes, Userstamps, Notifiable; use LogsActivity, SoftDeletes, Userstamps;
protected $connection; protected $connection;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\BentukTanahFactory; use Modules\Lpj\Database\Factories\BentukTanahFactory;
class BentukTanah extends Base class BentukTanah extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\BentukUnitFactory; // use Modules\Lpj\Database\Factories\BentukUnitFactory;
class BentukUnit extends Base class BentukUnit extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -1,27 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\CategoryDaftarPustakaFactory;
class CategoryDaftarPustaka extends Model
{
use HasFactory;
protected $table = 'category_daftar_pustaka';
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'id',
'name',
'code',
];
public function daftarPustaka(){
return $this->hasMany(DaftarPustaka::class);
}
}

View File

@@ -1,26 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\CustomFieldFactory;
class CustomField extends Base
{
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'name',
'type',
'urutan_prioritas',
'label'
];
// protected static function newFactory(): CustomFieldFactory
// {
// // return CustomFieldFactory::new();
// }
}

View File

@@ -1,29 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\DaftarPustakaFactory;
class DaftarPustaka extends Model
{
use HasFactory;
protected $table = 'daftar_pustaka';
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'id',
'category_id',
'judul',
'attachment',
'deskripsi',
];
public function category(){
return $this->belongsTo(CategoryDaftarPustaka::class);
}
}

View File

@@ -61,12 +61,7 @@
} }
public function permohonan(){ public function permohonan(){
return $this->hasMany(Permohonan::class, 'debiture_id', 'id' ); return $this->hasOne(Permohonan::class, 'debiture_id', 'id' );
}
public function laporanAdminKredit(): HasMany
{
return $this->hasMany(LaporanAdminKredit::class);
} }
} }

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\DenahFactory; use Modules\Lpj\Database\Factories\DenahFactory;
class Denah extends Base class Denah extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\FasilitasObjekFactory; // use Modules\Lpj\Database\Factories\FasilitasObjekFactory;
class FasilitasObjek extends Base class FasilitasObjek extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\FotoJaminanFactory; use Modules\Lpj\Database\Factories\FotoJaminanFactory;
class FotoJaminan extends Base class FotoJaminan extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -1,24 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\FotoObjekJaminanFactory;
class FotoObjekJaminan extends Base
{
use HasFactory;
protected $table = 'foto_objek_jaminan';
/**
* The attributes that are mass assignable.
*/
protected $guarded = ['id'];
// protected static function newFactory(): FotoObjekJaminanFactory
// {
// // return FotoObjekJaminanFactory::new();
// }
}

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\GolonganMasySekitarFactory; use Modules\Lpj\Database\Factories\GolonganMasySekitarFactory;
class GolonganMasySekitar extends Base class GolonganMasySekitar extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\InspeksiFactory; // use Modules\Lpj\Database\Factories\InspeksiFactory;
class Inspeksi extends Base class Inspeksi extends Model
{ {
use HasFactory; use HasFactory;
@@ -14,7 +14,7 @@ class Inspeksi extends Base
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding','mig_detail_data_jaminan']; protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding'];
public function permohonan() public function permohonan()
{ {

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\JenisBangunanFactory; use Modules\Lpj\Database\Factories\JenisBangunanFactory;
class JenisBangunan extends Base class JenisBangunan extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisKapalFactory; // use Modules\Lpj\Database\Factories\JenisKapalFactory;
class JenisKapal extends Base class JenisKapal extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisKendaraanFactory; // use Modules\Lpj\Database\Factories\JenisKendaraanFactory;
class JenisKendaraan extends Base class JenisKendaraan extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -1,20 +0,0 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Modules\Lpj\Models\Base;
use Modules\Lpj\Models\LampiranDokumen;
class JenisLampiran extends Base
{
protected $table = 'jenis_lampiran';
protected $fillable = ['nama', 'deskripsi'];
public function lampiranDokumen()
{
return $this->hasMany(LampiranDokumen::class);
}
}

View File

@@ -7,14 +7,5 @@
class JenisLegalitasJaminan extends Base class JenisLegalitasJaminan extends Base
{ {
protected $table = 'jenis_legalitas_jaminan'; protected $table = 'jenis_legalitas_jaminan';
protected $fillable = ['code', 'name','slug','custom_field','custom_field_type','custom_fields']; protected $fillable = ['code', 'name','slug','custom_field','custom_field_type'];
protected $casts = [
'custom_fields' => 'array',
];
public function customFields()
{
return $this->hasMany(CustomField::class);
}
} }

View File

@@ -5,7 +5,7 @@ namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Database\Factories\JenisPenilaianFactory; use Modules\Lpj\Database\Factories\JenisPenilaianFactory;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\Penilaian;
class JenisPenilaian extends Base class JenisPenilaian extends Model
{ {
/** /**

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisPesawatFactory; // use Modules\Lpj\Database\Factories\JenisPesawatFactory;
class JenisPesawat extends Base class JenisPesawat extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisUnitFactory; // use Modules\Lpj\Database\Factories\JenisUnitFactory;
class JenisUnit extends Base class JenisUnit extends Model
{ {
use HasFactory; use HasFactory;

Some files were not shown because too many files have changed in this diff Show More