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