public virtual async Task <CartAggregate> ChangeItemQuantityAsync(ItemQtyAdjustment qtyAdjustment) { EnsureCartExists(); var validationResult = await new ItemQtyAdjustmentValidator(this).ValidateAsync(qtyAdjustment, ruleSet: ValidationRuleSet); if (!validationResult.IsValid) { ValidationErrors.AddRange(validationResult.Errors); } var lineItem = Cart.Items.FirstOrDefault(i => i.Id == qtyAdjustment.LineItemId); if (lineItem != null) { var salePrice = qtyAdjustment.CartProduct.Price.GetTierPrice(qtyAdjustment.NewQuantity).Price; if (salePrice != 0) { lineItem.SalePrice = salePrice.Amount; } //List price should be always greater or equals sale price because it may cause incorrect totals calculation lineItem.ListPrice = lineItem.ListPrice < lineItem.SalePrice ? lineItem.SalePrice : lineItem.ListPrice; lineItem.Quantity = qtyAdjustment.NewQuantity; } return(this); }
public virtual async Task <CartAggregate> ChangeItemQuantityAsync(ItemQtyAdjustment qtyAdjustment) { EnsureCartExists(); var validationResult = await AbstractTypeFactory <ItemQtyAdjustmentValidator> .TryCreateInstance().ValidateAsync(qtyAdjustment, options => options.IncludeRuleSets(ValidationRuleSet)); if (!validationResult.IsValid) { ValidationErrors.AddRange(validationResult.Errors); } var lineItem = Cart.Items.FirstOrDefault(i => i.Id == qtyAdjustment.LineItemId); if (lineItem != null) { SetLineItemTierPrice(qtyAdjustment.CartProduct.Price, qtyAdjustment.NewQuantity, lineItem); lineItem.Quantity = qtyAdjustment.NewQuantity; } return(this); }