'Audit Trails', 'sub_title' => 'List of Audit Trails System', 'path' => url()->current() ]; $query = AuditTrail::with(['user.cabang.cabang.region']); // Filter: User if ($request->filled('admin_id')) { $query->where('user_id', $request->admin_id); } // Filter: Region & Cabang (Sesuai relasi hasOne UserHasCabang) if ($request->filled('region') || $request->filled('cabang')) { $query->whereHas('user.cabang.cabang', function($q) use ($request) { if ($request->filled('cabang')) { $q->where('id', $request->cabang); } if ($request->filled('region')) { $q->whereHas('region', function($rq) use ($request) { // PERBAIKAN: Gunakan 'code' sesuai image_63aac6.png $rq->where('code', $request->region); }); } }); } // Filter: Rentang Waktu if ($request->filled('start_date') && $request->filled('end_date')) { $query->whereBetween('created_at', [ $request->start_date . ' 00:00:00', $request->end_date . ' 23:59:59' ]); } $data = $query->latest()->paginate(50)->appends($request->all()); return view('backend.pages.audit_trail.index', [ 'data' => $data, 'pageInfo' => $pageInfo, 'admins' => \App\Models\Admin::select('id', 'name')->orderBy('name')->get(), // PERBAIKAN: Select 'code' sesuai image_63aac6.png 'regions' => \App\Models\Region::select('code', 'name')->get(), 'cabangs' => \App\Models\Cabang::select('id', 'name')->orderBy('name')->get(), ]); } public function exportExcel(Request $request) { AuditTrailHelper::AddAuditTrail('Export', 'Melakukan export data Audit Trail dengan filter tertentu'); // Mengirimkan parameter filter ke class Export return Excel::download(new AuditTrailExport($request->all()), 'Audit_Trail_' . date('Y-m-d') . '.xlsx'); } /** * Membersihkan semua data audit trail (Truncate) */ public function clearAll() { try { // Catat siapa yang menghapus log sebelum data dihapus AuditTrailHelper::AddAuditTrail('Delete', 'Membersihkan (Truncate) seluruh data Audit Trail'); // Menggunakan truncate untuk performa maksimal pada tabel besar DB::table('audit_trail')->truncate(); return redirect()->back()->with('success', 'All audit logs have been cleared.'); } catch (\Exception $e) { return redirect()->back()->with('error', 'Failed to clear logs: ' . $e->getMessage()); } } /** * Fungsi untuk membersihkan cache sistem */ public function clearCache() { try { Artisan::call('optimize:clear'); AuditTrailHelper::AddAuditTrail('System', 'Membersihkan cache sistem (Optimize Clear)'); return redirect()->back()->with('success', 'System cache cleared successfully!'); } catch (\Exception $e) { return redirect()->back()->with('error', 'Failed to clear cache: ' . $e->getMessage()); } } }