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]], ]; } }