Return purchase order calculator
Describes ReturnPurchaseOrderCalculator, which calculates the total, subtotal, and shipping subtotal for a purchase order in Optimizely Commerce Connect.
total
Calculates the total of all return order forms in a purchase order.
public void GetTotal(IPurchaseOrder purchaseOrder, IReturnPurchaseOrderCalculator returnPurchaseOrderCalculator) {
var total = returnPurchaseOrderCalculator.GetTotal(purchaseOrder);
Debug.WriteLine("Total for return order '{0}': {1}", purchaseOrder.OrderLink.OrderGroupId, total);
}subTotal
Calculates the subtotal of all return order forms in a purchase order.
public void GetSubTotal(IPurchaseOrder purchaseOrder, IReturnPurchaseOrderCalculator returnPurchaseOrderCalculator) {
var subTotal = returnPurchaseOrderCalculator.GetSubTotal(purchaseOrder);
Debug.WriteLine("Subtotal for return order '{0}': {1}", purchaseOrder.OrderLink.OrderGroupId, subTotal);
}shippingSubTotal
Calculates the shipping subtotal of all return order forms in a purchase order.
public void GetShippingSubTotal(IPurchaseOrder purchaseOrder, IReturnPurchaseOrderCalculator returnPurchaseOrderCalculator) {
var shippingSubTotal = returnPurchaseOrderCalculator.GetShippingSubTotal(purchaseOrder);
Debug.WriteLine("Shipping subtotal for return order '{0}': {1}", purchaseOrder.OrderLink.OrderGroupId, shippingSubTotal);
}Change the default calculation
Inherit from DefaultReturnPurchaseOrderCalculator, the default implementation of IReturnPurchaseOrderCalculator, and override one or more of its methods to change the calculation behavior.
public class ReturnPurchaseOrderCalculatorOverridingDefault: DefaultReturnPurchaseOrderCalculator {
public ReturnPurchaseOrderCalculatorOverridingDefault(IReturnOrderFormCalculator returnOrderFormCalculator): base(returnOrderFormCalculator) {}
protected override Money GetOrderDiscountTotal(IPurchaseOrder purchaseOrder) {
return new Money(0, purchaseOrder.Currency);
}
protected override Money CalculateTotal(IPurchaseOrder purchaseOrder) {
return new Money(0, purchaseOrder.Currency);
}
protected override Money CalculateSubTotal(IPurchaseOrder purchaseOrder) {
return new Money(0, purchaseOrder.Currency);
}
protected override Money CalculateShippingSubTotal(IPurchaseOrder purchaseOrder) {
return new Money(0, purchaseOrder.Currency);
}
protected override IEnumerable<IReturnOrderForm> GetActiveReturnForms(IPurchaseOrder purchaseOrder) {
return new List<IReturnOrderForm>();
}
}Change the default validation
The default implementation validates that each total is non-negative after calculation. To change the behavior, override the ValidateTotal, ValidateSubTotal, or ValidateShippingSubTotal method.
public class ReturnPurchaseOrderCalculatorOverridingDefault: DefaultReturnPurchaseOrderCalculator {
public ReturnPurchaseOrderCalculatorOverridingDefault(IReturnOrderFormCalculator returnOrderFormCalculator): base(returnOrderFormCalculator) {}
protected override void ValidateTotal(Money money) {
if (money.Amount < 0) {
throw new ValidationException("Order total must not be negative.");
}
}
protected override void ValidateSubTotal(Money money) {
if (money.Amount < 0) {
throw new ValidationException("Order subtotal must not be negative.");
}
}
protected override void ValidateShippingSubTotal(Money money) {
if (money.Amount < 0) {
throw new ValidationException("Shipping subtotal must not be negative.");
}
}
}Updated 21 days ago
