📊 Descripción General
El DTO InvoiceFilterDto representa un filtro completo para consultar facturas en el sistema RestMaster. Este DTO permite realizar búsquedas avanzadas con múltiples criterios, incluyendo filtros por fechas, clientes, estados, ubicaciones y características específicas de las facturas.
🎯 Propósito del DTO
- Búsqueda Avanzada: Filtros múltiples para facturas
- Consultas Flexibles: Criterios opcionales
- Reportes: Generación de reportes filtrados
- Auditoría: Trazabilidad de facturas
- Análisis: Análisis de ventas y operaciones
💡 Ejemplo de Uso
// Crear filtro para facturas de hoy
var filtroHoy = new InvoiceFilterDto
{
FechaInicio = DateTime.Today,
FechaFin = DateTime.Today.AddDays(1).AddSeconds(-1),
Estado = "C" // Solo facturas cobradas
};
// Crear filtro para facturas de un cliente específico
var filtroCliente = new InvoiceFilterDto
{
Cliente = 12345,
FechaInicio = DateTime.Today.AddDays(-30),
FechaFin = DateTime.Today
};
// Crear filtro para facturas de un salón específico
var filtroSalon = new InvoiceFilterDto
{
Salon = 1,
Mesa = 5,
FechaInicio = DateTime.Today.AddDays(-7),
FechaFin = DateTime.Today
};
// Crear filtro para facturas por rango de importe
var filtroImporte = new InvoiceFilterDto
{
ImporteMinimo = 50.00m,
ImporteMaximo = 200.00m,
Estado = "C",
FechaInicio = DateTime.Today.AddDays(-30)
};
// Crear filtro para facturas pendientes de impresión
var filtroPendientes = new InvoiceFilterDto
{
Estado = "P",
Impreso = "N",
FechaInicio = DateTime.Today.AddDays(-1)
};
// Crear filtro para facturas de reparto
var filtroReparto = new InvoiceFilterDto
{
Repartidor = 1,
Estado = "C",
FechaInicio = DateTime.Today.AddDays(-7)
};
// Crear filtro para facturas divididas
var filtroDivididas = new InvoiceFilterDto
{
Dividida = "S",
FechaInicio = DateTime.Today.AddDays(-30)
};
// Crear filtro para facturas por camarero
var filtroCamarero = new InvoiceFilterDto
{
Camarero = 5,
FechaInicio = DateTime.Today.AddDays(-7),
FechaFin = DateTime.Today
};
// Crear filtro para tickets
var filtroTickets = new InvoiceFilterDto
{
TipoDocumento = "T",
FechaInicio = DateTime.Today.AddDays(-1),
FechaFin = DateTime.Today
};
// Crear filtro para facturas con muchos comensales
var filtroGrandesGrupos = new InvoiceFilterDto
{
Pax = 10, // Más de 10 comensales
FechaInicio = DateTime.Today.AddDays(-30)
};
// Uso en el controlador
[HttpGet("filtrar")]
public async Task<IActionResult> FiltrarFacturas([FromQuery] InvoiceFilterDto filtro)
{
try
{
// Validar fechas
if (filtro.FechaInicio.HasValue && filtro.FechaFin.HasValue)
{
if (filtro.FechaInicio > filtro.FechaFin)
{
return BadRequest("La fecha de inicio no puede ser mayor que la fecha de fin");
}
}
// Validar importes
if (filtro.ImporteMinimo.HasValue && filtro.ImporteMaximo.HasValue)
{
if (filtro.ImporteMinimo > filtro.ImporteMaximo)
{
return BadRequest("El importe mínimo no puede ser mayor que el máximo");
}
}
var facturas = await _invoiceService.FiltrarFacturasAsync(filtro);
return Ok(facturas);
}
catch (Exception ex)
{
return StatusCode(500, $"Error al filtrar facturas: {ex.Message}");
}
}
// Ejemplo de filtro complejo
var filtroComplejo = new InvoiceFilterDto
{
Serie = "A",
FechaInicio = DateTime.Today.AddDays(-7),
FechaFin = DateTime.Today,
Estado = "C",
ImporteMinimo = 25.00m,
Impreso = "S",
Salon = 1
};