Files
Final_Das/Controladora/ControladoraFacturas.cs

85 lines
3.1 KiB
C#

using System.Collections.ObjectModel;
using Entidades;
using Modelo;
namespace Controladora
{
public class ControladoraFacturas : Singleton<ControladoraFacturas>
{
public string Añadir(Factura t)
{
if (t == null) return "La Factura es nula, fallo la carga";
if (RepositorioFactura.Instance.ExistePorId(t.Id)) return $"La Factura con el ID {t.Id} ya existe";
if (t.Cliente == null || t.Cliente.Cuit == 0) return "Debe seleccionar un cliente antes de agregar la factura";
string checkstock = "";
foreach (var detalle in t.MostrarDetalles())
{
if (detalle.Cantidad > ControladoraLotes.Instance.MostrarStockDeProducto(detalle.Producto))
{
checkstock += $"No hay existencias en stock para realizar la venta de {detalle.Producto.Nombre}\n";
}
}
if (checkstock != "") return checkstock;
try
{
bool resultado = RepositorioFactura.Instance.Add(t);
string resultadolote = ControladoraLotes.Instance.DisminuirStock(t.MostrarDetalles());
// Convierte ReadOnlyCollection a List
var detallesList = new List<DetalleFactura>(t.MostrarDetalles());
if (resultado && resultadolote == "Se Descontaron los productos")
{
// Envía el correo electrónico si la factura se cargó correctamente y el stock se decrementó
string emailResult = ControladoraInformes.Instance.EnviarEmail(
"Factura Cargada",
detallesList // Pasa la lista convertida
);
return $"La Factura con el ID {t.Id} se cargó correctamente. {emailResult}";
}
else
{
return $"Falló la carga de la Factura con el ID {t.Id}";
}
}
catch (Exception ex)
{
// Captura cualquier excepción no prevista
return $"Ocurrió un error inesperado: {ex.Message}";
}
}
public ReadOnlyCollection<Factura> Listar()
{
return RepositorioFactura.Instance.Listar();
}
public ReadOnlyCollection<DetalleFactura> ListarDetallesFactura(Factura factura)
{
Factura facturaalistar = ControladoraFacturas.Instance.Listar().First(x => x.Id == factura.Id);
if (facturaalistar == null) return new ReadOnlyCollection<DetalleFactura>(new List<DetalleFactura>());
return facturaalistar.MostrarDetalles();
}
public ReadOnlyCollection<Producto> ListarProductos()
{
return RepositorioProductos.Instance.Listar()
.Where(x => x.Habilitado == true)
.ToList()
.AsReadOnly();
}
public ReadOnlyCollection<Cliente> ListarClientes()
{
return RepositorioClientes.Instance.Listar().Where(x => x.Habilitado == true)
.ToList()
.AsReadOnly();
}
}
}