Interface ILineItemCalculator
Calculates the extended price for a ILineItem.
Namespace: EPiServer.Commerce.Order
Assembly: Mediachase.Commerce.dll
Version: 12.17.2Syntax
public interface ILineItemCalculator
Examples
/// <summary>
/// Sample implementation of <see cref="ILineItemCalculator"/>.
/// </summary>
public class LineItemCalculatorSample : ILineItemCalculator
{
/// <summary>
/// The tax calculator needed for calculating sales tax of an <see cref="ILineItem"/>.
/// </summary>
private readonly ITaxCalculator _taxCalculator;
public LineItemCalculatorSample(ITaxCalculator taxCalculator)
{
_taxCalculator = taxCalculator;
}
public Money GetExtendedPrice(ILineItem lineItem, Currency currency)
{
//The extended price of a line item is the price that includes all discounts applied on the line item, including entry level and order level discounts.
//Of course you might have different calculation here.
var rawExtendedPrice = lineItem.PlacedPrice * lineItem.Quantity - lineItem.GetDiscountTotal(currency).Amount;
// If the total discount amount is greater than the line item price, it means that with the discounts, customers don't need to pay for the item.
// It also means that the extended price of the line item is zero.
return new Money(Math.Max(0, rawExtendedPrice), currency);
}
public Money GetDiscountedPrice(ILineItem lineItem, Currency currency)
{
//The discounted price of a line item is the price that includes all entry level discounts applied on the line item. That does not take order level discounts into account.
//Of course you might have different calculation here.
var rawDiscountedPrice = lineItem.PlacedPrice * lineItem.Quantity - lineItem.GetEntryDiscount();
// If the discount amount is greater than the line item price, it means that with the discount, customers don't need to pay for the item.
// It also means that the discounted price of the line item is zero.
return new Money(Math.Max(0, rawDiscountedPrice), currency);
}
/// <summary>
/// Gets the extended and the discounted prices of an <see cref="ILineItem"/>.
/// These prices are wrapped in a <see cref="LineItemPrices"/> object.
/// </summary>
/// <param name="lineItem">The given line item.</param>
/// <param name="currency">The currency.</param>
public LineItemPrices GetLineItemPrices(ILineItem lineItem, Currency currency)
{
var extendedPrice = GetExtendedPrice(lineItem, currency);
var discountedPrice = GetDiscountedPrice(lineItem, currency);
return new LineItemPrices(extendedPrice, discountedPrice);
}
public Money GetSalesTax(ILineItem lineItem, IMarket market, Currency currency, IOrderAddress shippingAddress)
{
return _taxCalculator.GetSalesTax(lineItem, market, shippingAddress, GetExtendedPrice(lineItem, currency));
}
public Money GetSalesTax(IEnumerable<ILineItem> lineitems, IMarket market, Currency currency,
IOrderAddress shippingAddress)
{
return _taxCalculator.GetSalesTax(lineitems, market, shippingAddress, currency);
}
}
Methods
GetDiscountedPrice(ILineItem, Currency)
Gets the discounted price of an ILineItem.
Declaration
Money GetDiscountedPrice(ILineItem lineItem, Currency currency)
Parameters
Type | Name | Description |
---|---|---|
ILineItem | lineItem | The line item. |
Currency | currency | The currency to be used in the calculations. |
Returns
Type | Description |
---|---|
Money | The discounted price of the line item. |
Examples
public void GetDiscountedPrice(ILineItem lineItem, Currency currency, ILineItemCalculator lineItemCalculator)
{
var discountedPrice = lineItemCalculator.GetDiscountedPrice(lineItem, currency);
Debug.WriteLine("Discounted price for '{0}': {1}", lineItem.Code, discountedPrice);
}
GetExtendedPrice(ILineItem, Currency)
Gets the extended price of an ILineItem.
Declaration
Money GetExtendedPrice(ILineItem lineItem, Currency currency)
Parameters
Type | Name | Description |
---|---|---|
ILineItem | lineItem | The line item. |
Currency | currency | The currency to be used in the calculations. |
Returns
Type | Description |
---|---|
Money | The extended price of the line item. |
Examples
public void GetExtendedPrice(ILineItem lineItem, Currency currency, ILineItemCalculator lineItemCalculator)
{
var extendedPrice = lineItemCalculator.GetExtendedPrice(lineItem, currency);
Debug.WriteLine("Extended price for '{0}': {1}", lineItem.Code, extendedPrice);
}
GetLineItemPrices(ILineItem, Currency)
Gets the extended and discounted prices of an ILineItem.
Declaration
LineItemPrices GetLineItemPrices(ILineItem lineItem, Currency currency)
Parameters
Type | Name | Description |
---|---|---|
ILineItem | lineItem | The line item. |
Currency | currency | The currency to be used in the calculations. |
Returns
Type | Description |
---|---|
LineItemPrices | The prices for the line item. |
Examples
public void GetLineItemPrices(ILineItem lineItem, Currency currency, ILineItemCalculator lineItemCalculator)
{
var lineItemdPrices = lineItemCalculator.GetLineItemPrices(lineItem, currency);
Debug.WriteLine("Extended price for '{0}': {1}", lineItem.Code, lineItemdPrices.ExtendedPrice);
Debug.WriteLine("Discounted price for '{0}': {1}", lineItem.Code, lineItemdPrices.DiscountedPrice);
}
GetSalesTax(ILineItem, IMarket, Currency, IOrderAddress)
Gets the sales tax of an ILineItem.
Declaration
Money GetSalesTax(ILineItem lineItem, IMarket market, Currency currency, IOrderAddress shippingAddress)
Parameters
Type | Name | Description |
---|---|---|
ILineItem | lineItem | The line item. |
IMarket | market | The market to be used in the calculation. |
Currency | currency | The currency to be used in the calculations. |
IOrderAddress | shippingAddress | The shipping address to be used in the calculations. |
Returns
Type | Description |
---|---|
Money | The sales tax of the line item. |
Examples
public void GetSalesTax(ILineItem lineItem, IMarket market, Currency currency, IOrderAddress shippingAddress, ILineItemCalculator lineItemCalculator)
{
var salesTax = lineItemCalculator.GetSalesTax(lineItem, market, currency, shippingAddress);
Debug.WriteLine("Sales tax for '{0}': {1}", lineItem.Code, salesTax);
}