120 lines
4.5 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|