0

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

这是我正在寻找的效果:

Cart
subTotal:             640
subTotalWithTax:      800

discountAmount:       160
discountTotalWithTax: 200

total:                480
totalWithTax:         600

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

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 瑞典克朗的购物车上宣传的 200 瑞典克朗折扣应使客户面临 600 瑞典克朗的总价(含税)。


这是我在营销模块中的宣传图片

这给了我关于购物车 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)

因此,要么我错过了配置促销活动,要么我对促销活动的店面代码的实现在某种程度上缺乏。

4

1 回答 1

0

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

将折扣应用于购物车小计时,已应用税收计算,并反映在税收小计中。因此,适用于购物车小计的折扣将在税后发生。例如,如果购物车小计为 100 美元,而税款小计为 15 美元,则购物车范围内 10% 的折扣将产生总计 105 美元(100 美元小计 - 10 美元折扣 + 15 美元原始 100 美元的税收)。

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

您可以通过在扩展模块中进行一些自定义来实现您想要的:

  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. 注册您的ShoopingCart2CustomerOrder2AbstractTypeFactory

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

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

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

获得所需的行为 查看

于 2017-09-18T13:22:16.647 回答