/// <summary> /// Tries to apply the discount line item reward /// </summary> /// <param name="validate"> /// The <see cref="ILineItemContainer"/> to validate against /// </param> /// <param name="customer"> /// The customer. /// </param> /// <returns> /// The <see cref="Attempt{ILinetItem}"/>. /// </returns> public override Attempt<ILineItem> TryAward(ILineItemContainer validate, ICustomerBase customer) { if (!IsConfigured) return Attempt<ILineItem>.Fail(new OfferRedemptionException("The coupon reward is not configured.")); if (MerchelloContext.Current == null) return Attempt<ILineItem>.Fail(new OfferRedemptionException("The MerchelloContext was null")); // apply to the entire collection excluding previously added discounts var qualifying = Extensions.CreateNewItemCacheLineItemContainer(validate.Items.Where(x => x.LineItemType != LineItemType.Discount)); var visitor = new CouponDiscountLineItemRewardVisitor(Amount, AdjustmentType); qualifying.Items.Accept(visitor); var qualifyingTotal = visitor.QualifyingTotal; var discount = this.AdjustmentType == Adjustment.Flat ? this.Amount > qualifyingTotal ? qualifyingTotal : this.Amount : qualifyingTotal * (this.Amount / 100); // Get the item template var discountLineItem = CreateTemplateDiscountLineItem(visitor.Audits); discountLineItem.ExtendedData.SetValue(Core.Constants.ExtendedDataKeys.CouponAdjustedProductPreTaxTotal, visitor.AdjustedProductPreTaxTotal.ToString(CultureInfo.InvariantCulture)); discountLineItem.ExtendedData.SetValue(Core.Constants.ExtendedDataKeys.CouponAdjustedProductTaxTotal, visitor.AdjustedTaxTotal.ToString(CultureInfo.InvariantCulture)); discountLineItem.Price = discount; return Attempt<ILineItem>.Succeed(discountLineItem); }
/// <summary> /// Tries to apply the discount line item reward /// </summary> /// <param name="validate"> /// The <see cref="ILineItemContainer"/> to validate against /// </param> /// <param name="customer"> /// The customer. /// </param> /// <returns> /// The <see cref="Attempt{ILinetItem}"/>. /// </returns> public override Attempt<ILineItem> TryAward(ILineItemContainer validate, ICustomerBase customer) { if (!IsConfigured) return Attempt<ILineItem>.Fail(new OfferRedemptionException("The coupon reward is not configured.")); if (MerchelloContext.Current == null) return Attempt<ILineItem>.Fail(new OfferRedemptionException("The MerchelloContext was null")); // apply to the entire collection excluding previously added discounts var qualifying = LineItemExtensions.CreateNewItemCacheLineItemContainer(validate.Items.Where(x => x.LineItemType != LineItemType.Discount)); var visitor = new CouponDiscountLineItemRewardVisitor(Amount, AdjustmentType); qualifying.Items.Accept(visitor); var qualifyingTotal = visitor.QualifyingTotal; var discount = this.AdjustmentType == Adjustment.Flat ? this.Amount > qualifyingTotal ? qualifyingTotal : this.Amount : qualifyingTotal * (this.Amount / 100); // Get the item template var discountLineItem = CreateTemplateDiscountLineItem(visitor.Audits); discountLineItem.ExtendedData.SetValue(Core.Constants.ExtendedDataKeys.CouponAdjustedProductPreTaxTotal, visitor.AdjustedProductPreTaxTotal.ToString(CultureInfo.InvariantCulture)); discountLineItem.ExtendedData.SetValue(Core.Constants.ExtendedDataKeys.CouponAdjustedProductTaxTotal, visitor.AdjustedTaxTotal.ToString(CultureInfo.InvariantCulture)); discountLineItem.Price = discount; return Attempt<ILineItem>.Succeed(discountLineItem); }