Finalización de Reportes y arreglos varios de controles y comportamientos...
This commit is contained in:
@@ -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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user