コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }