Virto Commerce营销模块的购物车折扣

时间:2017-09-15 11:26:37

标签: virtocommerce

我想在购物车上进行Virto Commerce的促销活动。在我的例子中,如果客户购买至少800瑞典克朗,我想用200瑞典克朗折扣购物车,我的例子中的增值税/消费税是25%。

这是我正在寻找的效果:

Cart
subTotal:             640
subTotalWithTax:      800

discountAmount:       160
discountTotalWithTax: 200

total:                480
totalWithTax:         600

据我所知,营销模块仅支持在税前应用折扣的促销活动。在店面代码中发表评论:

ShoppingCart.cs#L390

        foreach (var reward in cartRewards)
        {
            //When a discount is applied to the cart subtotal, the tax calculation has already been applied, and is reflected in the tax subtotal.
            //Therefore, a discount applying to the cart subtotal will occur after tax.
            //For instance, if the cart subtotal is $100, and $15 is the tax subtotal, a cart - wide discount of 10 % will yield a total of $105($100 subtotal – $10 discount + $15 tax on the original $100).
            if (reward.IsValid)
            {
                var discount = reward.ToDiscountModel(ExtendedPriceTotal);
                Discounts.Add(discount);
                DiscountAmount = discount.Amount;
            }
        }

我想这在某些市场是常见的做法。但这是针对瑞典的B2C解决方案。 800 SEK购物车上的广告折扣200瑞典克朗应该使客户面临600瑞典克朗的总价格,包括税收。


This is an img of my promotion in the Marketing Module

这给了我关于Cart JSON的以下内容

Cart
subTotal:             640
subTotalWithTax:      800

discountAmount:       160
discountTotal:        160
discountTotalWithTax: 160

subTotalDiscount:     0
subTotalDiscountWithTax:0
discountTotalWithTax: 160

taxTotal:             160

total:                640
totalWithTax:         800  (Calculated. Not in standard JSON response)

所以要么我错过了配置促销,要么我的实施促销店面代码在某种程度上缺乏。

1 个答案:

答案 0 :(得分:0)

目前,VC只对订单小计政策实施一次折扣:

  

当对购物车小计应用折扣时,税额计算   已经应用,并反映在税收小计中。   因此,之后将发生适用于购物车小计的折扣   税。例如,如果购物车小计是100美元,那么15美元是税   小计,购物车折扣10%将产生总计105美元(100美元)   小计 - 10美元折扣+原价100美元的15美元税。)

但我们正在努力改变总计算,以使此流程更灵活,更可扩展,以支持任何计算政策。

您可以通过扩展模块中的一点自定义来实现您想要的目标:

  1. 使用以下代码扩展ShopingCart public class ShopingCart2: ShoppingCart {
    public decimal DiscountAmountWithTax { get { return DiscountAmount + DiscountAmount * TaxPercentRate; } }
    public override decimal TaxTotal { get { var result = base.TaxTotal; result -= DiscountAmountWithTax - DiscountAmount; return result; } }
    public override decimal DiscountTotalWithTax { get { var result = base.DiscountTotalWithTax; result += DiscountAmountWithTax - DiscountAmount; return result; } } }

  2. 使用与上面CustomerOrder相同的代码扩展域ShoppingCart类型

  3. ShoopingCart2
  4. 中注册CustomerOrder2AbstractTypeFactory

    AbstractTypeFactory<ShoppingCart>.OverrideType<ShoppingCart, ShoppingCart2>(); AbstractTypeFactory<CustomerOrder>.OverrideType<CustomerOrder, CustomerOrder2>();

    1. 将您的店面更新为dev的最新版本(正常工作所需的此提交https://github.com/VirtoCommerce/vc-storefront/commit/2464548c171c811a9d63edba0bdf6af93e8c902b

    2. 修改店面中的ShopingCart课程 - 添加您之前在新ShoppingCart2类型中所做的相同更改。

    3. 获得所需的行为 Checkout