| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  | using GestionIntegral.Api.Services.Usuarios; | 
					
						
							|  |  |  | using Microsoft.AspNetCore.Authorization; | 
					
						
							|  |  |  | using Microsoft.AspNetCore.Mvc; | 
					
						
							|  |  |  | using Microsoft.Extensions.Logging; | 
					
						
							|  |  |  | using System; | 
					
						
							|  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  | using System.Threading.Tasks; | 
					
						
							|  |  |  | using System.Security.Claims; // Para ClaimTypes | 
					
						
							|  |  |  | using GestionIntegral.Api.Services.Contables; // Para IPagoDistribuidorService, etc. | 
					
						
							|  |  |  | using GestionIntegral.Api.Services.Distribucion; | 
					
						
							|  |  |  | using GestionIntegral.Api.Dtos.Auditoria; | 
					
						
							| 
									
										
										
										
											2025-06-12 19:36:21 -03:00
										 |  |  | using GestionIntegral.Api.Dtos.Zonas; | 
					
						
							|  |  |  | using GestionIntegral.Api.Dtos.Distribucion; | 
					
						
							|  |  |  | using GestionIntegral.Api.Services.Impresion; | 
					
						
							|  |  |  | using GestionIntegral.Api.Dtos.Impresion; | 
					
						
							|  |  |  | using GestionIntegral.Api.Dtos.Usuarios; | 
					
						
							| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace GestionIntegral.Api.Controllers | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   [Route("api/auditoria")] | 
					
						
							|  |  |  |   [ApiController] | 
					
						
							|  |  |  |   [Authorize] | 
					
						
							|  |  |  |   public class AuditoriaController : ControllerBase | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     private readonly IUsuarioService _usuarioService; | 
					
						
							|  |  |  |     private readonly IPagoDistribuidorService _pagoDistribuidorService; | 
					
						
							|  |  |  |     private readonly INotaCreditoDebitoService _notaCreditoDebitoService; | 
					
						
							|  |  |  |     private readonly IEntradaSalidaDistService _esDistService; | 
					
						
							|  |  |  |     private readonly IDistribuidorService _distribuidorService; | 
					
						
							|  |  |  |     private readonly IEntradaSalidaCanillaService _esCanillaService; | 
					
						
							|  |  |  |     private readonly INovedadCanillaService _novedadCanillaService; | 
					
						
							|  |  |  |     private readonly ICanillaService _canillaService; | 
					
						
							|  |  |  |     private readonly ISaldoService _saldoService; | 
					
						
							|  |  |  |     private readonly ITipoPagoService _tipoPagoService; | 
					
						
							|  |  |  |     private readonly IEmpresaService _empresaService; | 
					
						
							| 
									
										
										
										
											2025-06-12 19:36:21 -03:00
										 |  |  |     private readonly IZonaService _zonaService; | 
					
						
							|  |  |  |     private readonly IOtroDestinoService _otroDestinoService; | 
					
						
							|  |  |  |     private readonly IPublicacionService _publicacionService; | 
					
						
							|  |  |  |     private readonly IPubliSeccionService _publiSeccionService; | 
					
						
							|  |  |  |     private readonly IPrecioService _precioService; | 
					
						
							|  |  |  |     private readonly IRecargoZonaService _recargoZonaService; | 
					
						
							|  |  |  |     private readonly IPorcPagoService _porcPagoService; | 
					
						
							|  |  |  |     private readonly IPorcMonCanillaService _porcMonCanillaService; | 
					
						
							|  |  |  |     private readonly IControlDevolucionesService _controlDevolucionesService; | 
					
						
							|  |  |  |     private readonly ITipoBobinaService _tipoBobinaService; | 
					
						
							|  |  |  |     private readonly IEstadoBobinaService _estadoBobinaService; | 
					
						
							|  |  |  |     private readonly IPlantaService _plantaService; | 
					
						
							|  |  |  |     private readonly IStockBobinaService _stockBobinaService; | 
					
						
							|  |  |  |     private readonly ITiradaService _tiradaService; | 
					
						
							|  |  |  |     private readonly IPerfilService _perfilService; | 
					
						
							|  |  |  |     private readonly IPermisoService _permisoService; | 
					
						
							|  |  |  |     private readonly ICambioParadaService _cambioParadaService; | 
					
						
							| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  |     private readonly ILogger<AuditoriaController> _logger; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Permiso general para ver cualquier auditoría. | 
					
						
							|  |  |  |     // Podrías tener permisos más granulares por tipo de auditoría si es necesario. | 
					
						
							|  |  |  |     private const string PermisoVerAuditoria = "AU_GENERAL_VIEW"; // Define este permiso | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public AuditoriaController( | 
					
						
							|  |  |  |         IUsuarioService usuarioService, | 
					
						
							|  |  |  |         IPagoDistribuidorService pagoDistribuidorService, | 
					
						
							|  |  |  |         INotaCreditoDebitoService notaCreditoDebitoService, | 
					
						
							|  |  |  |         IEntradaSalidaDistService esDistService, | 
					
						
							|  |  |  |         IDistribuidorService distribuidorService, | 
					
						
							|  |  |  |         IEntradaSalidaCanillaService esCanillaService, | 
					
						
							|  |  |  |         INovedadCanillaService novedadCanillaService, | 
					
						
							|  |  |  |         ICanillaService canillaService, | 
					
						
							|  |  |  |         ISaldoService saldoService, | 
					
						
							|  |  |  |         ITipoPagoService tipoPagoService, | 
					
						
							|  |  |  |         IEmpresaService empresaService, | 
					
						
							| 
									
										
										
										
											2025-06-12 19:36:21 -03:00
										 |  |  |         IZonaService zonaService, | 
					
						
							|  |  |  |         IOtroDestinoService otroDestinoService, | 
					
						
							|  |  |  |         IPublicacionService publicacionService, | 
					
						
							|  |  |  |         IPubliSeccionService publiSeccionService, | 
					
						
							|  |  |  |         IPrecioService precioService, | 
					
						
							|  |  |  |         IRecargoZonaService recargoZonaService, | 
					
						
							|  |  |  |         IPorcPagoService porcPagoService, | 
					
						
							|  |  |  |         IPorcMonCanillaService porcMonCanillaService, | 
					
						
							|  |  |  |         IControlDevolucionesService controlDevolucionesService, | 
					
						
							|  |  |  |         ITipoBobinaService tipoBobinaService, | 
					
						
							|  |  |  |         IEstadoBobinaService estadoBobinaService, | 
					
						
							|  |  |  |         IPlantaService plantaService, | 
					
						
							|  |  |  |         IStockBobinaService stockBobinaService, | 
					
						
							|  |  |  |         ITiradaService tiradaService, | 
					
						
							|  |  |  |         IPerfilService perfilService, | 
					
						
							|  |  |  |         IPermisoService permisoService, | 
					
						
							|  |  |  |         ICambioParadaService cambioParadaService, | 
					
						
							| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  |         ILogger<AuditoriaController> logger) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       _usuarioService = usuarioService; | 
					
						
							|  |  |  |       _pagoDistribuidorService = pagoDistribuidorService; | 
					
						
							|  |  |  |       _notaCreditoDebitoService = notaCreditoDebitoService; | 
					
						
							|  |  |  |       _esDistService = esDistService; | 
					
						
							|  |  |  |       _distribuidorService = distribuidorService; | 
					
						
							|  |  |  |       _esCanillaService = esCanillaService; | 
					
						
							|  |  |  |       _novedadCanillaService = novedadCanillaService; | 
					
						
							|  |  |  |       _canillaService = canillaService; | 
					
						
							|  |  |  |       _saldoService = saldoService; | 
					
						
							|  |  |  |       _tipoPagoService = tipoPagoService; | 
					
						
							|  |  |  |       _empresaService = empresaService; | 
					
						
							| 
									
										
										
										
											2025-06-12 19:36:21 -03:00
										 |  |  |       _zonaService = zonaService; | 
					
						
							|  |  |  |       _otroDestinoService = otroDestinoService; | 
					
						
							|  |  |  |       _publicacionService = publicacionService; | 
					
						
							|  |  |  |       _publiSeccionService = publiSeccionService; | 
					
						
							|  |  |  |       _precioService = precioService; | 
					
						
							|  |  |  |       _recargoZonaService = recargoZonaService; | 
					
						
							|  |  |  |       _porcPagoService = porcPagoService; | 
					
						
							|  |  |  |       _porcMonCanillaService = porcMonCanillaService; | 
					
						
							|  |  |  |       _controlDevolucionesService = controlDevolucionesService; | 
					
						
							|  |  |  |       _tipoBobinaService = tipoBobinaService; | 
					
						
							|  |  |  |       _estadoBobinaService = estadoBobinaService; | 
					
						
							|  |  |  |       _plantaService = plantaService; | 
					
						
							|  |  |  |       _stockBobinaService = stockBobinaService; | 
					
						
							|  |  |  |       _tiradaService = tiradaService; | 
					
						
							|  |  |  |       _perfilService = perfilService; | 
					
						
							|  |  |  |       _cambioParadaService = cambioParadaService; | 
					
						
							|  |  |  |       _permisoService = permisoService; | 
					
						
							| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  |       _logger = logger; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private bool TienePermiso(string codAcc) => User.IsInRole("SuperAdmin") || User.HasClaim(c => c.Type == "permission" && c.Value == codAcc); | 
					
						
							|  |  |  |     private int? GetCurrentUserId() // Podría no ser necesario aquí si solo filtramos por usuario modificador | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (int.TryParse(User.FindFirstValue(ClaimTypes.NameIdentifier) ?? User.FindFirstValue("sub"), out int userId)) return userId; | 
					
						
							|  |  |  |       return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("pagos-distribuidores")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PagoDistribuidorHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPagosDistribuidor( | 
					
						
							|  |  |  |             [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |             [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |             [FromQuery] int? idPagoAfectado) // Parámetro para filtrar por un ID de pago específico | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); // O un permiso más específico si lo creas | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _pagoDistribuidorService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPagoAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PagoDistribuidorHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de pagos de distribuidores."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de pagos."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("notas-credito-debito")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<NotaCreditoDebitoHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialNotasCD( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idNotaAfectada) // ID de la nota original | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _notaCreditoDebitoService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idNotaAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<NotaCreditoDebitoHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de notas C/D."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de notas C/D."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("entradas-salidas-dist")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<EntradaSalidaDistHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialEntradasSalidasDist( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idParteAfectada) // ID del movimiento original | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _esDistService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idParteAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<EntradaSalidaDistHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de E/S Distribuidores."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de E/S Distribuidores."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("entradas-salidas-canilla")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<EntradaSalidaCanillaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialEntradasSalidasCanilla( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idParteAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _esCanillaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idParteAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<EntradaSalidaCanillaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de E/S Canillitas."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de E/S Canillitas."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("novedades-canilla")] // Endpoint consistente con el servicio frontend | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<NovedadCanillaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialNovedadesCanilla( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idNovedadAfectada) // ID de la novedad original | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _novedadCanillaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idNovedadAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<NovedadCanillaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Novedades de Canillitas."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Novedades de Canillitas."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("ajustes-saldo")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<SaldoAjusteHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialAjustesSaldo( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, | 
					
						
							|  |  |  |         [FromQuery] string? destino, [FromQuery] int? idDestino, [FromQuery] int? idEmpresa) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); // O un permiso más específico si lo creas | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _saldoService.ObtenerHistorialAjustesAsync(fechaDesde, fechaHasta, idUsuarioModifico, destino, idDestino, idEmpresa); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<SaldoAjusteHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de ajustes de saldo."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de ajustes de saldo."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("tipos-pago")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<TipoPagoHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialTiposPago( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idTipoPagoAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         // Asumiendo que _tipoPagoService está inyectado | 
					
						
							|  |  |  |         var historial = await _tipoPagoService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idTipoPagoAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<TipoPagoHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Tipos de Pago."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Tipos de Pago."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("canillitas-maestro")] // Endpoint para el historial del maestro de canillitas | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<CanillaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialCanillitasMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idCanillaAfectado) // ID del canillita original | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _canillaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idCanillaAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<CanillaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Canillitas (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Canillitas (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("distribuidores-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<DistribuidorHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialDistribuidoresMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idDistribuidorAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _distribuidorService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idDistribuidorAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<DistribuidorHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Distribuidores (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Distribuidores (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("empresas-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<EmpresaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialEmpresasMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idEmpresaAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         // Asumiendo que _empresaService está inyectado | 
					
						
							|  |  |  |         var historial = await _empresaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idEmpresaAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<EmpresaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Empresas (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Empresas (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-06-12 19:36:21 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("zonas-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<ZonaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialZonasMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idZonaAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         // Asumiendo que _zonaService está inyectado | 
					
						
							|  |  |  |         var historial = await _zonaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idZonaAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<ZonaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Zonas (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Zonas (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("otros-destinos-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<OtroDestinoHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialOtrosDestinosMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idOtroDestinoAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _otroDestinoService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idOtroDestinoAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<OtroDestinoHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Otros Destinos (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Otros Destinos (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("publicaciones-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PublicacionHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPublicacionesMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPublicacionAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _publicacionService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPublicacionAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PublicacionHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Publicaciones (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Publicaciones (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("publi-secciones-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PubliSeccionHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPubliSeccionesMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idSeccionAfectada, [FromQuery] int? idPublicacionAfectada) // Nuevos filtros | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _publiSeccionService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idSeccionAfectada, idPublicacionAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PubliSeccionHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Secciones de Publicación."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Secciones de Publicación."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("precios-publicacion-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PrecioHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPreciosMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPrecioAfectado, [FromQuery] int? idPublicacionAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _precioService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPrecioAfectado, idPublicacionAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PrecioHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Precios de Publicación."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Precios de Publicación."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("recargos-zona-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<RecargoZonaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialRecargosZonaMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idRecargoAfectado, [FromQuery] int? idPublicacionAfectada, [FromQuery] int? idZonaAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _recargoZonaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idRecargoAfectado, idPublicacionAfectada, idZonaAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<RecargoZonaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Recargos por Zona."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Recargos por Zona."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("porc-pago-dist-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PorcPagoHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPorcPagoDistMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPorcentajeAfectado, [FromQuery] int? idPublicacionAfectada, [FromQuery] int? idDistribuidorAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _porcPagoService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPorcentajeAfectado, idPublicacionAfectada, idDistribuidorAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PorcPagoHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Porcentajes de Pago (Dist)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Porcentajes de Pago (Dist)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("porc-mon-canilla-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PorcMonCanillaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPorcMonCanillaMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPorcMonAfectado, [FromQuery] int? idPublicacionAfectada, [FromQuery] int? idCanillaAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _porcMonCanillaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPorcMonAfectado, idPublicacionAfectada, idCanillaAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PorcMonCanillaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Porc/Mon Canillita."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Porc/Mon Canillita."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("control-devoluciones-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<ControlDevolucionesHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialControlDevolucionesMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idControlAfectado, [FromQuery] int? idEmpresaAfectada, [FromQuery] DateTime? fechaAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _controlDevolucionesService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idControlAfectado, idEmpresaAfectada, fechaAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<ControlDevolucionesHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Control de Devoluciones."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Control de Devoluciones."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("tipos-bobina-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<TipoBobinaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialTiposBobinaMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idTipoBobinaAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _tipoBobinaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idTipoBobinaAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<TipoBobinaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Tipos de Bobina."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Tipos de Bobina."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("estados-bobina-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<EstadoBobinaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialEstadosBobinaMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idEstadoBobinaAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _estadoBobinaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idEstadoBobinaAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<EstadoBobinaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Estados de Bobina."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Estados de Bobina."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("plantas-impresion-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PlantaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPlantasMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPlantaAfectada) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _plantaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPlantaAfectada); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PlantaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Plantas de Impresión."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Plantas de Impresión."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("stock-bobinas-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<StockBobinaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialStockBobinasMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idBobinaAfectada, [FromQuery] int? idTipoBobinaFiltro, | 
					
						
							|  |  |  |         [FromQuery] int? idPlantaFiltro, [FromQuery] int? idEstadoBobinaFiltro) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _stockBobinaService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idBobinaAfectada, idTipoBobinaFiltro, idPlantaFiltro, idEstadoBobinaFiltro); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<StockBobinaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Stock de Bobinas."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Stock de Bobinas."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("reg-tiradas-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<RegTiradaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialRegTiradasMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idRegistroAfectado, [FromQuery] int? idPublicacionFiltro, | 
					
						
							|  |  |  |         [FromQuery] int? idPlantaFiltro, [FromQuery] DateTime? fechaTiradaFiltro) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _tiradaService.ObtenerRegTiradasHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idRegistroAfectado, idPublicacionFiltro, idPlantaFiltro, fechaTiradaFiltro); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<RegTiradaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Registro de Tiradas."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Registro de Tiradas."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("reg-secciones-tirada-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<RegSeccionTiradaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialRegSeccionesTiradaMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idTiradaAfectada, [FromQuery] int? idPublicacionFiltro, | 
					
						
							|  |  |  |         [FromQuery] int? idSeccionFiltro, [FromQuery] int? idPlantaFiltro, [FromQuery] DateTime? fechaTiradaFiltro) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _tiradaService.ObtenerRegSeccionesTiradaHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idTiradaAfectada, idPublicacionFiltro, idSeccionFiltro, idPlantaFiltro, fechaTiradaFiltro); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<RegSeccionTiradaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Secciones de Tirada."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Secciones de Tirada."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("perfiles-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PerfilHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPerfilesMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPerfilAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _perfilService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPerfilAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PerfilHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Perfiles (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Perfiles (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("permisos-maestro")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PermisoHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPermisosMaestro( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPermisoAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _permisoService.ObtenerHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPermisoAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PermisoHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Permisos (Maestro)."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Permisos (Maestro)."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("permisos-perfiles-historial")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<PermisosPerfilesHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialPermisosPerfiles( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idPerfilAfectado, [FromQuery] int? idPermisoAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _perfilService.ObtenerPermisosAsignadosHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idPerfilAfectado, idPermisoAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<PermisosPerfilesHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Asignación de Permisos."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Asignación de Permisos."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [HttpGet("cambios-parada-canilla")] | 
					
						
							|  |  |  |     [ProducesResponseType(typeof(IEnumerable<CambioParadaHistorialDto>), StatusCodes.Status200OK)] | 
					
						
							|  |  |  |     public async Task<IActionResult> GetHistorialCambiosParada( | 
					
						
							|  |  |  |         [FromQuery] DateTime? fechaDesde, [FromQuery] DateTime? fechaHasta, | 
					
						
							|  |  |  |         [FromQuery] int? idUsuarioModifico, [FromQuery] string? tipoModificacion, | 
					
						
							|  |  |  |         [FromQuery] int? idCanillaAfectado) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       if (!TienePermiso(PermisoVerAuditoria)) return Forbid(); | 
					
						
							|  |  |  |       try | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         var historial = await _cambioParadaService.ObtenerCambiosParadaHistorialAsync(fechaDesde, fechaHasta, idUsuarioModifico, tipoModificacion, idCanillaAfectado); | 
					
						
							|  |  |  |         return Ok(historial ?? Enumerable.Empty<CambioParadaHistorialDto>()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (Exception ex) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         _logger.LogError(ex, "Error obteniendo historial de Cambios de Parada."); | 
					
						
							|  |  |  |         return StatusCode(500, "Error interno al obtener historial de Cambios de Parada."); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  |   } | 
					
						
							|  |  |  | } |