From c251a0adf4cde4381de666bbaf9835d8ac0d0009 Mon Sep 17 00:00:00 2001 From: dmolinari Date: Mon, 21 Jul 2025 12:44:21 -0300 Subject: [PATCH] =?UTF-8?q?Feat:=20Solicitudes=20Contadur=C3=ADa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Siglas Días en Reporte Dist. General - Mostrar Publicaciones Deshabilitadas en Selectores de Reportes --- .../Distribucion/PublicacionesController.cs | 4 ++-- .../ListadoDistribucionGeneralDocument.cs | 15 +++++++++++++-- .../Services/Distribucion/IPublicacionService.cs | 2 +- .../Services/Distribucion/PublicacionService.cs | 2 +- .../SeleccionaReporteListadoDistribucion.tsx | 2 +- ...aReporteListadoDistribucionCanillasImporte.tsx | 6 +++--- ...eleccionaReporteListadoDistribucionGeneral.tsx | 6 +++--- ...ccionaReporteTiradasPublicacionesSecciones.tsx | 2 +- .../services/Distribucion/publicacionService.ts | 2 +- 9 files changed, 26 insertions(+), 15 deletions(-) diff --git a/Backend/GestionIntegral.Api/Controllers/Distribucion/PublicacionesController.cs b/Backend/GestionIntegral.Api/Controllers/Distribucion/PublicacionesController.cs index ba6de5b..c39d55c 100644 --- a/Backend/GestionIntegral.Api/Controllers/Distribucion/PublicacionesController.cs +++ b/Backend/GestionIntegral.Api/Controllers/Distribucion/PublicacionesController.cs @@ -42,7 +42,7 @@ namespace GestionIntegral.Api.Controllers.Distribucion [HttpGet] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task GetAllPublicaciones([FromQuery] string? nombre, [FromQuery] int? idEmpresa, [FromQuery] bool? soloHabilitadas = true) + public async Task GetAllPublicaciones([FromQuery] string? nombre, [FromQuery] int? idEmpresa, [FromQuery] bool? soloHabilitadas) { if (!TienePermiso(PermisoVer)) return Forbid(); var publicaciones = await _publicacionService.ObtenerTodasAsync(nombre, idEmpresa, soloHabilitadas); @@ -54,7 +54,7 @@ namespace GestionIntegral.Api.Controllers.Distribucion [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] // No se verifica permiso DP001, solo requiere autenticación general ([Authorize] del controlador) - public async Task GetPublicacionesForDropdown([FromQuery] bool soloHabilitadas = true) + public async Task GetPublicacionesForDropdown([FromQuery] bool? soloHabilitadas) { try { diff --git a/Backend/GestionIntegral.Api/Controllers/Reportes/PdfTemplates/ListadoDistribucionGeneralDocument.cs b/Backend/GestionIntegral.Api/Controllers/Reportes/PdfTemplates/ListadoDistribucionGeneralDocument.cs index 5979f63..02ad028 100644 --- a/Backend/GestionIntegral.Api/Controllers/Reportes/PdfTemplates/ListadoDistribucionGeneralDocument.cs +++ b/Backend/GestionIntegral.Api/Controllers/Reportes/PdfTemplates/ListadoDistribucionGeneralDocument.cs @@ -69,7 +69,7 @@ namespace GestionIntegral.Api.Controllers.Reportes.PdfTemplates { table.ColumnsDefinition(columns => { - columns.ConstantColumn(40); + columns.ConstantColumn(60); columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); @@ -89,9 +89,20 @@ namespace GestionIntegral.Api.Controllers.Reportes.PdfTemplates header.Cell().Border(1).Background(Colors.Grey.Lighten3).Padding(4).AlignRight().Text("Vendidos"); }); + var dayAbbreviations = new Dictionary + { + { System.DayOfWeek.Sunday, "Dom" }, + { System.DayOfWeek.Monday, "Lun" }, + { System.DayOfWeek.Tuesday, "Mar" }, + { System.DayOfWeek.Wednesday, "Mie" }, + { System.DayOfWeek.Thursday, "Jue" }, + { System.DayOfWeek.Friday, "Vie" }, + { System.DayOfWeek.Saturday, "Sab" } + }; + foreach (var item in Model.ResumenMensual.OrderBy(x => x.Fecha)) { - table.Cell().Border(1).Padding(3).Text(item.Fecha.Day.ToString()); + table.Cell().Border(1).Padding(3).Text($"{dayAbbreviations[item.Fecha.DayOfWeek]} {item.Fecha.Day}"); table.Cell().Border(1).Padding(3).AlignRight().Text(item.CantidadTirada.ToString("N0")); table.Cell().Border(1).Padding(3).AlignRight().Text(item.SinCargo.ToString("N0")); table.Cell().Border(1).Padding(3).AlignRight().Text(item.Perdidos.ToString("N0")); diff --git a/Backend/GestionIntegral.Api/Services/Distribucion/IPublicacionService.cs b/Backend/GestionIntegral.Api/Services/Distribucion/IPublicacionService.cs index a913250..0c23c9f 100644 --- a/Backend/GestionIntegral.Api/Services/Distribucion/IPublicacionService.cs +++ b/Backend/GestionIntegral.Api/Services/Distribucion/IPublicacionService.cs @@ -15,7 +15,7 @@ namespace GestionIntegral.Api.Services.Distribucion Task> ObtenerConfiguracionDiasAsync(int idPublicacion); Task> ObtenerPublicacionesPorDiaSemanaAsync(byte diaSemana); // Devolvemos el DTO completo Task<(bool Exito, string? Error)> ActualizarConfiguracionDiasAsync(int idPublicacion, UpdatePublicacionDiasSemanaRequestDto requestDto, int idUsuario); - Task> ObtenerParaDropdownAsync(bool soloHabilitadas); + Task> ObtenerParaDropdownAsync(bool? soloHabilitadas); Task> ObtenerHistorialAsync( DateTime? fechaDesde, DateTime? fechaHasta, int? idUsuarioModifico, string? tipoModificacion, diff --git a/Backend/GestionIntegral.Api/Services/Distribucion/PublicacionService.cs b/Backend/GestionIntegral.Api/Services/Distribucion/PublicacionService.cs index 8a6bc5e..c4effdd 100644 --- a/Backend/GestionIntegral.Api/Services/Distribucion/PublicacionService.cs +++ b/Backend/GestionIntegral.Api/Services/Distribucion/PublicacionService.cs @@ -76,7 +76,7 @@ namespace GestionIntegral.Api.Services.Distribucion return MapToDto(data); } - public async Task> ObtenerParaDropdownAsync(bool soloHabilitadas) + public async Task> ObtenerParaDropdownAsync(bool? soloHabilitadas) { var data = await _publicacionRepository.GetAllAsync(null, null, soloHabilitadas); diff --git a/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucion.tsx b/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucion.tsx index 9714adf..eb1d147 100644 --- a/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucion.tsx +++ b/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucion.tsx @@ -41,7 +41,7 @@ const SeleccionaReporteListadoDistribucion: React.FC d)); setPublicaciones(pubData.map(p => p)); diff --git a/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionCanillasImporte.tsx b/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionCanillasImporte.tsx index ce0ecbb..4a8c054 100644 --- a/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionCanillasImporte.tsx +++ b/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionCanillasImporte.tsx @@ -5,7 +5,7 @@ import { ToggleButtonGroup, ToggleButton } from '@mui/material'; -import type { PublicacionDto } from '../../models/dtos/Distribucion/PublicacionDto'; +import type { PublicacionDropdownDto } from '../../models/dtos/Distribucion/PublicacionDropdownDto'; import publicacionService from '../../services/Distribucion/publicacionService'; interface SeleccionaReporteListadoDistribucionCanillasImporteProps { @@ -30,7 +30,7 @@ const SeleccionaReporteListadoDistribucionCanillasImporte: React.FC(new Date().toISOString().split('T')[0]); const [esAccionista, setEsAccionista] = useState(false); - const [publicaciones, setPublicaciones] = useState([]); + const [publicaciones, setPublicaciones] = useState([]); const [loadingDropdowns, setLoadingDropdowns] = useState(false); const [localErrors, setLocalErrors] = useState<{ [key: string]: string | null }>({}); @@ -38,7 +38,7 @@ const SeleccionaReporteListadoDistribucionCanillasImporte: React.FC { setLoadingDropdowns(true); try { - const data = await publicacionService.getAllPublicaciones(undefined, undefined); + const data = await publicacionService.getPublicacionesForDropdown(); setPublicaciones(data.map(p => p)); } catch (error) { console.error("Error al cargar publicaciones:", error); diff --git a/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionGeneral.tsx b/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionGeneral.tsx index b9141f5..a6d9fb6 100644 --- a/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionGeneral.tsx +++ b/Frontend/src/pages/Reportes/SeleccionaReporteListadoDistribucionGeneral.tsx @@ -3,7 +3,7 @@ import { Box, Typography, Button, CircularProgress, Alert, FormControl, InputLabel, Select, MenuItem, TextField } from '@mui/material'; -import type { PublicacionDto } from '../../models/dtos/Distribucion/PublicacionDto'; +import type { PublicacionDropdownDto } from '../../models/dtos/Distribucion/PublicacionDropdownDto'; import publicacionService from '../../services/Distribucion/publicacionService'; interface SeleccionaReporteListadoDistribucionGeneralProps { @@ -26,7 +26,7 @@ const SeleccionaReporteListadoDistribucionGeneral: React.FC(new Date().toISOString().substring(0, 7)); // Formato "YYYY-MM" - const [publicaciones, setPublicaciones] = useState([]); + const [publicaciones, setPublicaciones] = useState([]); const [loadingDropdowns, setLoadingDropdowns] = useState(false); const [localErrors, setLocalErrors] = useState<{ [key: string]: string | null }>({}); @@ -35,7 +35,7 @@ const SeleccionaReporteListadoDistribucionGeneral: React.FC p)); // El servicio devuelve tupla } catch (error) { console.error("Error al cargar publicaciones:", error); diff --git a/Frontend/src/pages/Reportes/SeleccionaReporteTiradasPublicacionesSecciones.tsx b/Frontend/src/pages/Reportes/SeleccionaReporteTiradasPublicacionesSecciones.tsx index c3c9833..1af5f5a 100644 --- a/Frontend/src/pages/Reportes/SeleccionaReporteTiradasPublicacionesSecciones.tsx +++ b/Frontend/src/pages/Reportes/SeleccionaReporteTiradasPublicacionesSecciones.tsx @@ -41,7 +41,7 @@ const SeleccionaReporteTiradasPublicacionesSecciones: React.FC p)); diff --git a/Frontend/src/services/Distribucion/publicacionService.ts b/Frontend/src/services/Distribucion/publicacionService.ts index 72d464d..d575ac5 100644 --- a/Frontend/src/services/Distribucion/publicacionService.ts +++ b/Frontend/src/services/Distribucion/publicacionService.ts @@ -52,7 +52,7 @@ const getPublicacionesPorDiaSemana = async (diaSemana: number): Promise => { +const getPublicacionesForDropdown = async (soloHabilitadas?: boolean): Promise => { const response = await apiClient.get('/publicaciones/dropdown', { params: { soloHabilitadas } }); return response.data; };