促销优惠券的应用范围超过了redemptionQuantityLimit和redemptionQuantityLimitPerUser

2020-09-11 03:40发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


根据凭证文档,凭证的兑换不得超过redemptionQuantityLimit或redemptionQuantityLimitPerUser。 但它没有发生。 优惠券的应用次数超过了两个属性中分配的次数。

我已经调试了代码,发现凭证服务中有两种方法可以兑换凭证。

  1)公共布尔redeemVoucher(String voucherCode,CartModel cart)
          引发JaloPriceFactoryException
        {
          saveIfModified(购物车);
          布尔值已更改= VoucherManager.getInstance()。redeemVoucher(voucherCode,getCart(cart));
          如果(已更改)
          {
            刷新(购物车);
          }
          返回更改;
        }
     
     
    2)public VoucherInvalidationModel redeemVoucher(String voucherCode,OrderModel order)
     
        {
      saveIfModified(order);
     
     
      VoucherInvalidation voucherInvalidation = VoucherManager.getInstance()。redeemVoucher(voucherCode,getOrder(order));
     
          如果(voucherInvalidation == null)
          {
            返回null;
          }
     
          刷新(顺序);
          return(((VoucherInvalidationModel)getModelService()。get(voucherInvalidation)));返回
        }

  

在Wiki中,提到了在应用凭证时,应在VoucherInvalidation表中创建带有促销代码,订购代码和用户的条目。 仅在调用第二个方法时才创建。 但是以某种方式没有调用此方法。 总是调用第一种方法,因此无法检查用户是否使用了给定次数的凭证。

请帮助我。 为什么要这样实现 尽管我们具有将凭证限制为给定次数的属性,但为何凭证无法按预期运行。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


根据凭证文档,凭证的兑换不得超过redemptionQuantityLimit或redemptionQuantityLimitPerUser。 但它没有发生。 优惠券的应用次数超过了两个属性中分配的次数。

我已经调试了代码,发现凭证服务中有两种方法可以兑换凭证。

  1)公共布尔redeemVoucher(String voucherCode,CartModel cart)
          引发JaloPriceFactoryException
        {
          saveIfModified(购物车);
          布尔值已更改= VoucherManager.getInstance()。redeemVoucher(voucherCode,getCart(cart));
          如果(已更改)
          {
            刷新(购物车);
          }
          返回更改;
        }
     
     
    2)public VoucherInvalidationModel redeemVoucher(String voucherCode,OrderModel order)
     
        {
      saveIfModified(order);
     
     
      VoucherInvalidation voucherInvalidation = VoucherManager.getInstance()。redeemVoucher(voucherCode,getOrder(order));
     
          如果(voucherInvalidation == null)
          {
            返回null;
          }
     
          刷新(顺序);
          return(((VoucherInvalidationModel)getModelService()。get(voucherInvalidation)));返回
        }

  

在Wiki中,提到了在应用凭证时,应在VoucherInvalidation表中创建带有促销代码,订购代码和用户的条目。 仅在调用第二个方法时才创建。 但是以某种方式没有调用此方法。 总是调用第一种方法,因此无法检查用户是否使用了给定次数的凭证。

请帮助我。 为什么要这样实现 尽管我们具有将凭证限制为给定次数的属性,但为何凭证无法按预期运行。

付费偷看设置
发送
6条回答
Violet凡
1楼-- · 2020-09-11 04:10

嗨Bhaskar,

如果您检查DefaultVoucherRedemptionPlaceOrderMethodHook的代码,则会在beforeSubmitOrder()之前看到 getVoucherService()。redeemVoucher(voucherCode,orderModel); 方法被调用。

有关更多信息,请参考此处

https://help.hybris.com/1808/hcd/8c7ff2918669101483ddd711fc3f5df5.html

  public boolean isReservable(String aVoucherCode,User user)
  {
      返回getInvalidations(aVoucherCode,用户).size() 

确定优惠券是否可预订,并在兑换促销优惠券(检查其串行优惠券)的redeemVoucher(字符串优惠券代码,CartModel购物车)时调用

  public boolean isReservable(最终字符串aVoucherCode,最终用户){
                返回this.getInvalidations(aVoucherCode).isEmpty();
              }
  

即。 对于serialVoucher,该优惠券只能为每个用户应用一次,但对于促销优惠券,优惠券的兑换时间是可配置的。

希望这对您有所帮助。

谢谢

蓋茨
2楼-- · 2020-09-11 03:54

关注此线程。

暮风yp
3楼-- · 2020-09-11 03:55

Himanshu,谢谢您的回复。 是的,你是对的。 对于促销代金券,可以配置代金券的兑换次数。 但是,尽管我同时配置了这两个属性,但仍无法正常工作。

redemptionQuantityLimit和redemptionQuantityLimitPerUser

  return getInvalidations(aVoucherCode,user).size() 

首先要验证您上面提到的上述条件。 每当正确兑换凭证时,都应创建并保存VoucherInvalidation对象。 创建该实例的代码无处可寻。

请让我知道这对您的工作情况。

吹牛啤
4楼-- · 2020-09-11 03:59

Bhaskar,您好,

您需要签入voucher.class,此代码段创建了失效对象。

  public VoucherInvalidation兑换(最终字符串aVoucherCode,最终订单anOrder){
              如果(!this.checkVoucherCode(aVoucherCode)){
     
                  返回null;
              }
               VoucherInvalidation无效= this.getInvalidation(aVoucherCode,anOrder);
              if(invalidation == null){
     
                   无效= this.reserve(aVoucherCode,anOrder);
               }
             if(invalidation == null ||" confirmed" .equals(invalidation.getStatus())){
     
                 返回null;
              }
              invalidation.setStatus(" confirmed");
              返回无效;
      
       }
   公共VoucherInvalidation储备金(最终字符串aVoucherCode,最终订单anOrder){
          如果(this.checkVoucherCode(aVoucherCode)&& this.isReservable(aVoucherCode,(AbstractOrder)anOrder)){
 
              anOrder.addDiscount((Discount)this);
             返回this.createVoucherInvalidation(aVoucherCode,anOrder);
          }
          返回null;
 
      }

  

因此,无效对象仅在创建订单时创建。 下订单后,将创建无效对象,并且如果无法保留优惠券,则限制用户将优惠券添加到购物车中。

希望这会有所帮助。

谢谢

SKY徐
5楼-- · 2020-09-11 04:16

嗨,Himanshu,这是我在最初的问题中提到的内容。 该方法可用。 但是在扩展程序代码的任何地方都不会调用它们。 那么您如何限制凭证兑换呢?

我的问题是我创建了每个用户限制为3的凭证。 但兑换限制无效。

太Q了
6楼-- · 2020-09-11 04:09

您好Bhaskar,您是否已解决此问题/解决此问题,同样的问题,将限制设置为1但可以使用1个以上。

一周热门 更多>