Exemple #1
0
 public ListaPreciosBlisterViewModel(ListaPrecioBlister listaPrecioBlister)
 {
     ID         = listaPrecioBlister.ID;
     ProductoID = listaPrecioBlister.ProductoID;
     Gramos     = listaPrecioBlister.Gramos;
     Precio     = listaPrecioBlister.Precio;
 }
        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));
            }
        }
Exemple #3
0
 public void UpdateListaPrecioBlister(ListaPrecioBlister listaPrecioBlister)
 {
     listaPrecioBlisterRP.Update(listaPrecioBlister);
     listaPrecioBlisterRP.Save();
 }
Exemple #4
0
 public void RemoveListaPrecioBlister(ListaPrecioBlister listaPrecioBlister)
 {
     listaPrecioBlisterRP.Delete(listaPrecioBlister);
     listaPrecioBlisterRP.Save();
 }
Exemple #5
0
 public void AddListaPrecioBlister(ListaPrecioBlister listaPrecioBlister)
 {
     listaPrecioBlisterRP.Add(listaPrecioBlister);
     listaPrecioBlisterRP.Save();
 }