Introduction
The Filters system provides a powerful, pipeline-based approach to filtering Eloquent queries in the Gestión de Ventas Laravel ERP. It implements a modular architecture where individual filter classes can be composed together to create complex filtering logic.Architecture
The filter system is built on three core components:FilterInterface
Contract that all filters must implement
QueryFilter
Base class that orchestrates filter application
Individual Filters
Specific filter implementations for each criteria
FilterInterface
The base contract that all filters implement:app/Filters/Contracts/FilterInterface.php
apply() method, which receives an Eloquent query builder and returns the modified builder.
QueryFilter Base Class
The abstract base class that coordinates filter application:app/Filters/Base/QueryFilter.php
- Iterates through defined filters
- Only applies filters when the request parameter is present
- Maintains the query builder reference throughout the pipeline
- Child classes define the filter mapping via
filters()method
How It Works
Define Filter Classes
Create a main filter class extending
QueryFilter that maps request parameters to individual filter implementations.Create Individual Filters
Each filter implements
FilterInterface and contains specific filtering logic.Filter Types
The system includes several common filter patterns:Search Filters
Perform LIKE queries across multiple fields:app/Filters/Sales/SalesFilters/SaleSearchFilter.php
Date Range Filters
Filter records between two dates:app/Filters/Sales/SalesFilters/SaleDateFilter.php
Amount Range Filters
Filter by minimum and maximum amounts:app/Filters/Sales/SalesFilters/SaleAmountRangeFilter.php
Exact Match Filters
Filter by exact field values:app/Filters/Sales/SalesFilters/SaleStatusFilter.php
Boolean Logic Filters
Filter based on conditional logic:app/Filters/Client/ClientHasDebtFilter.php
Real-World Examples
Sales Filtering System
app/Filters/Sales/SalesFilters/SaleFilters.php
Payment Filtering System
app/Filters/Accounting/PaymentsFilters/PaymentFilters.php
Client Filtering System
app/Filters/Client/ClientFilters.php
Controller Integration
Here’s a complete example from the Payment controller:app/Http/Controllers/Accounting/PaymentController.php
Export with Filters
Filters can be reused for data exports:app/Http/Controllers/Accounting/PaymentController.php
Benefits
Modularity
Each filter is a separate, testable class with a single responsibility
Reusability
Filters can be shared across different modules (e.g., date filters)
Maintainability
Easy to add, modify, or remove filters without affecting others
Type Safety
Clear contracts ensure consistent behavior across all filters
Available Filter Systems
The ERP includes pre-built filter systems for:- Sales: Sales orders, invoices, NCF logs
- Accounting: Payments, receivables, journal entries, document types
- Clients: Client management with business status, debt, and credit limits
- Inventory: Stock levels, movements, warehouses
- Products: Products with categories, units, and active status
- Point of Sale: POS terminals with status and client filters
- Equipment: Equipment tracking by type and location
Next Steps
Creating Filters
Learn how to create custom filter implementations
Query Builder
Understand Eloquent query building patterns