129 lines
No EOL
5.1 KiB
C#
129 lines
No EOL
5.1 KiB
C#
using CuentasCobrar.CORE.Entities;
|
|
using CuentasCobrar.CORE.Interfaces;
|
|
using CuentasCobrar.CORE.Pagination;
|
|
using CuentasCobrar.CORE.QueryFilters;
|
|
using CuentasCobrar.INFRASTRUCTURE.Data;
|
|
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>Factura</c> de la base de datos.
|
|
/// </summary>
|
|
/// <remarks> Implementa la interfaz <c>IFacturaRepo</c> </remarks>
|
|
public class FacturaRepo : IFacturaRepo
|
|
{
|
|
/// <summary>
|
|
/// Contexto de la base de datos en SQL Server.
|
|
/// </summary>
|
|
private readonly CuentasCobrarContext _cuentasCobrarContext;
|
|
public FacturaRepo(CuentasCobrarContext cuentasCobrarContext)
|
|
{
|
|
_cuentasCobrarContext = cuentasCobrarContext;
|
|
}
|
|
public async Task<IEnumerable<Factura>> Get()
|
|
{
|
|
var facturas = await _cuentasCobrarContext.Facturas.OrderByDescending(x => x.FechaEmision).ToListAsync();
|
|
return facturas;
|
|
}
|
|
public async Task<Factura> Get(string consecutivo)
|
|
{
|
|
var factura = await _cuentasCobrarContext.Facturas.FirstOrDefaultAsync(x => x.Consecutivo == consecutivo.ToUpper());
|
|
return factura;
|
|
}
|
|
|
|
public async Task<ListaDePaginacion<Factura>> Get(FacturaQueryFilter filtros)
|
|
{
|
|
List<Factura>? facturas = await _cuentasCobrarContext.Facturas.OrderByDescending(x => x.FechaEmision).ToListAsync();
|
|
var monedas = await _cuentasCobrarContext.Monedas.ToListAsync();
|
|
var tiposDocumento = await _cuentasCobrarContext.TiposDocumento.ToListAsync();
|
|
|
|
if (filtros.Busqueda != null) facturas = filtros.FiltrarPorBusqueda(facturas, monedas, tiposDocumento);
|
|
|
|
if (filtros.IdMoneda != null) facturas = filtros.FiltrarPorIdMoneda(facturas);
|
|
|
|
if (filtros.IdTipoDocumento != null) facturas = filtros.FiltrarPorIdTipoDocumento(facturas);
|
|
|
|
if (filtros.Estado != null) facturas = filtros.FiltrarPorEstado(facturas);
|
|
|
|
if (filtros.IdCliente != null) facturas = filtros.FiltrarPorIdCliente(facturas);
|
|
|
|
facturas = filtros.FiltrarPorFecha(facturas);
|
|
|
|
var facturasFiltradas = new ListaDePaginacion<Factura>(facturas, filtros.NumeroDePagina, filtros.RegistrosPorPagina, filtros.ObtenerTodas);
|
|
return facturasFiltradas;
|
|
}
|
|
|
|
public async Task<bool> Post(Factura factura)
|
|
{
|
|
bool agregado = false;
|
|
factura.Consecutivo = factura.Consecutivo.ToUpper();
|
|
await _cuentasCobrarContext.Facturas.AddAsync(factura);
|
|
int filasAfectadas = await _cuentasCobrarContext.SaveChangesAsync();
|
|
if (filasAfectadas > 0)
|
|
{
|
|
agregado = true;
|
|
}
|
|
return agregado;
|
|
}
|
|
|
|
public async Task<bool> Put(Factura factura)
|
|
{
|
|
try
|
|
{
|
|
var facturaActual = await Get(factura.Consecutivo);
|
|
facturaActual.NoIdentificacionCliente = factura.NoIdentificacionCliente;
|
|
facturaActual.IdMoneda = factura.IdMoneda;
|
|
facturaActual.IdTipoDocumento = factura.IdTipoDocumento;
|
|
facturaActual.FechaEmision = factura.FechaEmision;
|
|
facturaActual.FechaVencimiento = factura.FechaVencimiento;
|
|
facturaActual.ConsecutivoNotaReferencia = factura.ConsecutivoNotaReferencia;
|
|
facturaActual.NombreReceptor = factura.NombreReceptor;
|
|
facturaActual.SubTotal = factura.SubTotal;
|
|
facturaActual.TotalImpuestos = factura.TotalImpuestos;
|
|
facturaActual.TotalFactura = factura.TotalFactura;
|
|
facturaActual.DiasCredito = factura.DiasCredito;
|
|
facturaActual.Saldo = factura.Saldo;
|
|
facturaActual.Estado = factura.Estado.ToUpper();
|
|
await _cuentasCobrarContext.SaveChangesAsync();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public async Task<bool> Delete(string consecutivo)
|
|
{
|
|
bool modificado = false;
|
|
var factura = await Get(consecutivo);
|
|
_cuentasCobrarContext.Remove(factura);
|
|
int filasAfectadas = await _cuentasCobrarContext.SaveChangesAsync();
|
|
if (filasAfectadas > 0)
|
|
{
|
|
modificado = true;
|
|
}
|
|
return modificado;
|
|
}
|
|
|
|
public async Task<bool> GenerarNotaCredito(Factura factura, Factura notaCredito)
|
|
{
|
|
try
|
|
{
|
|
factura.Estado = "ANULADA";
|
|
notaCredito.ConsecutivoNotaReferencia = factura.Consecutivo;
|
|
await _cuentasCobrarContext.Facturas.AddAsync(notaCredito);
|
|
await _cuentasCobrarContext.SaveChangesAsync();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
} |