Finalización de Reportes y arreglos varios de controles y comportamientos...

This commit is contained in:
2025-06-03 13:45:20 -03:00
parent 99532b03f1
commit 062cc05fd0
67 changed files with 4523 additions and 993 deletions

View File

@@ -202,5 +202,71 @@ namespace GestionIntegral.Api.Services.Distribucion
return (false, $"Error interno al eliminar la publicación y sus dependencias: {ex.Message}");
}
}
public async Task<IEnumerable<PublicacionDiaSemanaDto>> ObtenerConfiguracionDiasAsync(int idPublicacion)
{
var configs = await _publicacionRepository.GetConfiguracionDiasAsync(idPublicacion);
return configs.Select(c => new PublicacionDiaSemanaDto
{
IdPublicacionDia = c.IdPublicacionDia,
IdPublicacion = c.IdPublicacion,
DiaSemana = c.DiaSemana,
Activo = c.Activo
});
}
public async Task<IEnumerable<PublicacionDto>> ObtenerPublicacionesPorDiaSemanaAsync(byte diaSemana)
{
// Obtener IDs de las publicaciones configuradas para ese día
var idsPublicaciones = await _publicacionRepository.GetPublicacionesIdsPorDiaSemanaAsync(diaSemana);
if (!idsPublicaciones.Any())
{
return Enumerable.Empty<PublicacionDto>();
}
// Obtener los detalles completos de esas publicaciones
// Podríamos optimizar esto si GetByIdAsync es eficiente o crear un GetByIdsAsync
var publicacionesTasks = idsPublicaciones.Select(id => ObtenerPorIdAsync(id));
var publicacionesResult = await Task.WhenAll(publicacionesTasks);
return publicacionesResult.Where(p => p != null).Select(p => p!); // Filtrar nulos y asegurar no nulabilidad
}
public async Task<(bool Exito, string? Error)> ActualizarConfiguracionDiasAsync(int idPublicacion, UpdatePublicacionDiasSemanaRequestDto requestDto, int idUsuario)
{
var publicacionExistente = await _publicacionRepository.GetByIdSimpleAsync(idPublicacion);
if (publicacionExistente == null)
{
return (false, "Publicación no encontrada.");
}
// Validar que los días de la semana estén en el rango correcto (0-6)
if (requestDto.DiasActivos.Any(d => d > 6)) // byte no puede ser < 0
{
return (false, "Día de la semana inválido. Debe estar entre 0 (Domingo) y 6 (Sábado).");
}
using var connection = _connectionFactory.CreateConnection();
if (connection is System.Data.Common.DbConnection dbConn) await dbConn.OpenAsync(); else connection.Open();
using var transaction = connection.BeginTransaction();
try
{
await _publicacionRepository.UpdateConfiguracionDiasAsync(idPublicacion, requestDto.DiasActivos.Distinct(), transaction);
// No se está implementando historial para PublicacionDiaSemana por ahora.
// Si se necesitara, se añadiría aquí una llamada al repositorio para insertar en la tabla _H.
transaction.Commit();
_logger.LogInformation("Configuración de días actualizada para Publicación ID {IdPublicacion} por Usuario ID {UserId}.", idPublicacion, idUsuario);
return (true, null);
}
catch (Exception ex)
{
try { transaction.Rollback(); } catch { }
_logger.LogError(ex, "Error al actualizar configuración de días para Publicacion ID: {IdPublicacion}", idPublicacion);
return (false, $"Error interno al actualizar la configuración de días: {ex.Message}");
}
}
}
}