← Volver a Back.Domain

InvoiceFilterDto

DTO para filtrar facturas con múltiples criterios

📊 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

📋 Propiedades del DTO

Serie

string?
Serie de la factura

Factura

double?
Número de factura

FechaInicio

DateTime?
Fecha de inicio del rango de búsqueda

FechaFin

DateTime?
Fecha de fin del rango de búsqueda

Cliente

double?
Código del cliente

ClienteNombre

string?
Nombre del cliente

Estado

string?
Estado de la factura (P: Pendiente, C: Cobrada, A: Anulada)

Salon

double?
Número de salón

Mesa

double?
Número de mesa

Camarero

double?
Código del camarero

TipoDocumento

string?
Tipo de documento (F: Factura, T: Ticket, A: Albarán)

ImporteMinimo

decimal?
Importe mínimo de la factura

ImporteMaximo

decimal?
Importe máximo de la factura

Impreso

string?
Indica si la factura está impresa (S/N)

Dividida

string?
Indica si la factura está dividida (S/N)

Repartidor

double?
Código del repartidor

Tarifa

double?
Tarifa aplicada

Pax

double?
Número de comensales

💡 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 };

🔗 Integración con Otros Componentes

📚 Componentes Relacionados

  • InvoiceController: Endpoint que recibe este DTO
  • InvoiceService: Servicio que procesa los filtros
  • IInvoiceService: Interfaz del servicio de facturas
  • Back.Application: Lógica de negocio
  • Validators: Validaciones de filtros

🎯 Casos de Uso

  • Búsqueda de Facturas: Consultas por múltiples criterios
  • Reportes de Ventas: Análisis por períodos
  • Auditoría: Trazabilidad de operaciones
  • Control de Caja: Verificación de cobros
  • Análisis por Cliente: Historial de compras
  • Control de Personal: Rendimiento por camarero

🔧 Consideraciones Técnicas

⚙️ Validaciones

  • Fechas: FechaInicio no puede ser mayor que FechaFin
  • Importes: ImporteMinimo no puede ser mayor que ImporteMaximo
  • Estados: Valores válidos: P, C, A
  • Tipos de Documento: Valores válidos: F, T, A
  • Campos Booleanos: Valores válidos: S, N

🔒 Rendimiento

  • Índices: Optimizar consultas con índices apropiados
  • Paginación: Implementar paginación para grandes volúmenes
  • Caché: Cachear resultados frecuentes
  • Timeouts: Configurar timeouts apropiados