Feat: Implementa flujo completo de facturación y promociones

Este commit introduce la funcionalidad completa para la facturación mensual,
la gestión de promociones y la comunicación con el cliente en el módulo
de suscripciones.

Backend:
- Se añade el servicio de Facturación que calcula automáticamente los importes
  mensuales basándose en las suscripciones activas, días de entrega y precios.
- Se implementa el servicio DebitoAutomaticoService, capaz de generar el
  archivo de texto plano para "Pago Directo Galicia" y de procesar el
  archivo de respuesta para la conciliación de pagos.
- Se desarrolla el ABM completo para Promociones (Servicio, Repositorio,
  Controlador y DTOs), permitiendo la creación de descuentos por porcentaje
  o monto fijo.
- Se implementa la lógica para asignar y desasignar promociones a suscripciones
  específicas.
- Se añade un servicio de envío de email (EmailService) integrado con MailKit
  y un endpoint para notificar facturas a los clientes.
- Se crea la lógica para registrar pagos manuales (efectivo, tarjeta, etc.)
  y actualizar el estado de las facturas.
- Se añaden todos los permisos necesarios a la base de datos para
  segmentar el acceso a las nuevas funcionalidades.

Frontend:
- Se crea la página de Facturación, que permite al usuario seleccionar un
  período, generar la facturación, listar los resultados y generar el archivo
  de débito para el banco.
- Se implementa la funcionalidad para subir y procesar el archivo de
  respuesta del banco, actualizando la UI en consecuencia.
- Se añade la página completa para el ABM de Promociones.
- Se integra un modal en la gestión de suscripciones para asignar y
  desasignar promociones a un cliente.
- Se añade la opción "Enviar Email" en el menú de acciones de las facturas,
  conectada al nuevo endpoint del backend.
- Se completan y corrigen los componentes `PagoManualModal` y `FacturacionPage`
  para incluir la lógica de registro de pagos y solucionar errores de TypeScript.
This commit is contained in:
2025-08-01 12:53:17 -03:00
parent b14c5de1b4
commit 84187a66df
53 changed files with 2895 additions and 43 deletions

View File

@@ -0,0 +1,8 @@
export interface CreatePagoDto {
idFactura: number;
fechaPago: string; // "yyyy-MM-dd"
idFormaPago: number;
monto: number;
referencia?: string | null;
observaciones?: string | null;
}

View File

@@ -0,0 +1,10 @@
export interface CreatePromocionDto {
descripcion: string;
tipoPromocion: 'Porcentaje' | 'MontoFijo' | 'BonificacionDias';
valor: number;
fechaInicio: string; // "yyyy-MM-dd"
fechaFin?: string | null;
activa: boolean;
}
// UpdatePromocionDto es igual
export type UpdatePromocionDto = CreatePromocionDto;

View File

@@ -0,0 +1,14 @@
export interface FacturaDto {
idFactura: number;
idSuscripcion: number;
periodo: string; // "YYYY-MM"
fechaEmision: string; // "yyyy-MM-dd"
fechaVencimiento: string; // "yyyy-MM-dd"
importeFinal: number;
estado: string;
numeroFactura?: string | null;
// Datos enriquecidos para la UI
nombreSuscriptor: string;
nombrePublicacion: string;
}

View File

@@ -0,0 +1,4 @@
export interface GenerarFacturacionResponseDto {
message: string;
facturasGeneradas: number;
}

View File

@@ -0,0 +1,13 @@
export interface PagoDto {
idPago: number;
idFactura: number;
fechaPago: string; // "yyyy-MM-dd"
idFormaPago: number;
nombreFormaPago: string;
monto: number;
estado: string;
referencia?: string | null;
observaciones?: string | null;
idUsuarioRegistro: number;
nombreUsuarioRegistro: string;
}

View File

@@ -0,0 +1,7 @@
export interface ProcesamientoLoteResponseDto {
totalRegistrosLeidos: number;
pagosAprobados: number;
pagosRechazados: number;
errores: string[];
mensajeResumen: string;
}

View File

@@ -0,0 +1,9 @@
export interface PromocionDto {
idPromocion: number;
descripcion: string;
tipoPromocion: 'Porcentaje' | 'MontoFijo' | 'BonificacionDias';
valor: number;
fechaInicio: string; // "yyyy-MM-dd"
fechaFin?: string | null;
activa: boolean;
}