69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Text; | ||
|  | using Dapper; | ||
|  | using GestionIntegral.Api.Models.Comunicaciones; | ||
|  | 
 | ||
|  | namespace GestionIntegral.Api.Data.Repositories.Comunicaciones | ||
|  | { | ||
|  |     public class LoteDeEnvioRepository : ILoteDeEnvioRepository | ||
|  |     { | ||
|  |         private readonly DbConnectionFactory _connectionFactory; | ||
|  |         public LoteDeEnvioRepository(DbConnectionFactory connectionFactory) | ||
|  |         { | ||
|  |             _connectionFactory = connectionFactory; | ||
|  |         } | ||
|  | 
 | ||
|  |         public async Task<LoteDeEnvio> CreateAsync(LoteDeEnvio lote) | ||
|  |         { | ||
|  |             const string sql = @"
 | ||
|  |                 INSERT INTO dbo.com_LotesDeEnvio (FechaInicio, Periodo, Origen, Estado, IdUsuarioDisparo) | ||
|  |                 OUTPUT INSERTED.* | ||
|  |                 VALUES (@FechaInicio, @Periodo, @Origen, @Estado, @IdUsuarioDisparo);";
 | ||
|  |             using var connection = _connectionFactory.CreateConnection(); | ||
|  |             return await connection.QuerySingleAsync<LoteDeEnvio>(sql, lote); | ||
|  |         } | ||
|  | 
 | ||
|  |         public async Task<bool> UpdateAsync(LoteDeEnvio lote) | ||
|  |         { | ||
|  |             const string sql = @"
 | ||
|  |                 UPDATE dbo.com_LotesDeEnvio SET | ||
|  |                     FechaFin = @FechaFin, | ||
|  |                     Estado = @Estado, | ||
|  |                     TotalCorreos = @TotalCorreos, | ||
|  |                     TotalEnviados = @TotalEnviados, | ||
|  |                     TotalFallidos = @TotalFallidos | ||
|  |                 WHERE IdLoteDeEnvio = @IdLoteDeEnvio;";
 | ||
|  |             using var connection = _connectionFactory.CreateConnection(); | ||
|  |             var rows = await connection.ExecuteAsync(sql, lote); | ||
|  |             return rows == 1; | ||
|  |         } | ||
|  | 
 | ||
|  |         public async Task<IEnumerable<LoteDeEnvio>> GetAllAsync(int? anio, int? mes) | ||
|  |         { | ||
|  |             var sqlBuilder = new StringBuilder("SELECT * FROM dbo.com_LotesDeEnvio WHERE 1=1"); | ||
|  |             var parameters = new DynamicParameters(); | ||
|  | 
 | ||
|  |             if (anio.HasValue) | ||
|  |             { | ||
|  |                 sqlBuilder.Append(" AND YEAR(FechaInicio) = @Anio"); | ||
|  |                 parameters.Add("Anio", anio.Value); | ||
|  |             } | ||
|  |             if (mes.HasValue) | ||
|  |             { | ||
|  |                 sqlBuilder.Append(" AND MONTH(FechaInicio) = @Mes"); | ||
|  |                 parameters.Add("Mes", mes.Value); | ||
|  |             } | ||
|  | 
 | ||
|  |             sqlBuilder.Append(" ORDER BY FechaInicio DESC;"); | ||
|  | 
 | ||
|  |             using var connection = _connectionFactory.CreateConnection(); | ||
|  |             return await connection.QueryAsync<LoteDeEnvio>(sqlBuilder.ToString(), parameters); | ||
|  |         } | ||
|  | 
 | ||
|  |         public async Task<LoteDeEnvio?> GetByIdAsync(int id) | ||
|  |         { | ||
|  |             const string sql = "SELECT * FROM dbo.com_LotesDeEnvio WHERE IdLoteDeEnvio = @Id;"; | ||
|  |             using var connection = _connectionFactory.CreateConnection(); | ||
|  |             return await connection.QuerySingleOrDefaultAsync<LoteDeEnvio>(sql, new { Id = id }); | ||
|  |         } | ||
|  |     } | ||
|  | } |