Factura Obtener(Datos.Factura facturaDAL) { OrdenVenta ordenVenta = ordenesVentaBL.Obtener(facturaDAL.OrdenVenta); return(new Factura { Id = facturaDAL.ID, Fecha = facturaDAL.Fecha, Cobrada = facturaDAL.Cobrada, OrdenVenta = ordenVenta }); }
IEnumerable <OrdenVenta> Obtener(IEnumerable <Datos.OrdenVenta> ordenesVentaDAL) { List <OrdenVenta> ordenesVenta = new List <OrdenVenta>(); foreach (Datos.OrdenVenta ordenVentaDAL in ordenesVentaDAL) { OrdenVenta ordenVenta = Obtener(ordenVentaDAL); ordenesVenta.Add(ordenVenta); } return(ordenesVenta); }
/// <summary> /// Calcula el precio total de una orden de venta o pedido /// El precio se calcula mediante calcular el precio de cada receta incluida en la orden, /// multiplicandolo por la cantidad de comensales de la misma. /// A ese precio calculado se le agrega un porcentaje extra que representa la ganancia de la empresa /// </summary> /// <param name="ordenVenta">Orden de venta a calcular su precio</param> /// <returns>El precio total de la orden</returns> public decimal CalcularPrecio(OrdenVenta ordenVenta) { ValidarOrdenVenta(ordenVenta); decimal precio = 0m; foreach (Receta receta in ordenVenta.Recetas) { decimal precioReceta = recetasBL.CalularPrecio(receta); precio += precioReceta * ordenVenta.Comensales; } //Se suma un 25% de ganancia al precio calculado en base al precio actual de cada receta de la orden por la cantidad de comensales precio *= 1.25m; return(precio); }
/// <summary> /// Actualiza los datos de una determinada orden de venta o pedido /// Los datos que se permiten actualizar son los comensales, precio y si esta aprobada o no /// </summary> /// <param name="ordenVenta">Orden de venta a actualizar</param> public void Actualizar(OrdenVenta ordenVenta) { ValidarOrdenVenta(ordenVenta); Datos.OrdenesVentaDAL dalOrdenesVenta = dal.ObtenerOrdenesVentaDAL(); Datos.OrdenVenta ordenVentaDAL = dalOrdenesVenta.Obtener(ordenVenta.Id); if (ordenVentaDAL == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaInvalida); } ordenVentaDAL.Comensales = ordenVenta.Comensales; ordenVentaDAL.Precio = ordenVenta.Precio; ordenVentaDAL.Aprobada = ordenVenta.Aprobada; dalOrdenesVenta.Actualizar(ordenVentaDAL); dal.Guardar(); }
/// <summary> /// Crea una nueva orden de venta o pedido en el sistema /// Las ordenes de venta son la informacion central del sistema ya que a partir de ellas se mueve el negocio, /// se preparan recetas, se generan ordenes de compra, facturas, ordenes de pago, etc. /// </summary> /// <param name="ordenVenta">Orden de venta a crear</param> public void Crear(OrdenVenta ordenVenta) { ValidarOrdenVenta(ordenVenta); Datos.ClientesDAL dalClientes = dal.ObtenerClientesDAL(); Datos.Cliente clienteDAL = dalClientes.Obtener(ordenVenta.Cliente.CUIT); if (clienteDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_ClienteInvalido, ordenVenta.Cliente.CUIT)); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); List <Datos.Receta> recetasDAL = new List <Datos.Receta>(); foreach (Receta receta in ordenVenta.Recetas) { Datos.Receta recetaDAL = dalRecetas.Obtener(receta.Id); if (recetaDAL == null) { throw new OBMCateringException(string.Format(Resources.OrdenesVentaBL_Validaciones_RecetaInvalida, receta.Nombre)); } recetasDAL.Add(recetaDAL); } Datos.OrdenVenta ordenVentaDAL = new Datos.OrdenVenta { FechaInicio = ordenVenta.FechaInicio, FechaFin = ordenVenta.FechaFin, Comensales = ordenVenta.Comensales, Precio = ordenVenta.Precio, Aprobada = ordenVenta.Aprobada, Cliente = clienteDAL, Recetas = recetasDAL }; Datos.OrdenesVentaDAL dalOrdenesVenta = dal.ObtenerOrdenesVentaDAL(); dalOrdenesVenta.Crear(ordenVentaDAL); dal.Guardar(); }
/// <summary> /// Obtiene la factura asociada a determinado pedido u orden de venta /// </summary> /// <param name="ordenVenta">Orden de venta para buscar su factura</param> /// <returns>Factura encontrada</returns> public Factura Obtener(OrdenVenta ordenVenta) { if (ordenVenta == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaNull); } Datos.OrdenesVentaDAL dalOrdenesVenta = dal.ObtenerOrdenesVentaDAL(); Datos.OrdenVenta ordenVentaDAL = dalOrdenesVenta.Obtener(ordenVenta.Id); if (ordenVentaDAL == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaInvalida); } Datos.FacturasDAL dalFacturas = dal.ObtenerFacturasDAL(); Datos.Factura facturaDAL = dalFacturas.Obtener(ordenVentaDAL); return(Obtener(facturaDAL)); }
void ValidarOrdenVenta(OrdenVenta ordenVenta) { if (ordenVenta == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaNull); } if (ordenVenta.Cliente == null) { throw new OBMCateringException(Resources.BL_Validaciones_ClienteNull); } if (ordenVenta.Comensales <= 0) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaSinComensales); } if (ordenVenta.Recetas == null || ordenVenta.Recetas.Count == 0) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaSinRecetas); } }
internal OrdenCompra Obtener(Datos.OrdenCompra ordenCompraDAL) { List <ItemOrdenCompra> items = new List <ItemOrdenCompra>(); foreach (Datos.ItemOrdenCompra itemDAL in ordenCompraDAL.ItemsOrdenesCompra) { ItemOrdenCompra item = ObtenerItem(itemDAL); items.Add(item); } OrdenVenta ordenVenta = ordenesVentaBL.Obtener(ordenCompraDAL.OrdenVenta); EstadoOrdenCompra estado = (EstadoOrdenCompra)Enum.Parse(typeof(EstadoOrdenCompra), ordenCompraDAL.Estado.Estado); return(new OrdenCompra { Id = ordenCompraDAL.ID, Fecha = ordenCompraDAL.Fecha, Estado = estado, OrdenVenta = ordenVenta, Items = items }); }
/// <summary> /// Crea una nueva orden de compra en el sistema, lo que implica que una determinada orden de venta ha sido aprobada /// Por cada orden de venta o pedido debera crearse una orden de compra que la respalde /// </summary> /// <param name="ordenVenta">Orden de venta necesaria para poder crear la orden de compra</param> public void Crear(OrdenVenta ordenVenta) { if (ordenVenta == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaNull); } if (ordenVenta.Comensales <= 0) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaSinComensales); } Datos.OrdenCompra ordenCompraDAL = new Datos.OrdenCompra(); Dictionary <string, Datos.ItemOrdenCompra> itemsDALPorIngrediente = new Dictionary <string, Datos.ItemOrdenCompra>(); foreach (Receta receta in ordenVenta.Recetas) { foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.ItemOrdenCompra itemOrdenCompraDAL; Ingrediente ingrediente = ingredienteReceta.Ingrediente; if (ingredienteReceta.Cantidad <= 0) { throw new OBMCateringException(string.Format(Resources.OrdenesCompraBL_Validaciones_RecetaSinIngredientes, ingrediente.Nombre, receta.Nombre)); } decimal cantidad = ingredienteReceta.Cantidad * ordenVenta.Comensales; if (itemsDALPorIngrediente.ContainsKey(ingrediente.Nombre)) { itemOrdenCompraDAL = itemsDALPorIngrediente[ingrediente.Nombre]; itemOrdenCompraDAL.Cantidad = itemOrdenCompraDAL.Cantidad + cantidad; } else { itemOrdenCompraDAL = new Datos.ItemOrdenCompra(); Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingrediente.Nombre); if (ingredienteDAL == null) { throw new OBMCateringException(string.Format(Resources.OrdenesCompraBL_Validaciones_IngredienteInvalido, ingrediente.Nombre, receta.Nombre)); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.UnidadMedida unidadDAL = dalRecetas.ObtenerUnidad(ingredienteReceta.Unidad.ToString()); if (unidadDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_UnidadMedidaInvalida, ingredienteReceta.Unidad)); } itemOrdenCompraDAL.Ingrediente = ingredienteDAL; itemOrdenCompraDAL.Cantidad = cantidad; itemOrdenCompraDAL.Unidad = unidadDAL; } itemsDALPorIngrediente[ingrediente.Nombre] = itemOrdenCompraDAL; } } Datos.OrdenesVentaDAL dalOrdenesVenta = dal.ObtenerOrdenesVentaDAL(); Datos.OrdenVenta ordenVentaDAL = dalOrdenesVenta.Obtener(ordenVenta.Id); if (ordenVentaDAL == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaInvalida); } Datos.OrdenesCompraDAL dalOrdenesCompra = dal.ObtenerOrdenesCompraDAL(); Datos.EstadoOrdenCompra estadoDAL = dalOrdenesCompra.ObtenerEstado(EstadoOrdenCompra.Generada.ToString()); ordenCompraDAL.Fecha = DateTime.Now; ordenCompraDAL.Estado = estadoDAL; ordenCompraDAL.OrdenVenta = ordenVentaDAL; foreach (Datos.ItemOrdenCompra itemOrdenCompra in itemsDALPorIngrediente.Values) { ordenCompraDAL.ItemsOrdenesCompra.Add(itemOrdenCompra); } dalOrdenesCompra.Crear(ordenCompraDAL); dal.Guardar(); }