Comenzando la implementación final de permisos y depuración. Se sigue...
This commit is contained in:
		| @@ -14,5 +14,6 @@ namespace GestionIntegral.Api.Services.Distribucion | ||||
|         Task<IEnumerable<PublicacionDiaSemanaDto>> ObtenerConfiguracionDiasAsync(int idPublicacion); | ||||
|         Task<IEnumerable<PublicacionDto>> ObtenerPublicacionesPorDiaSemanaAsync(byte diaSemana); // Devolvemos el DTO completo | ||||
|         Task<(bool Exito, string? Error)> ActualizarConfiguracionDiasAsync(int idPublicacion, UpdatePublicacionDiasSemanaRequestDto requestDto, int idUsuario); | ||||
|         Task<IEnumerable<PublicacionDropdownDto>> ObtenerParaDropdownAsync(bool soloHabilitadas = true); | ||||
|     } | ||||
| } | ||||
| @@ -75,6 +75,22 @@ namespace GestionIntegral.Api.Services.Distribucion | ||||
|             return MapToDto(data); | ||||
|         } | ||||
|  | ||||
|         public async Task<IEnumerable<PublicacionDropdownDto>> ObtenerParaDropdownAsync(bool soloHabilitadas = true) | ||||
|         { | ||||
|             var data = await _publicacionRepository.GetAllAsync(null, null, soloHabilitadas ? (bool?)true : null); | ||||
|  | ||||
|             return data | ||||
|                 .Where(p => p.Publicacion != null) // Asegurar que la publicación no sea null | ||||
|                 .Select(d => new PublicacionDropdownDto | ||||
|                 { | ||||
|                     IdPublicacion = d.Publicacion!.IdPublicacion, // Usar ! si estás seguro que no es null después del Where | ||||
|                     Nombre = d.Publicacion!.Nombre, | ||||
|                     Habilitada = d.Publicacion!.Habilitada ?? true // Si necesitas filtrar por esto | ||||
|                 }) | ||||
|                 .OrderBy(p => p.Nombre) | ||||
|                 .ToList(); // O ToListAsync si el método del repo es async y devuelve IQueryable | ||||
|         } | ||||
|  | ||||
|         public async Task<(PublicacionDto? Publicacion, string? Error)> CrearAsync(CreatePublicacionDto createDto, int idUsuario) | ||||
|         { | ||||
|             if (await _empresaRepository.GetByIdAsync(createDto.IdEmpresa) == null) | ||||
|   | ||||
| @@ -11,5 +11,6 @@ namespace GestionIntegral.Api.Services.Impresion | ||||
|         Task<(PlantaDto? Planta, string? Error)> CrearAsync(CreatePlantaDto createDto, int idUsuario); | ||||
|         Task<(bool Exito, string? Error)> ActualizarAsync(int id, UpdatePlantaDto updateDto, int idUsuario); | ||||
|         Task<(bool Exito, string? Error)> EliminarAsync(int id, int idUsuario); | ||||
|         Task<IEnumerable<PlantaDropdownDto>> ObtenerParaDropdownAsync(); | ||||
|     } | ||||
| } | ||||
| @@ -114,8 +114,8 @@ namespace GestionIntegral.Api.Services.Impresion | ||||
|             }; | ||||
|  | ||||
|             using var connection = _connectionFactory.CreateConnection(); | ||||
|              if (connection is System.Data.Common.DbConnection dbConnection) { await dbConnection.OpenAsync(); } else { connection.Open(); } | ||||
|              using var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); | ||||
|             if (connection is System.Data.Common.DbConnection dbConnection) { await dbConnection.OpenAsync(); } else { connection.Open(); } | ||||
|             using var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); | ||||
|  | ||||
|             try | ||||
|             { | ||||
| @@ -133,14 +133,14 @@ namespace GestionIntegral.Api.Services.Impresion | ||||
|             } | ||||
|             catch (KeyNotFoundException knfex) // Captura específica si el repo la lanza | ||||
|             { | ||||
|                  try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en ActualizarAsync Planta."); } | ||||
|                  _logger.LogWarning(knfex, "Intento de actualizar Planta ID: {Id} no encontrada.", id); | ||||
|                  return (false, "Planta no encontrada."); | ||||
|                 try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en ActualizarAsync Planta."); } | ||||
|                 _logger.LogWarning(knfex, "Intento de actualizar Planta ID: {Id} no encontrada.", id); | ||||
|                 return (false, "Planta no encontrada."); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en ActualizarAsync Planta."); } | ||||
|                  _logger.LogError(ex, "Error en transacción ActualizarAsync para Planta ID: {Id}", id); | ||||
|                 _logger.LogError(ex, "Error en transacción ActualizarAsync para Planta ID: {Id}", id); | ||||
|                 return (false, $"Error interno al actualizar la planta: {ex.Message}"); | ||||
|             } | ||||
|         } | ||||
| @@ -153,33 +153,42 @@ namespace GestionIntegral.Api.Services.Impresion | ||||
|             } | ||||
|  | ||||
|             using var connection = _connectionFactory.CreateConnection(); | ||||
|              if (connection is System.Data.Common.DbConnection dbConnection) { await dbConnection.OpenAsync(); } else { connection.Open(); } | ||||
|             if (connection is System.Data.Common.DbConnection dbConnection) { await dbConnection.OpenAsync(); } else { connection.Open(); } | ||||
|             using var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 var eliminado = await _plantaRepository.DeleteAsync(id, idUsuario, transaction); | ||||
|                  if (!eliminado) | ||||
|                  { | ||||
|                 if (!eliminado) | ||||
|                 { | ||||
|                     throw new DataException("La operación de eliminación no afectó ninguna fila."); | ||||
|                  } | ||||
|                 } | ||||
|  | ||||
|                 transaction.Commit(); // <--- CORREGIDO: Commit síncrono | ||||
|                 _logger.LogInformation("Planta ID {IdPlanta} eliminada exitosamente por Usuario ID {IdUsuario}.", id, idUsuario); | ||||
|                 return (true, null); | ||||
|             } | ||||
|              catch (KeyNotFoundException knfex) // Captura específica si el repo la lanza | ||||
|             catch (KeyNotFoundException knfex) // Captura específica si el repo la lanza | ||||
|             { | ||||
|                  try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en EliminarAsync Planta."); } | ||||
|                  _logger.LogWarning(knfex, "Intento de eliminar Planta ID: {Id} no encontrada.", id); | ||||
|                  return (false, "Planta no encontrada."); | ||||
|                 try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en EliminarAsync Planta."); } | ||||
|                 _logger.LogWarning(knfex, "Intento de eliminar Planta ID: {Id} no encontrada.", id); | ||||
|                 return (false, "Planta no encontrada."); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                  try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en EliminarAsync Planta."); } | ||||
|                  _logger.LogError(ex, "Error en transacción EliminarAsync para Planta ID: {Id}", id); | ||||
|                 try { transaction.Rollback(); } catch (Exception rbEx) { _logger.LogError(rbEx, "Error adicional durante el rollback en EliminarAsync Planta."); } | ||||
|                 _logger.LogError(ex, "Error en transacción EliminarAsync para Planta ID: {Id}", id); | ||||
|                 return (false, $"Error interno al eliminar la planta: {ex.Message}"); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<IEnumerable<PlantaDropdownDto>> ObtenerParaDropdownAsync() | ||||
|         { | ||||
|             var plantas = await _plantaRepository.GetAllAsync(null, null); | ||||
|             return plantas | ||||
|                 .OrderBy(p => p.Nombre) | ||||
|                 .Select(p => new PlantaDropdownDto { IdPlanta = p.IdPlanta, Nombre = p.Nombre }) | ||||
|                 .ToList(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user