TFS_ANTIGUO/TPAtesa_CuentasCobrar/CuentasCobrar.INFRASTRUCTURE/Repositories/PagoRepo.cs

120 lines
4.5 KiB
C#

using CuentasCobrar.CORE.Entities;
using CuentasCobrar.CORE.Interfaces;
using CuentasCobrar.CORE.Pagination;
using CuentasCobrar.CORE.QueryFilters;
using CuentasCobrar.INFRASTRUCTURE.Data;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
namespace CuentasCobrar.INFRASTRUCTURE.Repositories
{
/// <summary>
/// Clase encargada de realizar todos las operaciones de lectura, modificación y adición de datos
/// en la tabla <c>Pago</c> de la base de datos.
/// </summary>
/// <remarks> Implementa la interfaz <c>IPagoRepo</c> </remarks>
public class PagoRepo : IPagoRepo
{
/// <summary>
/// Contexto de la base de datos en SQL Server.
/// </summary>
private readonly CuentasCobrarContext _cuentasCobrarContext;
public PagoRepo(CuentasCobrarContext cuentasCobrarContext)
{
_cuentasCobrarContext = cuentasCobrarContext;
}
public async Task<List<Pago>> Get()
{
var pagoes = await _cuentasCobrarContext.Pagos.OrderByDescending(x => x.FechaPago).ToListAsync();
return pagoes;
}
public async Task<ListaDePaginacion<Pago>> Get(PagoQueryFilter filtros)
{
var pagos = await _cuentasCobrarContext.Pagos.OrderByDescending(x => x.FechaPago).ToListAsync();
var monedas = await _cuentasCobrarContext.Monedas.ToListAsync();
var tiposPago = await _cuentasCobrarContext.TiposPago.ToListAsync();
var bancos = await _cuentasCobrarContext.Bancos.ToListAsync();
if (filtros.Busqueda != null) pagos = filtros.FiltrarPorBusqueda(pagos, monedas, tiposPago, bancos);
if (filtros.IdBanco != null) pagos = filtros.FiltrarPorIdBanco(pagos);
if (filtros.IdMoneda != null) pagos = filtros.FiltrarPorIdMoneda(pagos);
if (filtros.IdTipoPago != null) pagos = filtros.FiltrarPorIdTipoPago(pagos);
pagos = filtros.FiltrarPorFecha(pagos);
var pagosPaginados = new ListaDePaginacion<Pago>(pagos, filtros.NumeroDePagina, filtros.RegistrosPorPagina);
return pagosPaginados;
}
public async Task<Pago> Get(int noRecibo)
{
var pago = await _cuentasCobrarContext.Pagos.FirstOrDefaultAsync(x => x.NoRecibo == noRecibo);
return pago;
}
public async Task<bool> Post(Pago pago, List<Factura> facturas)
{
bool agregado = false;
var PagoRealizado = await _cuentasCobrarContext.Pagos.AddAsync(pago);
int pagoCreado = await _cuentasCobrarContext.SaveChangesAsync();
if (pagoCreado > 0)
{
string sql = "EXEC Global.CancelarFactura @Consecutivo, @SaldoNuevo, @NoRecibo";
foreach (Factura factura in facturas)
{
List<SqlParameter> parametros = new List<SqlParameter>
{
new SqlParameter { ParameterName = "@Consecutivo", Value = factura.Consecutivo },
new SqlParameter { ParameterName = "@SaldoNuevo", Value = factura.Saldo },
new SqlParameter { ParameterName = "@NoRecibo", Value = PagoRealizado.Entity.NoRecibo }
};
int pagoContieneFacturaCreado = await _cuentasCobrarContext.Database.ExecuteSqlRawAsync(sql, parametros.ToArray());
if (pagoContieneFacturaCreado > 0) agregado = true;
else agregado = false;
}
}
return agregado;
}
public async Task<bool> Put(Pago pago)
{
try
{
var pagoActual = await Get(pago.NoRecibo);
pagoActual.FechaPago = pago.FechaPago;
pagoActual.IdTipoPago = pago.IdTipoPago;
pagoActual.IdMoneda = pago.IdMoneda;
pagoActual.IdBanco = pago.IdBanco;
await _cuentasCobrarContext.SaveChangesAsync();
}
catch (Exception)
{
return false;
}
return true;
}
public async Task<bool> Delete(int noRecibo)
{
bool eliminado = false;
var pago = await Get(noRecibo);
_cuentasCobrarContext.Remove(pago);
int filasAfectadas = await _cuentasCobrarContext.SaveChangesAsync();
if (filasAfectadas > 0)
{
eliminado = true;
}
return eliminado;
}
}
}