/// <summary>
        /// Actualiza la informacion de una entrada en el listado de precios
        /// Pueden actualizarse el precio del ingrediente, su cantidad o su unidad
        /// </summary>
        /// <param name="precioIngrediente">Unidad dentro la lista de precios a actualizar</param>
        public void Actualizar(PrecioIngrediente precioIngrediente)
        {
            ValidarPrecioIngrediente(precioIngrediente);

            Datos.PreciosIngredientesDAL dalPreciosIngredientes = dal.ObtenerPreciosIngredientesDAL();
            Datos.PrecioIngrediente      precioIngredienteDAL   = dalPreciosIngredientes.Obtener(precioIngrediente.Id);

            if (precioIngredienteDAL == null)
            {
                throw new OBMCateringException(Resources.PreciosIngredientesBL_Validaciones_ItemInvalido);
            }

            Datos.RecetasDAL   dalRecetas = dal.ObtenerRecetasDAL();
            Datos.UnidadMedida unidadDAL  = dalRecetas.ObtenerUnidad(precioIngrediente.Unidad.ToString());

            if (unidadDAL == null)
            {
                throw new OBMCateringException(string.Format(Resources.BL_Validaciones_UnidadMedidaInvalida, precioIngrediente.Unidad));
            }

            precioIngredienteDAL.Precio   = precioIngrediente.Precio;
            precioIngredienteDAL.Cantidad = precioIngrediente.Cantidad;
            precioIngredienteDAL.Unidad   = unidadDAL;

            dalPreciosIngredientes.Actualizar(precioIngredienteDAL);
            dal.Guardar();
        }
Esempio n. 2
0
        /// <summary>
        /// Obtiene el listado de recetas segun su estado
        /// </summary>
        /// <param name="estado">Estado de las recetas a obtener</param>
        /// <returns>Listado de recetas</returns>
        public IEnumerable <Receta> Obtener(EstadoReceta estado)
        {
            Datos.RecetasDAL           dalRecetas = dal.ObtenerRecetasDAL();
            IEnumerable <Datos.Receta> recetasDAL = dalRecetas.Obtener(estado.ToString());

            return(Obtener(recetasDAL));
        }
Esempio n. 3
0
        /// <summary>
        /// Obtiene el listado completo de recetas del sistema
        /// </summary>
        /// <returns>Listado de recetas</returns>
        public IEnumerable <Receta> Obtener()
        {
            Datos.RecetasDAL           dalRecetas = dal.ObtenerRecetasDAL();
            IEnumerable <Datos.Receta> recetasDAL = dalRecetas.Obtener();

            return(Obtener(recetasDAL));
        }
Esempio n. 4
0
        /// <summary>
        /// Determina si existe una receta segun su nombre
        /// </summary>
        /// <param name="nombre">Nombre de la receta a buscar</param>
        /// <returns>Valor que determina si la receta fue encontrada o no</returns>
        public bool Existe(string nombre)
        {
            if (string.IsNullOrEmpty(nombre))
            {
                throw new OBMCateringException(Resources.RecetasBL_Validaciones_NombreNull);
            }

            Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL();
            Datos.Receta     recetaDAL  = dalRecetas.ObtenerPorNombre(nombre);

            return(recetaDAL != null);
        }
Esempio n. 5
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();
        }
Esempio n. 6
0
        /// <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();
        }
Esempio n. 7
0
        /// <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));
        }
Esempio n. 8
0
        /// <summary>
        /// Analiza todas las recetas cuyo estado es "Sin Precio",
        /// y recorre nuevamente todos sus ingredientes para saber si ya fueron actualizados y si se les ha asignado un precio
        /// A cada receta que ahora contenga un precio calculable, se le actualizara su estado a "Activa"
        /// Mediante este metodo se activaran las recetas que se encontraban inactivas por falta de precio calculable
        /// </summary>
        public void ActualizarRecetasSinPrecio()
        {
            Datos.RecetasDAL     dalRecetas       = dal.ObtenerRecetasDAL();
            IEnumerable <Receta> recetasSinPrecio = Obtener(EstadoReceta.SinPrecio);

            foreach (Receta receta in recetasSinPrecio)
            {
                bool preciosFaltantes = preciosIngredientesBL.HayFaltantes(receta);

                if (!preciosFaltantes)
                {
                    Datos.Receta       recetaDAL = dalRecetas.Obtener(receta.Id);
                    Datos.EstadoReceta estadoDAL = dalRecetas.ObtenerEstado(EstadoReceta.Activa.ToString());

                    recetaDAL.Estado = estadoDAL;
                    dalRecetas.Actualizar(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. 10
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);
            }
        }
Esempio n. 11
0
        /// <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();
        }