This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use App\Models\AuditTrail;
|
||||
use Maatwebsite\Excel\Concerns\FromQuery;
|
||||
use Maatwebsite\Excel\Concerns\WithMapping;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
use Maatwebsite\Excel\Concerns\WithColumnWidths;
|
||||
use Maatwebsite\Excel\Concerns\WithStyles;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||
|
||||
class AuditTrailExport implements FromQuery, WithMapping, WithHeadings, WithColumnWidths, WithStyles
|
||||
{
|
||||
protected $filters;
|
||||
|
||||
public function __construct($filters)
|
||||
{
|
||||
$this->filters = $filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Menggunakan FromQuery untuk efisiensi memori pada data besar
|
||||
*/
|
||||
public function query()
|
||||
{
|
||||
$f = $this->filters;
|
||||
$query = AuditTrail::with(['user.cabang.cabang.region']);
|
||||
|
||||
// Filter Region & Cabang
|
||||
if (!empty($f['region']) || !empty($f['cabang'])) {
|
||||
$query->whereHas('user.cabang.cabang', function($q) use ($f) {
|
||||
if (!empty($f['cabang'])) {
|
||||
$q->where('id', $f['cabang']);
|
||||
}
|
||||
if (!empty($f['region'])) {
|
||||
$q->whereHas('region', function($rq) use ($f) {
|
||||
// PERBAIKAN: Gunakan 'code' sesuai image_63aac6.png
|
||||
$rq->where('code', $f['region']);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Filter User & Tanggal...
|
||||
if (!empty($f['admin_id'])) {
|
||||
$query->where('user_id', $f['admin_id']);
|
||||
}
|
||||
|
||||
return $query->latest();
|
||||
}
|
||||
/**
|
||||
* Header Tabel Excel
|
||||
*/
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'Waktu',
|
||||
'User',
|
||||
'IP Address',
|
||||
'Aksi',
|
||||
'Aktivitas',
|
||||
'Browser'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Transformasi Data per baris
|
||||
*/
|
||||
public function map($audit): array
|
||||
{
|
||||
return [
|
||||
$audit->created_at->format('d-m-Y H:i:s'),
|
||||
$audit->user->name ?? 'System',
|
||||
$audit->ip_address,
|
||||
$audit->action,
|
||||
$audit->activity,
|
||||
$audit->browser,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Atur Lebar Kolom agar rapi secara otomatis
|
||||
*/
|
||||
public function columnWidths(): array
|
||||
{
|
||||
return [
|
||||
'A' => 20,
|
||||
'B' => 20,
|
||||
'C' => 15,
|
||||
'D' => 15,
|
||||
'E' => 50,
|
||||
'F' => 20,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Styling Header agar lebih profesional
|
||||
*/
|
||||
public function styles(Worksheet $sheet)
|
||||
{
|
||||
return [
|
||||
1 => ['font' => ['bold' => true]],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
use Maatwebsite\Excel\Concerns\WithMapping;
|
||||
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||||
|
||||
class PendingDocumentExport implements FromCollection, WithHeadings, WithMapping, ShouldAutoSize
|
||||
{
|
||||
protected $cabangs;
|
||||
|
||||
public function __construct($cabangs)
|
||||
{
|
||||
$this->cabangs = $cabangs;
|
||||
}
|
||||
|
||||
public function collection()
|
||||
{
|
||||
return $this->cabangs;
|
||||
}
|
||||
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'Region',
|
||||
'Nama Cabang',
|
||||
'Up Country',
|
||||
'Vehicle',
|
||||
'Entertainment',
|
||||
'Meeting',
|
||||
'Others',
|
||||
'Total Pending',
|
||||
'Budget Aktif'
|
||||
];
|
||||
}
|
||||
|
||||
public function map($cabang): array
|
||||
{
|
||||
return [
|
||||
$cabang->region->name ?? '-',
|
||||
$cabang->name,
|
||||
$cabang->pending_details['up_country'] ?? 0,
|
||||
$cabang->pending_details['vehicle'] ?? 0,
|
||||
$cabang->pending_details['entertainment'] ?? 0,
|
||||
$cabang->pending_details['meeting'] ?? 0,
|
||||
$cabang->pending_details['others'] ?? 0,
|
||||
$cabang->total_pending,
|
||||
$cabang->available_budget
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user