diff --git a/app/Exports/LaporanPembatalanExport.php b/app/Exports/LaporanPembatalanExport.php new file mode 100644 index 0000000..b44afe2 --- /dev/null +++ b/app/Exports/LaporanPembatalanExport.php @@ -0,0 +1,102 @@ +request = $request; + } + + public function collection() + { + $query = PermohonanPembatalan::where('status', 'batal'); + + if (!Auth::user()->hasAnyRole(['administrator'])) { + $query = $query->whereHas('permohonan', function ($q) { + $q->where('branch_id', Auth::user()->branch_id); + }); + } + + // Apply search filter if provided + if ($this->request->has('search') && !empty($this->request->get('search'))) { + $search = $this->request->get('search'); + $query->where(function ($q) use ($search) { + $q->whereHas('permohonan', function ($subq) use ($search) { + $subq->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $subq->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $subq->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + }); + $q->orWhere('alasan', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Filter by date range if provided + if ($this->request->has('start_date') || $this->request->has('end_date')) { + $query->whereBetween('created_at', [ + $this->request->get('start_date') ?? '1900-01-01', + $this->request->get('end_date') ?? now()->toDateString() + ]); + } + + // Filter by status if provided + if ($this->request->has('status') && !empty($this->request->get('status'))) { + $query->where('status', $this->request->get('status')); + } + + // Filter by branch if provided + if ($this->request->has('branch_id') && !empty($this->request->get('branch_id'))) { + $query->whereHas('permohonan', function ($q) { + $q->where('branch_id', $this->request->get('branch_id')); + }); + } + + return $query->orderBy('created_at', 'desc') + ->get(); + } + + public function headings(): array + { + return [ + 'No. Registrasi', + 'Tanggal Permohonan', + 'Tanggal Pembatalan', + 'Cabang', + 'Pemohon', + 'Debitur', + 'Alasan Pembatalan', + 'Status', + 'Diajukan Oleh', + 'Disetujui Oleh', + 'Tanggal Disetujui' + ]; + } + + public function map($pembatalan): array + { + return [ + $pembatalan->permohonan->nomor_registrasi ?? '-', + $pembatalan->permohonan->tanggal_permohonan ? date('d-m-Y', strtotime($pembatalan->permohonan->tanggal_permohonan)) : '-', + date('d-m-Y', strtotime($pembatalan->created_at)), + $pembatalan->permohonan->branch->name ?? '-', + $pembatalan->permohonan->user->name ?? '-', + $pembatalan->permohonan->debiture->name ?? '-', + $pembatalan->alasan_pembatalan, + $pembatalan->status, + $pembatalan->user->name ?? '-', + $pembatalan->authorized_by ? $pembatalan->authorizedUser->name : '-', + $pembatalan->authorized_at ? formatTanggalIndonesia(strtotime($pembatalan->authorized_at),1) : '-' + ]; + } + }