예제 #1
0
        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
            });
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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();
        }
예제 #5
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();
        }
예제 #6
0
        /// <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));
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
        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
            });
        }
예제 #9
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();
        }