Files
GestionIntegralWeb/Backend/GestionIntegral.Api/Services/Suscripciones/PagoService.cs

131 lines
6.0 KiB
C#
Raw Normal View History

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.
2025-08-01 12:53:17 -03:00
using GestionIntegral.Api.Data;
using GestionIntegral.Api.Data.Repositories.Suscripciones;
using GestionIntegral.Api.Data.Repositories.Usuarios;
using GestionIntegral.Api.Dtos.Suscripciones;
using GestionIntegral.Api.Models.Suscripciones;
using System.Data;
namespace GestionIntegral.Api.Services.Suscripciones
{
public class PagoService : IPagoService
{
private readonly IPagoRepository _pagoRepository;
private readonly IFacturaRepository _facturaRepository;
private readonly IFormaPagoRepository _formaPagoRepository;
private readonly IUsuarioRepository _usuarioRepository;
private readonly DbConnectionFactory _connectionFactory;
private readonly ILogger<PagoService> _logger;
public PagoService(
IPagoRepository pagoRepository,
IFacturaRepository facturaRepository,
IFormaPagoRepository formaPagoRepository,
IUsuarioRepository usuarioRepository,
DbConnectionFactory connectionFactory,
ILogger<PagoService> logger)
{
_pagoRepository = pagoRepository;
_facturaRepository = facturaRepository;
_formaPagoRepository = formaPagoRepository;
_usuarioRepository = usuarioRepository;
_connectionFactory = connectionFactory;
_logger = logger;
}
private async Task<PagoDto?> MapToDto(Pago pago)
{
if (pago == null) return null;
var formaPago = await _formaPagoRepository.GetByIdAsync(pago.IdFormaPago);
var usuario = await _usuarioRepository.GetByIdAsync(pago.IdUsuarioRegistro);
return new PagoDto
{
IdPago = pago.IdPago,
IdFactura = pago.IdFactura,
FechaPago = pago.FechaPago.ToString("yyyy-MM-dd"),
IdFormaPago = pago.IdFormaPago,
NombreFormaPago = formaPago?.Nombre ?? "Desconocida",
Monto = pago.Monto,
Estado = pago.Estado,
Referencia = pago.Referencia,
Observaciones = pago.Observaciones,
IdUsuarioRegistro = pago.IdUsuarioRegistro,
NombreUsuarioRegistro = usuario != null ? $"{usuario.Nombre} {usuario.Apellido}" : "Usuario Desconocido"
};
}
public async Task<IEnumerable<PagoDto>> ObtenerPagosPorFacturaId(int idFactura)
{
var pagos = await _pagoRepository.GetByFacturaIdAsync(idFactura);
var dtosTasks = pagos.Select(p => MapToDto(p));
var dtos = await Task.WhenAll(dtosTasks);
return dtos.Where(dto => dto != null)!;
}
public async Task<(PagoDto? Pago, string? Error)> RegistrarPagoManual(CreatePagoDto createDto, int idUsuario)
{
using var connection = _connectionFactory.CreateConnection();
await (connection as System.Data.Common.DbConnection)!.OpenAsync();
using var transaction = connection.BeginTransaction();
try
{
var factura = await _facturaRepository.GetByIdAsync(createDto.IdFactura);
if (factura == null) return (null, "La factura especificada no existe.");
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
if (factura.EstadoPago == "Anulada") return (null, "No se puede registrar un pago sobre una factura anulada.");
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.
2025-08-01 12:53:17 -03:00
var formaPago = await _formaPagoRepository.GetByIdAsync(createDto.IdFormaPago);
if (formaPago == null || !formaPago.Activo) return (null, "La forma de pago no es válida.");
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
var totalPagadoAnteriormente = await _pagoRepository.GetTotalPagadoAprobadoAsync(createDto.IdFactura, transaction);
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.
2025-08-01 12:53:17 -03:00
var nuevoPago = new Pago
{
IdFactura = createDto.IdFactura,
FechaPago = createDto.FechaPago,
IdFormaPago = createDto.IdFormaPago,
Monto = createDto.Monto,
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
Estado = "Aprobado",
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.
2025-08-01 12:53:17 -03:00
Referencia = createDto.Referencia,
Observaciones = createDto.Observaciones,
IdUsuarioRegistro = idUsuario
};
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
// Creamos el nuevo pago
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.
2025-08-01 12:53:17 -03:00
var pagoCreado = await _pagoRepository.CreateAsync(nuevoPago, transaction);
if (pagoCreado == null) throw new DataException("No se pudo registrar el pago.");
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
var nuevoTotalPagado = totalPagadoAnteriormente + pagoCreado.Monto;
Feat(suscripciones): Implementa manejo de pagos parciales en facturas Se introduce una refactorización completa del sistema de registro de pagos para manejar correctamente los abonos parciales, asegurando que el estado de la factura y el saldo pendiente se reflejen con precisión tanto en el backend como en la interfaz de usuario. ### 🐛 Problema Solucionado - Anteriormente, el sistema no reconocía los pagos parciales. Una factura permanecía en estado "Pendiente" hasta que el monto total era cubierto, y la interfaz de usuario siempre mostraba el 100% del saldo como pendiente, lo cual era incorrecto y confuso. ### ✨ Nuevas Características y Mejoras - **Nuevo Estado de Factura "Pagada Parcialmente":** - Se introduce un nuevo estado para las facturas que han recibido uno o más pagos pero cuyo saldo aún no es cero. - El `PagoService` ahora actualiza el estado de la factura a "Pagada Parcialmente" cuando recibe un abono que no cubre el total. - **Mejoras en la Interfaz de Usuario (`ConsultaFacturasPage`):** - **Nuevas Columnas:** Se han añadido las columnas "Pagado" y "Saldo" a la tabla de detalle de facturas, mostrando explícitamente el monto abonado y el restante. - **Visualización de Estado:** El `Chip` de estado ahora muestra "Pagada Parcialmente" con un color distintivo (azul/primary) para una rápida identificación visual. - **Cálculo de Saldo Correcto:** El saldo pendiente total por suscriptor y el saldo para el modal de pago manual ahora se calculan correctamente, restando el `totalPagado` del `importeFinal`. ### 🔄 Cambios en el Backend - **`PagoService`:** Se actualizó la lógica para establecer el estado de la factura (`Pendiente`, `Pagada Parcialmente`, `Pagada`) basado en el `nuevoTotalPagado` después de registrar un pago. - **`FacturacionService`:** El método `ObtenerResumenesDeCuentaPorPeriodo` ahora calcula correctamente el `SaldoPendienteTotal` y pasa la propiedad `TotalPagado` al DTO del frontend. - **DTOs:** Se actualizó `FacturaConsolidadaDto` para incluir la propiedad `TotalPagado`.
2025-08-11 15:15:08 -03:00
// Nueva lógica para manejar todos los estados de pago
string nuevoEstadoPago = factura.EstadoPago;
if (nuevoTotalPagado >= factura.ImporteFinal)
{
nuevoEstadoPago = "Pagada";
}
else if (nuevoTotalPagado > 0)
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.
2025-08-01 12:53:17 -03:00
{
Feat(suscripciones): Implementa manejo de pagos parciales en facturas Se introduce una refactorización completa del sistema de registro de pagos para manejar correctamente los abonos parciales, asegurando que el estado de la factura y el saldo pendiente se reflejen con precisión tanto en el backend como en la interfaz de usuario. ### 🐛 Problema Solucionado - Anteriormente, el sistema no reconocía los pagos parciales. Una factura permanecía en estado "Pendiente" hasta que el monto total era cubierto, y la interfaz de usuario siempre mostraba el 100% del saldo como pendiente, lo cual era incorrecto y confuso. ### ✨ Nuevas Características y Mejoras - **Nuevo Estado de Factura "Pagada Parcialmente":** - Se introduce un nuevo estado para las facturas que han recibido uno o más pagos pero cuyo saldo aún no es cero. - El `PagoService` ahora actualiza el estado de la factura a "Pagada Parcialmente" cuando recibe un abono que no cubre el total. - **Mejoras en la Interfaz de Usuario (`ConsultaFacturasPage`):** - **Nuevas Columnas:** Se han añadido las columnas "Pagado" y "Saldo" a la tabla de detalle de facturas, mostrando explícitamente el monto abonado y el restante. - **Visualización de Estado:** El `Chip` de estado ahora muestra "Pagada Parcialmente" con un color distintivo (azul/primary) para una rápida identificación visual. - **Cálculo de Saldo Correcto:** El saldo pendiente total por suscriptor y el saldo para el modal de pago manual ahora se calculan correctamente, restando el `totalPagado` del `importeFinal`. ### 🔄 Cambios en el Backend - **`PagoService`:** Se actualizó la lógica para establecer el estado de la factura (`Pendiente`, `Pagada Parcialmente`, `Pagada`) basado en el `nuevoTotalPagado` después de registrar un pago. - **`FacturacionService`:** El método `ObtenerResumenesDeCuentaPorPeriodo` ahora calcula correctamente el `SaldoPendienteTotal` y pasa la propiedad `TotalPagado` al DTO del frontend. - **DTOs:** Se actualizó `FacturaConsolidadaDto` para incluir la propiedad `TotalPagado`.
2025-08-11 15:15:08 -03:00
nuevoEstadoPago = "Pagada Parcialmente";
}
// Si nuevoTotalPagado es 0, el estado no cambia.
// Solo actualizamos si el estado calculado es diferente al actual.
if (nuevoEstadoPago != factura.EstadoPago)
{
bool actualizado = await _facturaRepository.UpdateEstadoPagoAsync(factura.IdFactura, nuevoEstadoPago, transaction);
if (!actualizado) throw new DataException($"No se pudo actualizar el estado de la factura a '{nuevoEstadoPago}'.");
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.
2025-08-01 12:53:17 -03:00
}
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
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.
2025-08-01 12:53:17 -03:00
transaction.Commit();
_logger.LogInformation("Pago manual ID {IdPago} registrado para Factura ID {IdFactura} por Usuario ID {IdUsuario}", pagoCreado.IdPago, pagoCreado.IdFactura, idUsuario);
Refactor: Mejora la lógica de facturación y la UI Este commit introduce una refactorización significativa en el módulo de suscripciones para alinear el sistema con reglas de negocio clave: facturación consolidada por empresa, cobro a mes adelantado con imputación de ajustes diferida, y una interfaz de usuario más clara. Backend: - **Facturación por Empresa:** Se modifica `FacturacionService` para agrupar las suscripciones por cliente y empresa, generando una factura consolidada para cada combinación. Esto asegura la correcta separación fiscal. - **Imputación de Ajustes:** Se ajusta la lógica para que la facturación de un período (ej. Septiembre) aplique únicamente los ajustes pendientes cuya fecha corresponde al período anterior (Agosto). - **Cierre Secuencial:** Se implementa una validación en `GenerarFacturacionMensual` que impide generar la facturación de un período si el anterior no ha sido cerrado, garantizando el orden cronológico. - **Emails Consolidados:** El proceso de notificación automática al generar el cierre ahora envía un único email consolidado por suscriptor, detallando los cargos de todas sus facturas/empresas. - **Envío de PDF Individual:** Se refactoriza el endpoint de envío manual para que opere sobre una `idFactura` individual y adjunte el PDF correspondiente si existe. - **Repositorios Mejorados:** Se optimizan y añaden métodos en `FacturaRepository` y `AjusteRepository` para soportar los nuevos requisitos de filtrado y consulta de datos consolidados. Frontend: - **Separación de Vistas:** La página de "Facturación" se divide en dos: - `ProcesosPage`: Para acciones masivas (generar cierre, archivo de débito, procesar respuesta). - `ConsultaFacturasPage`: Una nueva página dedicada a buscar, filtrar y gestionar facturas individuales con una interfaz de doble acordeón (Suscriptor -> Empresa). - **Filtros Avanzados:** La página `ConsultaFacturasPage` ahora incluye filtros por nombre de suscriptor, estado de pago y estado de facturación. - **Filtros de Fecha por Defecto:** La página de "Cuenta Corriente" ahora filtra por el mes actual por defecto para mejorar el rendimiento y la usabilidad. - **Validación de Fechas:** Se añade lógica en los filtros de fecha para impedir la selección de rangos inválidos. - **Validación de Monto de Pago:** El modal de pago manual ahora impide registrar un monto superior al saldo pendiente de la factura.
2025-08-08 09:48:15 -03:00
Feat(suscripciones): Implementa manejo de pagos parciales en facturas Se introduce una refactorización completa del sistema de registro de pagos para manejar correctamente los abonos parciales, asegurando que el estado de la factura y el saldo pendiente se reflejen con precisión tanto en el backend como en la interfaz de usuario. ### 🐛 Problema Solucionado - Anteriormente, el sistema no reconocía los pagos parciales. Una factura permanecía en estado "Pendiente" hasta que el monto total era cubierto, y la interfaz de usuario siempre mostraba el 100% del saldo como pendiente, lo cual era incorrecto y confuso. ### ✨ Nuevas Características y Mejoras - **Nuevo Estado de Factura "Pagada Parcialmente":** - Se introduce un nuevo estado para las facturas que han recibido uno o más pagos pero cuyo saldo aún no es cero. - El `PagoService` ahora actualiza el estado de la factura a "Pagada Parcialmente" cuando recibe un abono que no cubre el total. - **Mejoras en la Interfaz de Usuario (`ConsultaFacturasPage`):** - **Nuevas Columnas:** Se han añadido las columnas "Pagado" y "Saldo" a la tabla de detalle de facturas, mostrando explícitamente el monto abonado y el restante. - **Visualización de Estado:** El `Chip` de estado ahora muestra "Pagada Parcialmente" con un color distintivo (azul/primary) para una rápida identificación visual. - **Cálculo de Saldo Correcto:** El saldo pendiente total por suscriptor y el saldo para el modal de pago manual ahora se calculan correctamente, restando el `totalPagado` del `importeFinal`. ### 🔄 Cambios en el Backend - **`PagoService`:** Se actualizó la lógica para establecer el estado de la factura (`Pendiente`, `Pagada Parcialmente`, `Pagada`) basado en el `nuevoTotalPagado` después de registrar un pago. - **`FacturacionService`:** El método `ObtenerResumenesDeCuentaPorPeriodo` ahora calcula correctamente el `SaldoPendienteTotal` y pasa la propiedad `TotalPagado` al DTO del frontend. - **DTOs:** Se actualizó `FacturaConsolidadaDto` para incluir la propiedad `TotalPagado`.
2025-08-11 15:15:08 -03:00
var dto = await MapToDto(pagoCreado); // MapToDto ahora es más simple
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.
2025-08-01 12:53:17 -03:00
return (dto, null);
}
catch (Exception ex)
{
try { transaction.Rollback(); } catch { }
_logger.LogError(ex, "Error al registrar pago manual para Factura ID {IdFactura}", createDto.IdFactura);
return (null, $"Error interno al registrar el pago: {ex.Message}");
}
}
}
}