2017-09-15 6 views
0

장바구니의 Virto Commerce에서 프로모션을하고 싶습니다. 나의 예에서는 고객이 적어도 800 SEK를 구입하면 200 SEK로 카트를 할인하고 싶다. 나의 예에서 VAT/GST는 25 %이다.Virto Commerce Marketing Module의 장바구니 할인

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 SEK의 광고 할인은 세금을 포함하여 600 SEK의 총 가격에 직면하게됩니다. This is an img of my promotion in the Marketing Module


는 어떤 방법으로 결여되어있는 그러니 내가 미스가 승진 또는 프로모션 점포 코드의 내 구현을 구성했습니다 카트 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) 

에서 다음을 나에게 준다 .

답변

0

현재 VC 주문 소계 정책에 단지 하나 개의 할인 혜택을 구현 : 할인은 카트 소계, 세금 계산 이미 적용된 적용되며, 세금 합계에 반영됩니다

. 따라서 카트 부분에 적용되는 할인은 세금 후에 발생합니다. 예를 들어 장바구니 부분 액수가 100 달러이고 15 달러가 부분 액인 경우 10 %의 장바구니 할인은 총 105 달러 ($ 100 소계 - 10 달러 할인 + 원래 $ 100에 대한 15 달러 세금)가됩니다.

그러나 우리는이 계산 과정을보다 유연하고 확장 가능한 계산 정책을 지원할 수 있도록 합계 계산을 변경하려고합니다.

당신은 당신의 확장 모듈 내에서 약간의 사용자 정의에 의해 당신이 원하는 것을 달성 할 수

는 :

  1. ShoppingCart와 동일한 코드로 코드 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 유형을 다음과 같이 ShopingCart 클래스를 확장 위

  3. ShoopingCart2CustomerOrder2을에 등록하십시오.

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

  • 업데이트 DEV에서 최신 버전으로 상점 당신의 상점에서

  • 수정 ShopingCart 클래스 (이는 정상 작동 https://github.com/VirtoCommerce/vc-storefront/commit/2464548c171c811a9d63edba0bdf6af93e8c902b에 필요한 커밋)

      - 이전에 새 ShoppingCart2 유형에서 작성한 것과 동일한 변경 사항을 추가하십시오.

    원하는 동작을 얻으 Checkout