In many business scenarios, calculating the Order Total involves complex logic, such as dynamic handling fees based on items, packages, or custom rules. The default IOrderGroupCalculator
implementation in DefaultOrderGroupCalculator
may not suffice for these advanced requirements.
DefaultOrderGroupCalculator
service computes following and custom class can override related method.
- Total – override GetTotal(IOrderGroup orderGroup)
- Subtotal – override GetSubTotal(IOrderGroup orderGroup)
- Handling total – override GetHandlingTotal(IOrderGroup orderGroup)
- Shipping subtotal – override GetShippingSubTotal(IOrderGroup orderGroup)
- Order discount total – override GetOrderDiscountTotal(IOrderGroup orderGroup)
- Tax total – override GetTaxTotal(IOrderGroup orderGroup)
- Order group total – override GetOrderGroupTotals(IOrderGroup orderGroup)
Extending the Calculation Logic
Instead of fully replacing IOrderGroupCalculator
, you can implement custom calculator based on DefaultOrderGroupCalculator and overriding the related calculation method to preserve built-in functionality and extending only the necessary parts.
Example: Custom Handling Fee Implementation
using EPiServer.Commerce.Order.Calculator;
using Mediachase.Commerce.Markets;
namespace Foundation.Customizations
{
public class OrderGroupCalculatorOverridingDefault : DefaultOrderGroupCalculator
{
public OrderGroupCalculatorOverridingDefault(IOrderFormCalculator orderFormCalculator, IReturnOrderFormCalculator returnOrderFormCalculator, IMarketService marketService) : base(orderFormCalculator, returnOrderFormCalculator, marketService)
{
}
protected override Money CalculateHandlingTotal(IOrderGroup orderGroup)
{
// Use Handling service to calculate correct handling fee
// var handlingFee - _handlingFeeCalculator.GetHandlingFee(orderGroup)
return new Money(10, orderGroup.Currency);
}
}
}
Register your new service in some intialization module
_services.AddSingleton<IOrderGroupCalculator, OrderGroupCalculatorOverridingDefault>();
Version: Optimizely Commerce Connect v14
References: https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-order-group-calculator