Exemplo n.º 1
0
        //GET /api/producto/1
        public IHttpActionResult GetProducto(int id)
        {
            var producto = productoBL.GetProductoById(id);

            if (producto == null)
            {
                log.Error("Producto no encontrado con ID: " + id);
                return(NotFound());
            }

            return(Ok(Mapper.Map <Producto, ProductoDTO>(producto)));
        }
Exemplo n.º 2
0
        public ActionResult ReporteProductosProveedor(int productoID)
        {
            var producto = productoBL.GetProductoById(productoID);

            if (producto == null)
            {
                log.Error("Error al acceder a Producto con ID: " + productoID);
                return(View("Error"));
            }


            ViewBag.ProductoNombre = producto.Nombre;
            ViewBag.ProductoID     = producto.ID;

            return(View("Reportes\\ReporteProductosProveedor"));
        }
Exemplo n.º 3
0
        public IHttpActionResult CreateStock(StockDTO stock)
        {
            if (!ModelState.IsValid)
            {
                log.Error("Formulario con datos inexistentes o incorrectos.");
                return(BadRequest());
            }


            Producto     producto = productoBL.GetProductoById(stock.ProductoID);
            TipoDeUnidad tunidad  = tipoDeUnidadBL.GetTipoDeUnidadById(stock.TipoDeUnidadID);

            Stock stockIngresado = stockBL.ValidarStockProducto(stock.ProductoID, stock.TipoDeUnidadID);

            if (stockIngresado != null)
            {
                stockIngresado.Cantidad = stockIngresado.Cantidad + stock.Cantidad;
                stockBL.UpdateStock(stockIngresado);

                log.Info("Stock Actualizado satisfactoriamente. ID: " + stockIngresado.ID);
            }
            else
            {
                Stock stockNuevo = new Stock();

                stockNuevo.ProductoID           = stock.ProductoID;
                stockNuevo.TipoDeUnidadID       = stock.TipoDeUnidadID;
                stockNuevo.Cantidad             = stock.Cantidad;
                stockNuevo.ProductoAuxiliar     = producto.NombreAuxiliar;
                stockNuevo.TipoDeUnidadAuxiliar = tunidad.Nombre;

                stockBL.AddStock(stockNuevo);

                log.Info("Stock Agregado satisfactoriamente");
            }



            return(Ok());
        }
        public ActionResult CalcularStockYValorProductoAsync(int clienteID, int productoID, double cantidad, int tipoUnidadID, int counter)
        {
            try
            {
                double   importe;
                double   importeTotal;
                double   stockDisponible = 0;
                Producto prod            = productoBL.GetProductoById(productoID);

                if (prod == null)
                {
                    log.Error("El producto no fue encontrado en el sistema, con ID: " + productoID);
                    throw new Exception("El Producto no fue encontrado en el sistema.");
                }

                log.Info("Calculando Stock y Valor del Producto: " + prod.Nombre);

                //Consultamos Stock segun tipo de producto
                Stock productoSegunStock = new Stock();


                if (prod.EsMix && prod.EsBlister)
                {
                    //Operacion especifica para productos que son MIX y BLISTER a la vez
                    if (tipoUnidadID == Constants.TIPODEUNIDAD_MIX)
                    {
                        //Calculamos el Stock en base a la cantidad
                        var           productosMixStock = stockBL.GetListaProductosMixById(productoID);
                        List <double> prodsDisponible   = new List <double>();
                        int           contador          = 0;

                        foreach (var prodMix in productosMixStock)
                        {
                            productoSegunStock = stockBL.ValidarStockProducto(prodMix.ProductoDelMixId.GetValueOrDefault(), tipoUnidadID);

                            if (productoSegunStock == null)
                            {
                                throw new Exception("El Producto " + prodMix.ProductoDelMix.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");
                            }


                            for (double i = prodMix.Cantidad; i < productoSegunStock.Cantidad; i += prodMix.Cantidad)
                            {
                                if (productoSegunStock.Cantidad >= prodMix.Cantidad)
                                {
                                    contador++;
                                }
                            }

                            prodsDisponible.Add(contador);
                            contador = 0;
                        }

                        stockDisponible = prodsDisponible.Min();
                    }
                    else if (tipoUnidadID == Constants.TIPODEUNIDAD_BLISTER)
                    {
                        //Stock productoBlisterSegunStock = stockBL.ValidarStockProducto(productoID, tipoUnidadID);

                        //if (productoBlisterSegunStock == null)
                        //    throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");

                        //stockDisponible = productoBlisterSegunStock.Cantidad;

                        //Calculamos el Stock en base a la cantidad
                        var           productosBlisterMixStock = stockBL.GetListaProductosMixById(productoID);
                        List <double> prodsDisponible          = new List <double>();
                        int           contador = 0;

                        foreach (var prodMix in productosBlisterMixStock)
                        {
                            productoSegunStock = stockBL.ValidarStockProducto(prodMix.ProductoDelMixId.GetValueOrDefault(), Constants.TIPODEUNIDAD_MIX);

                            if (productoSegunStock == null)
                            {
                                throw new Exception("El Producto " + prodMix.ProductoDelMix.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");
                            }


                            for (double i = (prodMix.Cantidad / 10); i < productoSegunStock.Cantidad; i += (prodMix.Cantidad / 10))
                            {
                                contador++;
                            }

                            prodsDisponible.Add(contador);
                            contador = 0;
                        }

                        stockDisponible = prodsDisponible.Min();
                    }
                }
                else if (prod.EsMix)
                {
                    //Calculamos el Stock en base a la cantidad
                    var           productosMixStock = stockBL.GetListaProductosMixById(productoID);
                    List <double> prodsDisponible   = new List <double>();
                    int           contador          = 0;

                    foreach (var prodMix in productosMixStock)
                    {
                        productoSegunStock = stockBL.ValidarStockProducto(prodMix.ProductoDelMixId.GetValueOrDefault(), tipoUnidadID);

                        if (productoSegunStock == null)
                        {
                            throw new Exception("El Producto " + prodMix.ProductoDelMix.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");
                        }


                        for (double i = prodMix.Cantidad; i < productoSegunStock.Cantidad; i += prodMix.Cantidad)
                        {
                            if (productoSegunStock.Cantidad >= prodMix.Cantidad)
                            {
                                contador++;
                            }
                        }

                        prodsDisponible.Add(contador);
                        contador = 0;
                    }

                    stockDisponible = prodsDisponible.Min();
                }
                //else if (prod.EsBlister)
                //{
                //    Stock productoBlisterSegunStock = stockBL.ValidarStockProducto(productoID, tipoUnidadID);
                //    ListaPrecioBlister productoBlisterSegunLista = ventaMayoristaBL.CalcularImporteBlisterSegunCliente(productoID);

                //    if (productoBlisterSegunStock == null)
                //        throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");

                //    double cantidadEnKG = (Convert.ToDouble(productoBlisterSegunStock.Cantidad) / (Convert.ToDouble(productoBlisterSegunLista.Gramos) / 1000)); //Convierto a KG

                //    stockDisponible = cantidadEnKG;

                //}
                else
                {
                    //Stock para el productos comunes y blisters
                    if (tipoUnidadID == Constants.TIPODEUNIDAD_BLISTER)
                    {
                        //Producto Blister
                        Stock productoBlisterSegunStock = stockBL.ValidarStockProducto(productoID, Constants.PRECIO_X_KG);
                        ListaPrecioBlister productoBlisterSegunLista = ventaMayoristaBL.CalcularImporteBlisterSegunCliente(productoID);

                        if (productoBlisterSegunStock == null)
                        {
                            throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");
                        }

                        double cantidadEnKG = (Convert.ToDouble(productoBlisterSegunStock.Cantidad) / (Convert.ToDouble(productoBlisterSegunLista.Gramos) / 1000)); //Convierto a KG

                        stockDisponible = cantidadEnKG;
                    }
                    else
                    {
                        //Producto Comun
                        productoSegunStock = stockBL.ValidarStockProducto(productoID, tipoUnidadID);

                        if (productoSegunStock == null)
                        {
                            throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar.");
                        }


                        stockDisponible = productoSegunStock.Cantidad;
                    }
                }

                log.Info("Stock Disponible para el producto: " + stockDisponible);

                //Calculamos los Precios
                ListaPrecio productoSegunLista = ventaMayoristaBL.CalcularImporteSegunCliente(clienteID, productoID, cantidad);

                switch (tipoUnidadID)
                {
                case Constants.PRECIO_X_KG:

                    //Este caso aplica tanto para Productos comunes como para Productos MIX
                    if (Convert.ToDouble(productoSegunLista.PrecioXKG) > 0)
                    {
                        //Casos en la lista de precios donde hay precio x kg y precio por bulto en base a cantidad
                        //if (Convert.ToDouble(productoSegunLista.KGBultoCerrado) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado)))
                        if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        }
                        else if ((Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        }
                        else
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXKG);
                        }
                    }
                    else
                    {
                        //Casos en la lista de precios donde no hay precio x kg pero sí hay precio por bulto
                        //if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) > 0)
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        }
                        else if ((Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        }
                        else
                        {
                            throw new Exception("El Producto seleccionado no tiene precios correctamente cargados en el sistema, " +
                                                "por favor revisar la tabla de Lista de Precios antes de continuar");
                        }
                    }

                    break;

                case Constants.PRECIO_X_UNIDAD:

                    if (Convert.ToDouble(productoSegunLista.PrecioXUnidad) > 0)
                    {
                        //Casos en la lista de precios donde hay precio x unidad y precio por bulto en base a cantidad
                        if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        }
                        else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        }
                        else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) == 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado)))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        }
                        else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) == 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        }
                        else
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXUnidad);
                        }



                        //if (Convert.ToDouble(productoSegunLista.KGBultoCerrado) != 0 && (cantidad <= 9 && cantidad != 1))
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        //else if ((Convert.ToDouble(productoSegunLista.KGBultoCerrado10k) != 0 && (cantidad > 9)))
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        //else
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXUnidad);
                    }
                    else
                    {
                        //Casos en la lista de precios donde no hay precio x unidad pero sí hay precio por bulto
                        //if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) > 0)
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        //if (Convert.ToDouble(productoSegunLista.KGBultoCerrado) != 0 && (cantidad <= 9 && cantidad != 1))
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        //else if ((Convert.ToDouble(productoSegunLista.KGBultoCerrado10k) != 0 && (cantidad > 9)))
                        //    importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        }
                        else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        }
                        else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) == 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado)))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado);
                        }
                        else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) == 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))
                        {
                            importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k);
                        }
                        else
                        {
                            throw new Exception("El Producto seleccionado no tiene precios correctamente cargados en el sistema, " +
                                                "por favor revisar la tabla de Lista de Precios antes de continuar");
                        }
                    }

                    break;

                case Constants.TIPODEUNIDAD_BLISTER:

                    ListaPrecioBlister productoBlisterSegunLista = ventaMayoristaBL.CalcularImporteBlisterSegunCliente(productoID);

                    if (productoBlisterSegunLista == null)
                    {
                        throw new Exception("Error al cargar los precios de producto");
                    }

                    importe = Convert.ToDouble(productoBlisterSegunLista.Precio);

                    //Sumamos el importe total
                    importeTotal = importe * cantidad;

                    break;

                default:
                    importe = 0;
                    break;
                }

                //Sumamos el importe total
                importeTotal = importe * cantidad;

                log.Info("Importe del Producto: " + importeTotal);

                return(Json(new { Success = true, Importe = importe, ImporteTotal = importeTotal, Counter = counter, Stock = stockDisponible }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                log.Error("Se ha producido una excepción al calcular stock y valor del producto. Error: " + ex.Message);
                return(Json(new { Success = false, Error = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
Exemplo n.º 5
0
        public IHttpActionResult Compra(CompraDTO compraDTO)
        {
            if (!ModelState.IsValid)
            {
                log.Error("Formulario con datos incorrectos o insuficientes.");
                return(BadRequest());
            }

            //Proveedor proveedor = proveedorBL.GetProveedorById(compraDTO.ProveedorID);
            Proveedor proveedor = _UOWCompra.ProveedorRepository.GetByID(compraDTO.ProveedorID);

            if (proveedor == null)
            {
                log.Error("No se ha encontrado Proveedor con el ID: " + compraDTO.ProveedorID);
                return(BadRequest());
            }


            var compra = Mapper.Map <CompraDTO, Compra>(compraDTO);

            //Verificamos si ya se cargó una compra con el mismo NumeroCompra
            var ultimaCompra = _UOWCompra.CompraRepository
                               .GetAll()
                               .Max(p => p.NumeroCompra);

            if (compra.NumeroCompra <= ultimaCompra)
            {
                compra.NumeroCompra = ultimaCompra + 1;
            }

            //compraBL.AddCompra(compra);
            _UOWCompra.CompraRepository.Add(compra);

            //log.Info("Compra. Viejo Saldo Proveedor: " + compraDTO.Debe);

            //Actualizamos el Saldo en base a la Entrega de Efectivo
            // proveedor.Debe = compraDTO.Debe;
            //proveedorBL.UpdateProveedor(proveedor);
            proveedor.Debe        = compraDTO.Debe;
            proveedor.SaldoAfavor = compraDTO.SaldoAfavor;
            _UOWCompra.ProveedorRepository.Update(proveedor);

            log.Info("Compra. Nuevo Saldo Proveedor: " + proveedor.Debe);



            if (compra.ProductosXCompra.Count != 0)
            {
                //Una vez cargada la venta, actualizamos Stock
                foreach (var item in compra.ProductosXCompra)
                {
                    // Producto producto = productoBL.GetProductoById(item.ProductoID);


                    //Stock stock = stockBL.ValidarStockProducto(item.ProductoID, item.TipoDeUnidadID);
                    Stock stock = _UOWCompra.StockRepository.GetAll().Where(s => s.ProductoID == item.ProductoID && s.TipoDeUnidadID == item.TipoDeUnidadID).SingleOrDefault();

                    if (stock != null)
                    {
                        stock.Cantidad = stock.Cantidad + item.Cantidad;
                        //stockBL.UpdateStock(stock);
                        _UOWCompra.StockRepository.Update(stock);

                        log.Info("Stock actualizado o creado para producto con ID: " + item.ProductoID + ". Nueva Cantidad: " + stock.Cantidad);
                    }
                    else
                    {
                        Stock stockNuevo = new Stock();

                        Producto     prod    = productoBL.GetProductoById(item.ProductoID);
                        TipoDeUnidad tunidad = clasificacionBL.GetTipoDeUnidadById(item.TipoDeUnidadID);

                        stockNuevo.ProductoID           = item.ProductoID;
                        stockNuevo.TipoDeUnidadID       = item.TipoDeUnidadID;
                        stockNuevo.Cantidad             = item.Cantidad;
                        stockNuevo.ProductoAuxiliar     = prod.NombreAuxiliar;
                        stockNuevo.TipoDeUnidadAuxiliar = tunidad.Nombre;

                        //stockBL.AddStock(stockNuevo);
                        _UOWCompra.StockRepository.Add(stockNuevo);

                        log.Info("Stock actualizado o creado para producto con ID: " + item.ProductoID + ". Nueva Cantidad: " + stockNuevo.Cantidad);
                    }
                }
            }

            //Actualizamos valores
            _UOWCompra.Save();

            log.Info("Compra generada satisfactoriamente.");

            return(Ok());
        }