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)); } }