feat(Reportes): Refactoriza vista Dist. General y corrige totales PDF
All checks were successful
Optimized Build and Deploy / remote-build-and-deploy (push) Successful in 5m35s
All checks were successful
Optimized Build and Deploy / remote-build-and-deploy (push) Successful in 5m35s
Frontend: - Se refactoriza la página `ReporteListadoDistribucionGeneralPage.tsx` para reemplazar la tabla HTML estándar por el componente `DataGrid` de MUI X. - Se implementa el cálculo y la visualización de una fila de totales para las tablas de "Resumen Diario" y "Promedios por Día", mejorando la legibilidad y consistencia con otros reportes. - Se actualiza la exportación a Excel para incluir estas nuevas filas de totales. - Se corrigen errores de tipado (TypeScript) relacionados con la importación de DTOs. Backend: - Se ajusta la lógica en `ListadoDistribucionGeneralViewModel.cs` para calcular correctamente la fila "General" de promedios en la exportación a PDF. - Anteriormente, el promedio se calculaba incorrectamente dividiendo por el total de días del mes. Ahora, se calcula un promedio real basado únicamente en los días con actividad (tirada > 0), asegurando que los datos del PDF coincidan con los de la interfaz.
This commit is contained in:
@@ -14,8 +14,6 @@ namespace GestionIntegral.Api.Dtos.Reportes.ViewModels
|
||||
public string MesConsultado { get; set; } = string.Empty;
|
||||
public string FechaReporte { get; set; } = DateTime.Now.ToString("dd/MM/yyyy");
|
||||
|
||||
// --- PROPIEDAD PARA LOS TOTALES GENERALES DE PROMEDIOS ---
|
||||
// Esta propiedad calcula los promedios generales basados en los datos del resumen mensual.
|
||||
public ListadoDistribucionGeneralPromedioDiaDto? PromedioGeneral
|
||||
{
|
||||
get
|
||||
@@ -24,21 +22,30 @@ namespace GestionIntegral.Api.Dtos.Reportes.ViewModels
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// 1. Filtrar solo los días con actividad para no diluir el promedio.
|
||||
var diasActivos = ResumenMensual.Where(r => r.CantidadTirada > 0).ToList();
|
||||
|
||||
// Contar solo los días con tirada > 0 para promediar correctamente
|
||||
var diasConTirada = ResumenMensual.Count(d => d.CantidadTirada > 0);
|
||||
if (diasConTirada == 0) return null;
|
||||
if (!diasActivos.Any())
|
||||
{
|
||||
return null; // No hay días con actividad, no se puede calcular el promedio.
|
||||
}
|
||||
|
||||
// 2. Usar el conteo de días activos como divisor.
|
||||
var totalDiasActivos = diasActivos.Count;
|
||||
|
||||
return new ListadoDistribucionGeneralPromedioDiaDto
|
||||
{
|
||||
Dia = "General",
|
||||
CantidadDias = diasConTirada,
|
||||
PromedioTirada = (int)ResumenMensual.Average(r => r.CantidadTirada),
|
||||
PromedioSinCargo = (int)ResumenMensual.Average(r => r.SinCargo),
|
||||
PromedioPerdidos = (int)ResumenMensual.Average(r => r.Perdidos),
|
||||
PromedioLlevados = (int)ResumenMensual.Average(r => r.Llevados),
|
||||
PromedioDevueltos = (int)ResumenMensual.Average(r => r.Devueltos),
|
||||
PromedioVendidos = (int)ResumenMensual.Average(r => r.Vendidos)
|
||||
CantidadDias = totalDiasActivos,
|
||||
// 3. Calcular el promedio real: Suma de valores / Cantidad de días activos.
|
||||
// Se usa división entera para que coincida con el formato sin decimales.
|
||||
PromedioTirada = diasActivos.Sum(r => r.CantidadTirada) / totalDiasActivos,
|
||||
PromedioSinCargo = diasActivos.Sum(r => r.SinCargo) / totalDiasActivos,
|
||||
PromedioPerdidos = diasActivos.Sum(r => r.Perdidos) / totalDiasActivos,
|
||||
PromedioLlevados = diasActivos.Sum(r => r.Llevados) / totalDiasActivos,
|
||||
PromedioDevueltos = diasActivos.Sum(r => r.Devueltos) / totalDiasActivos,
|
||||
PromedioVendidos = diasActivos.Sum(r => r.Vendidos) / totalDiasActivos
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ namespace GestionIntegral.Api.Services.Reportes
|
||||
{
|
||||
private readonly IReportesRepository _reportesRepository;
|
||||
private readonly ILogger<ReportesService> _logger;
|
||||
// No necesitas _connectionFactory aquí si toda la lógica de BD está en el repositorio.
|
||||
|
||||
public ReportesService(IReportesRepository reportesRepository, ILogger<ReportesService> logger)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user