Esempio n. 1
0
        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);
        }
Esempio n. 3
0
 void ValidarReceta(Receta receta)
 {
     if (receta == null)
     {
         throw new OBMCateringException(Resources.BL_Validaciones_RecetaNull);
     }
 }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        /// <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();
        }
Esempio n. 8
0
        /// <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);
            }
        }