get('module', 'cats'); $query = $this->initializeQuery($module); $this->applyGlobalFilters($query, $request, $module); $this->applyModuleFilters($query, $request, $module); if ($request->filled('export')) { $filteredData = $query->latest()->get(); return $this->processExport($filteredData, $module, $request->export); } $results = $query->latest()->paginate(15)->withQueryString(); $users = User::orderBy('name')->get(['id', 'name']); return view('pages.reports.index', compact('results', 'module', 'users')); } protected function initializeQuery($module) { return match ($module) { 'cats' => Cat::with(['pic']), 'medicine' => Medicine::query(), 'food' => Food::query(), 'supplies' => Supply::query(), 'treatment' => Treatment::with(['cat', 'pic']), 'vaccine', 'deworming', 'flea', 'grooming' => Cat::with(['pic']), default => Cat::query(), }; } protected function applyGlobalFilters($query, $request, $module) { if ($request->filled('q')) { $search = $request->q; $query->where(function($q) use ($module, $search) { $searchCol = $this->getSearchColumn($module); $q->where($searchCol, 'like', "%{$search}%"); if ($module === 'treatment') { $q->orWhereHas('cat', fn($query) => $query->where('nama_kucing', 'like', "%{$search}%")); } }); } if ($request->filled('pic_id')) { $query->where('pic_id', $request->pic_id); } if ($request->filled('start_date') && $request->filled('end_date')) { $dateCol = $this->getDateColumn($module); $query->whereBetween($dateCol, [ Carbon::parse($request->start_date)->startOfDay(), Carbon::parse($request->end_date)->endOfDay() ]); } } protected function applyModuleFilters($query, $request, $module) { $status = $request->status; // TAMBAHAN: Logika Filter untuk Modul Cats (Sehat/Sakit) // PERBAIKAN 1: Gunakan $request->filled('status') sesuai dengan