/// <summary> /// Calcula el precio total de una receta, que consta de consultar cada ingrediente de la receta en el listado /// de precios y calcular cuanto vale la cantidad que lleva ese ingrediente dentro de la receta /// El precio del ingrediente en el listado de precios tiene asignada una cantidad y unidad, que /// no necesariamente sera la misma que lleve la receta a preparar /// </summary> /// <param name="receta">Receta a calcular su precio</param> /// <returns>Precio total de la receta</returns> public decimal CalularPrecio(Receta receta) { if (receta == null) { throw new OBMCateringException(Resources.BL_Validaciones_RecetaNull); } decimal precioTotal = 0m; foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Ingrediente ingrediente = ingredienteReceta.Ingrediente; PrecioIngrediente precioIngrediente = preciosIngredientesBL.Obtener(ingrediente); if (precioIngrediente.Precio != null && ingredienteReceta.Unidad == precioIngrediente.Unidad) { //Regla de tres simple decimal precio = (ingredienteReceta.Cantidad * precioIngrediente.Precio.Value) / precioIngrediente.Cantidad.Value; precioTotal = precioTotal + precio; } } return(precioTotal); }
internal ItemOrdenCompra ObtenerItem(Datos.ItemOrdenCompra itemDAL) { Ingrediente ingrediente = ingredientesBL.Obtener(itemDAL.Ingrediente); UnidadMedida unidad = (UnidadMedida)Enum.Parse(typeof(UnidadMedida), itemDAL.Unidad.Unidad); ItemOrdenCompra item = new ItemOrdenCompra { Id = itemDAL.ID, Ingrediente = ingrediente, Cantidad = itemDAL.Cantidad, Unidad = unidad }; return(item); }
/// <summary> /// Obtiene el listado completo de ingredientes existentes en el sistema /// </summary> /// <returns>Listado de ingredientes</returns> public IEnumerable <Ingrediente> Obtener() { Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); IEnumerable <Datos.Ingrediente> ingredientesDAL = dalIngredientes.Obtener(); List <Ingrediente> ingredientes = new List <Ingrediente>(); foreach (Datos.Ingrediente ingredienteDAL in ingredientesDAL) { Ingrediente ingrediente = Obtener(ingredienteDAL); ingredientes.Add(ingrediente); } return(ingredientes); }
Datos.IngredienteReceta BuscarIngredienteReceta(Ingrediente ingrediente, Datos.Receta recetaDAL) { Datos.IngredienteReceta resultado = null; foreach (Datos.IngredienteReceta ingredienteRecetaDAL in recetaDAL.Ingredientes) { if (ingredienteRecetaDAL.Ingrediente.Nombre == ingrediente.Nombre) { resultado = ingredienteRecetaDAL; break; } } return(resultado); }
Datos.Ingrediente PrepararIngrediente(Ingrediente ingrediente) { Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingrediente.Nombre); if (ingredienteDAL == null) { ingredienteDAL = new Datos.Ingrediente { Nombre = ingrediente.Nombre, Descripcion = ingrediente.Descripcion }; } return(ingredienteDAL); }
PrecioIngrediente Obtener(Datos.PrecioIngrediente precioIngredienteDAL) { UnidadMedida unidad = (UnidadMedida)Enum.Parse(typeof(UnidadMedida), precioIngredienteDAL.Unidad.Unidad); Ingrediente ingrediente = new Ingrediente { Id = precioIngredienteDAL.Ingrediente.ID, Nombre = precioIngredienteDAL.Ingrediente.Nombre, Descripcion = precioIngredienteDAL.Ingrediente.Descripcion }; return(new PrecioIngrediente { Id = precioIngredienteDAL.ID, Ingrediente = ingrediente, Precio = precioIngredienteDAL.Precio, Cantidad = precioIngredienteDAL.Cantidad, Unidad = unidad }); }
/// <summary> /// Obtiene un precio en particular para un ingrediente dado /// </summary> /// <param name="ingrediente">Ingrediente para obtener su precio y caracteristicas</param> /// <returns>Entrada en el listado de precios para ese ingrediente</returns> public PrecioIngrediente Obtener(Ingrediente ingrediente) { if (ingrediente == null) { throw new OBMCateringException(Resources.BL_Validaciones_IngredienteNull); } Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingrediente.Nombre); if (ingredienteDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_IngredienteInvalido, ingrediente.Nombre)); } Datos.PreciosIngredientesDAL dalPreciosIngredientes = dal.ObtenerPreciosIngredientesDAL(); Datos.PrecioIngrediente precioIngredienteDAL = dalPreciosIngredientes.Obtener(ingredienteDAL); return(Obtener(precioIngredienteDAL)); }
/// <summary> /// Obtiene todas las recetas que contengan determinado ingrediente en su composicion /// </summary> /// <param name="ingrediente">Ingrediente a buscar dentro de las recetas</param> /// <returns>Listado de recetas</returns> public IEnumerable <Receta> Obtener(Ingrediente ingrediente) { if (ingrediente == null) { throw new OBMCateringException(Resources.BL_Validaciones_IngredienteNull); } Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingrediente.Nombre); if (ingredienteDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_IngredienteInvalido, ingrediente.Nombre)); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); IEnumerable <Datos.Receta> recetasDAL = dalRecetas.Obtener(ingredienteDAL); return(Obtener(recetasDAL)); }
/// <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(); }