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);
        }
Example #2
0
        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);
        }