Interface IOrderGroupCalculator
The calculator calculates totals on the order group.
Namespace: EPiServer.Commerce.Order
Assembly: Mediachase.Commerce.dll
Version: 12.17.2Syntax
public interface IOrderGroupCalculator
Examples
/// <summary>
/// Sample implementation of <see cref="IOrderGroupCalculator"/>.
/// </summary>
public class OrderGroupCalculatorSample : IOrderGroupCalculator
{
private readonly IOrderFormCalculator _orderFormCalculator;
private readonly IReturnOrderFormCalculator _returnOrderFormCalculator;
private readonly IMarketService _marketService;
public OrderGroupCalculatorSample(
IOrderFormCalculator orderFormCalculator,
IReturnOrderFormCalculator returnOrderFormCalculator,
IMarketService marketService)
{
_orderFormCalculator = orderFormCalculator;
_returnOrderFormCalculator = returnOrderFormCalculator;
_marketService = marketService;
}
public Money GetTotal(IOrderGroup orderGroup)
{
var currency = orderGroup.Currency;
var result = GetSubTotal(orderGroup) +
GetHandlingTotal(orderGroup) +
GetShippingSubTotal(orderGroup) -
GetOrderDiscountTotal(orderGroup) -
orderGroup.GetShippingDiscountTotal();
if (!orderGroup.PricesIncludeTax)
{
result += GetTaxTotal(orderGroup);
}
return result;
}
public Money GetSubTotal(IOrderGroup orderGroup)
{
var currency = orderGroup.Currency;
//The subtotal of an order group is the total of the subtotal amount of all order forms in the order group.
var amount = orderGroup.Forms.Sum(form => _orderFormCalculator.GetSubTotal(form, currency).Amount);
return new Money(amount, currency);
}
public Money GetHandlingTotal(IOrderGroup orderGroup)
{
var currency = orderGroup.Currency;
//The handling total of an order group is the total of handling total amount of all order forms in the order group.
var amount = orderGroup.Forms.Sum(form => _orderFormCalculator.GetHandlingTotal(form, currency).Amount);
return new Money(amount, currency);
}
public Money GetShippingSubTotal(IOrderGroup orderGroup)
{
var currency = orderGroup.Currency;
var market = _marketService.GetMarket(orderGroup.MarketId);
//The shipping subtotal of an order group is the total of shipping sub total amount of all order forms in the order group.
//i.e. it's the total of shipping cost of all shipments in the order group.
var shippingSubTotal = orderGroup.Forms.Sum(form => _orderFormCalculator.GetShippingSubTotal(form, market, currency).Amount);
return new Money(shippingSubTotal, currency);
}
[Obsolete("Use the overload without Currency instead.")]
public Money GetOrderDiscountTotal(IOrderGroup orderGroup, Currency currency)
{
return GetOrderDiscountTotal(orderGroup);
}
public Money GetOrderDiscountTotal(IOrderGroup orderGroup)
{
//The order discount total of an order group is the total of all order level discounts applied on all line items in the order group.
var orderDiscountTotal = orderGroup.GetAllLineItems().Sum(lineItem =>
{
var orderDiscountAmount = 0m;
var lineItemDiscountAmount = lineItem as ILineItemDiscountAmount;
if (lineItemDiscountAmount != null)
{
orderDiscountAmount = lineItemDiscountAmount.OrderAmount;
}
return orderDiscountAmount;
});
return new Money(orderDiscountTotal, orderGroup.Currency);
}
public OrderGroupTotals GetOrderGroupTotals(IOrderGroup orderGroup)
{
var market = _marketService.GetMarket(orderGroup.MarketId);
var currency = orderGroup.Currency;
var subTotal = GetSubTotal(orderGroup);
var total = GetTotal(orderGroup);
var shippingTotal = GetShippingSubTotal(orderGroup);
var taxTotal = GetTaxTotal(orderGroup);
var handlingTotal = GetHandlingTotal(orderGroup);
var formTotalsDictionary = orderGroup.Forms.ToDictionary(form => form, form => _orderFormCalculator.GetOrderFormTotals(form, market, currency));
return new OrderGroupTotals(subTotal, total, shippingTotal, taxTotal, handlingTotal, formTotalsDictionary);
}
public Money GetTaxTotal(IOrderGroup orderGroup)
{
var currency = orderGroup.Currency;
var market = _marketService.GetMarket(orderGroup.MarketId);
//The tax total of an order group is the total of tax amount of all order forms in the order group.
var taxTotal = orderGroup.Forms.Sum(form => _orderFormCalculator.GetTaxTotal(form, market, currency).Amount);
return new Money(taxTotal, currency);
}
}
Methods
GetHandlingTotal(IOrderGroup)
Gets the handling total of an IOrderGroup.
Declaration
Money GetHandlingTotal(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The order group. |
Returns
Type | Description |
---|---|
Money | The handling total for the order group. |
Examples
public void GetHandlingTotal(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var handlingTotal = orderGroupCalculator.GetHandlingTotal(orderGroup);
Debug.WriteLine("Handling total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, handlingTotal);
}
GetOrderDiscountTotal(IOrderGroup)
Gets the total of all order level discounts applied on an IOrderGroup.
Declaration
Money GetOrderDiscountTotal(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The order group. |
Returns
Type | Description |
---|---|
Money | The order level discount total of the order. |
Remarks
There're three types of discount can be applied to an order: order level, shipment level (or shipping discount) and line item level discount. This only returns order level discount.
Examples
public void GetOrderDiscountTotal(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var orderDiscountTotal = orderGroupCalculator.GetOrderDiscountTotal(orderGroup);
Debug.WriteLine("Order discount total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, orderDiscountTotal);
}
GetOrderDiscountTotal(IOrderGroup, Currency)
Gets the order discount price.
Declaration
[Obsolete("This method is no longer used, use the overload without Currency instead. Will remain at least until May 2019.")]
Money GetOrderDiscountTotal(IOrderGroup orderGroup, Currency currency)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The order group. |
Currency | currency | The currency. |
Returns
Type | Description |
---|---|
Money | The order discount price. |
GetOrderGroupTotals(IOrderGroup)
Gets the order group totals of an IOrderGroup.
Declaration
OrderGroupTotals GetOrderGroupTotals(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The given order group. |
Returns
Type | Description |
---|---|
OrderGroupTotals | An order group totals. |
Examples
public void GetOrderGroupTotals(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var orderGroupTotals = orderGroupCalculator.GetOrderGroupTotals(orderGroup);
Debug.WriteLine("Handling total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, orderGroupTotals.HandlingTotal);
Debug.WriteLine("Shipping subtotal for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, orderGroupTotals.ShippingTotal);
Debug.WriteLine("Tax total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, orderGroupTotals.TaxTotal);
Debug.WriteLine("Subtotal for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, orderGroupTotals.SubTotal);
Debug.WriteLine("Total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, orderGroupTotals.Total);
}
GetShippingSubTotal(IOrderGroup)
Gets the total of shipping cost of all shipments in an IOrderGroup.
Declaration
Money GetShippingSubTotal(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The given order group. |
Returns
Type | Description |
---|---|
Money | The shipping subtotal of the order group. |
Examples
public void GetShippingSubTotal(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var shippingSubTotal = orderGroupCalculator.GetShippingSubTotal(orderGroup);
Debug.WriteLine("Shipping subtotal for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, shippingSubTotal);
}
GetSubTotal(IOrderGroup)
Gets the subtotal of an IOrderGroup.
Declaration
Money GetSubTotal(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The given order group. |
Returns
Type | Description |
---|---|
Money | The subtotal of the order group. |
Examples
public void GetSubTotal(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var subTotal = orderGroupCalculator.GetSubTotal(orderGroup);
Debug.WriteLine("Subtotal for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, subTotal);
}
GetTaxTotal(IOrderGroup)
Gets the tax total of an IOrderGroup.
Declaration
Money GetTaxTotal(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The given order group. |
Returns
Type | Description |
---|---|
Money | The tax total of the order group. |
Examples
public void GetTaxTotal(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var taxTotal = orderGroupCalculator.GetTaxTotal(orderGroup);
Debug.WriteLine("Tax total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, taxTotal);
}
GetTotal(IOrderGroup)
Gets the total of an IOrderGroup.
Declaration
Money GetTotal(IOrderGroup orderGroup)
Parameters
Type | Name | Description |
---|---|---|
IOrderGroup | orderGroup | The given order group. |
Returns
Type | Description |
---|---|
Money | The total of the order group. |
Examples
public void GetTotal(IOrderGroup orderGroup, IOrderGroupCalculator orderGroupCalculator)
{
var total = orderGroupCalculator.GetTotal(orderGroup);
Debug.WriteLine("Total for order group '{0}': {1}", orderGroup.OrderLink.OrderGroupId, total);
}