using System.Collections.ObjectModel; using Entidades; using Modelo; namespace Controladora { public class ControladoraFacturas : Singleton { 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(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 Listar() { return RepositorioFactura.Instance.Listar(); } public ReadOnlyCollection ListarDetallesFactura(Factura factura) { Factura facturaalistar = ControladoraFacturas.Instance.Listar().First(x => x.Id == factura.Id); if (facturaalistar == null) return new ReadOnlyCollection(new List()); return facturaalistar.MostrarDetalles(); } public ReadOnlyCollection ListarProductos() { return RepositorioProductos.Instance.Listar() .Where(x => x.Habilitado == true) .ToList() .AsReadOnly(); } public ReadOnlyCollection ListarClientes() { return RepositorioClientes.Instance.Listar().Where(x => x.Habilitado == true) .ToList() .AsReadOnly(); } } }