where('restaurant_id', $restaurantId); /* |-------------------------------------------------------------------------- | ๐Ÿ” Search Filters |-------------------------------------------------------------------------- */ if (! empty($filters['search'])) { $search = $filters['search']; $query->where(function ($q) use ($search) { $q->where('invoice_no', 'like', "%{$search}%") ->orWhereHas('supplier', function ($sq) use ($search) { $sq->where('name', 'like', "%{$search}%") ->orWhere('phone', 'like', "%{$search}%"); }); }); } /* |-------------------------------------------------------------------------- | ๐Ÿ”Ž Filter: Supplier |-------------------------------------------------------------------------- */ if (! empty($filters['supplier_id'])) { $query->where('supplier_id', $filters['supplier_id']); } /* |-------------------------------------------------------------------------- | ๐Ÿ“… Filter: Purchase Date Range |-------------------------------------------------------------------------- */ if (! empty($filters['start_date']) && ! empty($filters['end_date'])) { $query->whereBetween('purchase_date', [ $filters['start_date'], $filters['end_date'], ]); } /* |-------------------------------------------------------------------------- | ๐Ÿงพ Filter: Payment Status |-------------------------------------------------------------------------- */ if (! empty($filters['payment_status'])) { $query->where('payment_status', $filters['payment_status']); } /* |-------------------------------------------------------------------------- | ๐Ÿงฐ Filter: Purchase Type |-------------------------------------------------------------------------- */ if (! empty($filters['purchase_type'])) { $query->where('purchase_type', $filters['purchase_type']); } /* |-------------------------------------------------------------------------- | ๐Ÿ”ฝ Sorting |-------------------------------------------------------------------------- | sort_by = any column (id, invoice_no, purchase_date) | sort_order = asc / desc */ $sortBy = $filters['sort_by'] ?? 'id'; $sortOrder = $filters['sort_order'] ?? 'desc'; $query->orderBy($sortBy, $sortOrder); /* |-------------------------------------------------------------------------- | ๐Ÿ“„ Pagination |-------------------------------------------------------------------------- */ $perPage = $filters['per_page'] ?? 15; return $query->paginate($perPage); } }