namespace GestionIntegral.Api.Dtos.Reportes.ViewModels { /// /// Representa una agrupación de suscripciones por publicación para el reporte. /// public class GrupoPublicacion { public string NombrePublicacion { get; set; } = string.Empty; public IEnumerable Suscripciones { get; set; } = Enumerable.Empty(); } /// /// Representa una agrupación de publicaciones por empresa para el reporte. /// public class GrupoEmpresa { public string NombreEmpresa { get; set; } = string.Empty; public IEnumerable Publicaciones { get; set; } = Enumerable.Empty(); } public class DistribucionSuscripcionesViewModel { public IEnumerable DatosAgrupadosAltas { get; } public IEnumerable DatosAgrupadosBajas { get; } public string FechaDesde { get; set; } = string.Empty; public string FechaHasta { get; set; } = string.Empty; public string FechaGeneracion { get; set; } = string.Empty; public DistribucionSuscripcionesViewModel(IEnumerable altas, IEnumerable bajas) { // Función local para evitar repetir el código de agrupación Func, IEnumerable> agruparDatos = (suscripciones) => { return suscripciones .GroupBy(s => s.NombreEmpresa) .Select(gEmpresa => new GrupoEmpresa { NombreEmpresa = gEmpresa.Key, Publicaciones = gEmpresa .GroupBy(s => s.NombrePublicacion) .Select(gPub => new GrupoPublicacion { NombrePublicacion = gPub.Key, Suscripciones = gPub.OrderBy(s => s.NombreSuscriptor).ToList() }) .OrderBy(p => p.NombrePublicacion) }) .OrderBy(e => e.NombreEmpresa); }; DatosAgrupadosAltas = agruparDatos(altas); DatosAgrupadosBajas = agruparDatos(bajas); } } }