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

2020-09-11 03:40发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)根据凭证文档,凭证的兑换不得超过...

         点击此处--->   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条回答
吹牛啤
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;
 
      }

  

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

希望这会有所帮助。

谢谢

一周热门 更多>