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 | ||||
|                 }; | ||||
|             } | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user