Dev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityOptimizely AcademySubmit a ticketLog In
Dev Guide

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.");
    }
  }
}