public AddCartLineResult Execute( IUnitOfWork unitOfWork, AddCartLineParameter parameter, AddCartLineResult result) { if (!parameter.QtyOrdered.HasValue) { return(result); } OrderLine cartLine = result.CartLine; Decimal qtyOrdered1 = !this.cartSettings.ReplaceOnAdd || !(parameter.Cart.Status != "Requisition") ? parameter.QtyOrdered.Value + cartLine.QtyOrdered : parameter.QtyOrdered.Value; if (cartLine.Product.MinimumOrderQty > 0) { ProductUnitOfMeasure productUnitOfMeasure = cartLine.Product.ProductUnitOfMeasures.FirstOrDefault <ProductUnitOfMeasure>((Func <ProductUnitOfMeasure, bool>)(o => { if (o.UnitOfMeasure == cartLine.UnitOfMeasure) { return(o.QtyPerBaseUnitOfMeasure > Decimal.Zero); } return(false); })); Decimal num = productUnitOfMeasure != null ? productUnitOfMeasure.QtyPerBaseUnitOfMeasure : Decimal.One; if (qtyOrdered1 * num < (Decimal)cartLine.Product.MinimumOrderQty) { qtyOrdered1 = Decimal.Ceiling((Decimal)cartLine.Product.MinimumOrderQty / num); result.IsQtyAdjusted = true; } } Decimal qtyOrdered2 = this.roundingRulesProvider.ApplyRoundingRules(cartLine.Product, cartLine.UnitOfMeasure, qtyOrdered1); if (qtyOrdered2 != qtyOrdered1) { result.IsQtyAdjusted = true; } this.orderLineUtilities.SetQtyOrdered(cartLine, qtyOrdered2); // BUSA-1319: Limit Qty Per Product on PLP, PDP, QuickOrder, ReOrder, Saved Order var maxProductQty = cartLine.Product?.CustomProperties.Where(x => x.Name.EqualsIgnoreCase("maxProductQty")).Select(v => v.Value).FirstOrDefault() ?? "0"; if (!string.IsNullOrEmpty(maxProductQty) && Convert.ToInt32(maxProductQty) != 0 && cartLine.QtyOrdered > Convert.ToDecimal(maxProductQty)) { cartLine.QtyOrdered = Convert.ToDecimal(maxProductQty); result.IsQtyAdjusted = true; } // BUSA- 1319: END return(result); }
private Decimal GetQuantityToDecrement(OrderLine orderLine) { Decimal num1 = orderLine.QtyOrdered; if (!orderLine.Product.UnitOfMeasure.EqualsIgnoreCase(orderLine.UnitOfMeasure)) { ProductUnitOfMeasure productUnitOfMeasure = orderLine.Product.ProductUnitOfMeasures.FirstOrDefault <ProductUnitOfMeasure>((Func <ProductUnitOfMeasure, bool>)(o => o.UnitOfMeasure.Equals(orderLine.UnitOfMeasure, StringComparison.OrdinalIgnoreCase))); if (productUnitOfMeasure != null) { num1 *= productUnitOfMeasure.QtyPerBaseUnitOfMeasure; } } if (!this.inventorySettings.AllowNegativeQtyOnHand && this.inventorySettings.InventoryService != "RealTime") { ProductInventory inventory = this.inventoryPipeline.Value.GetQtyOnHand(new GetQtyOnHandParameter(false) { GetInventoryParameter = new GetInventoryParameter() { ProductIds = new List <Guid>() { orderLine.Product.Id }, Products = new List <Product>() { orderLine.Product } } }).Inventories[orderLine.Product.Id]; Decimal num2 = inventory != null ? inventory.QtyOnHand : Decimal.Zero; if (num2 < num1) { num1 = num2; } } if (!(num1 > Decimal.Zero)) { return(Decimal.Zero); } return(num1); }