// src/Data/Repositories/RecargoZonaRepository.cs using Dapper; using System.Data; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using GestionIntegral.Api.Models.Distribucion; // Asegúrate que esta directiva using esté presente namespace GestionIntegral.Api.Data.Repositories.Distribucion { public class RecargoZonaRepository : IRecargoZonaRepository { private readonly DbConnectionFactory _connectionFactory; // _cf private readonly ILogger _logger; // _log public RecargoZonaRepository(DbConnectionFactory connectionFactory, ILogger logger) { _connectionFactory = connectionFactory; _logger = logger; } public async Task DeleteByPublicacionIdAsync(int idPublicacion, int idUsuarioAuditoria, IDbTransaction transaction) { // Obtener recargos para el historial const string selectRecargos = "SELECT * FROM dbo.dist_RecargoZona WHERE Id_Publicacion = @IdPublicacion"; var recargosAEliminar = await transaction.Connection!.QueryAsync(selectRecargos, new { IdPublicacion = idPublicacion }, transaction); // Asume que tienes una tabla dist_RecargoZona_H y un modelo RecargoZonaHistorico const string sqlInsertHistorico = @" INSERT INTO dbo.dist_RecargoZona_H (Id_Recargo, Id_Publicacion, Id_Zona, VigenciaD, VigenciaH, Valor, Id_Usuario, FechaMod, TipoMod) VALUES (@IdRecargo, @IdPublicacion, @IdZona, @VigenciaD, @VigenciaH, @Valor, @Id_Usuario, @FechaMod, @TipoMod);"; // Nombres de parámetros corregidos foreach (var recargo in recargosAEliminar) { await transaction.Connection!.ExecuteAsync(sqlInsertHistorico, new { // Mapear los campos de 'recargo' a los parámetros de sqlInsertHistorico recargo.IdRecargo, // Usar las propiedades del modelo RecargoZona recargo.IdPublicacion, recargo.IdZona, recargo.VigenciaD, recargo.VigenciaH, recargo.Valor, Id_Usuario = idUsuarioAuditoria, // Este es el parámetro esperado por la query FechaMod = DateTime.Now, TipoMod = "Eliminado (Cascada)" }, transaction); } const string sql = "DELETE FROM dbo.dist_RecargoZona WHERE Id_Publicacion = @IdPublicacion"; try { await transaction.Connection!.ExecuteAsync(sql, new { IdPublicacion = idPublicacion }, transaction: transaction); return true; // Se intentó la operación } catch (System.Exception ex) { _logger.LogError(ex, "Error al eliminar RecargosZona por IdPublicacion: {IdPublicacion}", idPublicacion); throw; // Re-lanzar para que la transacción padre haga rollback } } // Aquí irían otros métodos CRUD para RecargoZona si se gestionan individualmente. // Por ejemplo, GetByPublicacionId, Create, Update, Delete (para un recargo específico). } }