internal OrdenVenta Obtener(Datos.OrdenVenta ordenVentaDAL) { List <Receta> recetas = new List <Receta>(); foreach (Datos.Receta recetaDAL in ordenVentaDAL.Recetas) { Receta receta = recetasBL.Obtener(recetaDAL); recetas.Add(receta); } Cliente cliente = clientesBL.Obtener(ordenVentaDAL.Cliente); return(new OrdenVenta { Id = ordenVentaDAL.ID, FechaInicio = ordenVentaDAL.FechaInicio, FechaFin = ordenVentaDAL.FechaFin, Comensales = ordenVentaDAL.Comensales, Precio = ordenVentaDAL.Precio, Aprobada = ordenVentaDAL.Aprobada, Cliente = cliente, Recetas = recetas }); }
/// <summary> /// Determina si dentro de una receta hay ingredientes a los que le falta asignar el precio /// Esto indica si una receta esta apta para utilizarse o debe quedar inactiva /// </summary> /// <param name="receta">Receta a consultar</param> /// <returns>Valor que indica si hay ingredientes con faltante de precio</returns> public bool HayFaltantes(Receta receta) { if (receta == null) { throw new OBMCateringException(Resources.BL_Validaciones_RecetaNull); } bool faltantes = false; Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.PreciosIngredientesDAL dalPreciosIngredientes = dal.ObtenerPreciosIngredientesDAL(); foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingredienteReceta.Ingrediente.Nombre); if (ingredienteDAL == null) { faltantes = true; break; } Datos.PrecioIngrediente precioIngredienteDAL = dalPreciosIngredientes.Obtener(ingredienteDAL); if (precioIngredienteDAL == null || precioIngredienteDAL.Precio == null) { faltantes = true; break; } } return(faltantes); }
void ValidarReceta(Receta receta) { if (receta == null) { throw new OBMCateringException(Resources.BL_Validaciones_RecetaNull); } }
/// <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); }
IEnumerable <Receta> Obtener(IEnumerable <Datos.Receta> recetasDAL) { List <Receta> recetas = new List <Receta>(); foreach (Datos.Receta recetaDAL in recetasDAL) { Receta receta = Obtener(recetaDAL); recetas.Add(receta); } return(recetas); }
/// <summary> /// Crea una nueva receta dentro del sistema /// </summary> /// <param name="receta">Receta a crear</param> public void Crear(Receta receta) { ValidarReceta(receta); Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.EstadoReceta estadoDAL = dalRecetas.ObtenerEstado(EstadoReceta.SinIngredientes.ToString()); Datos.Receta recetaDAL = new Datos.Receta { Nombre = receta.Nombre, Detalle = receta.Detalle, Estado = estadoDAL }; dalRecetas.Crear(recetaDAL); dal.Guardar(); }
/// <summary> /// Crea entradas en el listado de precios para los ingredientes que aun no figuren en el mismo, /// es decir para nuevos ingredientes de una receta. /// Las entradas se crearan con el precio como faltante, ya que solo los usuarios autorizados podran asignar precios a los ingredientes /// </summary> /// <param name="receta">Receta para analizar sus ingredientes y crear precios faltantes si es necesario</param> public void CrearFaltantes(Receta receta) { if (receta == null) { throw new OBMCateringException(Resources.BL_Validaciones_RecetaNull); } Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.PreciosIngredientesDAL dalPreciosIngredientes = dal.ObtenerPreciosIngredientesDAL(); foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingredienteReceta.Ingrediente.Nombre); Datos.PrecioIngrediente precioIngredienteDAL = dalPreciosIngredientes.Obtener(ingredienteDAL); if (precioIngredienteDAL == null) { Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.UnidadMedida unidadMedidaDAL = dalRecetas.ObtenerUnidad(ingredienteReceta.Unidad.ToString()); if (unidadMedidaDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_UnidadMedidaInvalida, ingredienteReceta.Unidad)); } precioIngredienteDAL = new Datos.PrecioIngrediente { Ingrediente = ingredienteDAL, Unidad = unidadMedidaDAL }; dalPreciosIngredientes.Crear(precioIngredienteDAL); } } dal.Guardar(); }
/// <summary> /// Actualiza la informacion de una receta dentro del sistema /// Los datos que podran actualizarse son su estado, sus detalles o informacion y sus ingredientes /// </summary> /// <param name="receta">Receta a actualizar</param> public void Actualizar(Receta receta) { ValidarReceta(receta); if (receta.Ingredientes == null || receta.Ingredientes.Count == 0) { throw new OBMCateringException(Resources.RecetasBL_Validaciones_SinIngredientes); } EstadoReceta estado; if (receta.Ingredientes.Count == 0) { estado = EstadoReceta.SinIngredientes; } else { bool preciosFaltantes = preciosIngredientesBL.HayFaltantes(receta); if (preciosFaltantes) { estado = EstadoReceta.SinPrecio; } else { estado = EstadoReceta.Activa; } } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.Receta recetaDAL = dalRecetas.ObtenerPorNombre(receta.Nombre); if (recetaDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_RecetaInvalida, receta.Nombre)); } Datos.EstadoReceta estadoDAL = dalRecetas.ObtenerEstado(estado.ToString()); if (estadoDAL == null) { throw new OBMCateringException(string.Format(Resources.OrdenesCompraBL_Validaciones_EstadoInvalido, estado)); } recetaDAL.Detalle = receta.Detalle; recetaDAL.Estado = estadoDAL; foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.IngredienteReceta ingredienteRecetaDAL = BuscarIngredienteReceta(ingredienteReceta.Ingrediente, recetaDAL); Datos.UnidadMedida unidadMedidaDAL = dalRecetas.ObtenerUnidad(ingredienteReceta.Unidad.ToString()); if (ingredienteRecetaDAL == null) { Datos.Ingrediente ingredienteDAL = PrepararIngrediente(ingredienteReceta.Ingrediente); ingredienteRecetaDAL = new Datos.IngredienteReceta { Ingrediente = ingredienteDAL, Cantidad = ingredienteReceta.Cantidad, Unidad = unidadMedidaDAL }; recetaDAL.Ingredientes.Add(ingredienteRecetaDAL); } else { ingredienteRecetaDAL.Cantidad = ingredienteReceta.Cantidad; ingredienteRecetaDAL.Unidad = unidadMedidaDAL; } } dalRecetas.Actualizar(recetaDAL); dal.Guardar(); if (estado == EstadoReceta.SinPrecio) { preciosIngredientesBL.CrearFaltantes(receta); } }