Kentico - 增加多个折扣

时间:2016-02-11 11:28:24

标签: kentico discounts

我正在使用Kentico版本8.2,并且我试图允许用户输入多个优惠券。在 ECommerceContext.CurrentShoppingCart 对象中,您可以设置 ShoppingCartCouponCode 。然后,将此优惠券添加到该对象的折扣集合中。

如果我将 ShoppingCartCouponCode 更改为其他内容,则会再次使用新折扣的单个项目重新创建 Discount 集合,并丢失旧折扣。

如果我存储了折扣集合的副本,则应用输入的新优惠券,然后将复制的集合附加到新生成的折扣集合,然后仅适用于几个折扣。我担心以这种方式这样做会在其他地方引起问题。

所以之前有没有人实现过这个功能,你会怎么做?

1 个答案:

答案 0 :(得分:2)

编辑:虽然看起来产品优惠券应该允许您这样做,但它们并不像您想象的那样工作。将产品优惠券应用于购物车时,COM_ShoppingCart中该购物车记录的ShoppingCartDiscountCouponID字段将更新为包含对COM_DiscountCoupon中折扣优惠券ID的外键引用。因此,任何时候肯定只有一个产品优惠券适用于购物车。

因此,如果特定产品在购物车中并且输入了正确的优惠券代码,它们似乎更像是标志,而不是对特定产品的折扣,它们允许您对整个购物车应用折扣。

然而,这并不意味着我们无法通过自定义来实现这一目标。我们的第一步是更改CMSModules中的ShoppingCartContent控件>电子商务>控件> ShoppingCart允许输入多个优惠券代码。这很容易。

第二部分是改变折扣和购物车的关联方式。这可能需要修改Kentico的系统表,因此这样做需要您自担风险。您基本上希望将外键引用与COM_ShoppignCart表分离,并在购物车和折扣之间创建多对多关系。就个人而言,我会单独留下系统表和API,只需创建另一个将CartID映射到DiscountID的自定义表(由于订单创建时将购物车数据应用于订单数据,因此您可能也必须对订单执行相同操作)。

最后一部分是改变实际计算折扣的方式。 之前我建议创建一个自定义的DiscountCouponInfoProvider。事实证明,您真正想要做的是创建一个自定义ShoppingCartInfoProvider并覆盖以下方法之一:

  • CalculateOrderDiscount()
  • CalculateItemsDiscount()

如果这个描述不够具体,我会道歉,但这将是对Kentico处理产品优惠券的重大修改,因此我没有太多时间来详细说明。但是,我估计至少需要几周才能完成。

旧回答

嗯,您可以创建代表两个或更多折扣组合的折扣,并在用户选择正确组合时应用折扣。

或者,如果我有时间构建它,我希望创建一个custom DiscountCouponInfoProvider来改变折扣的应用方式.M