---
title: Return order form calculator
slug: commerce-connect-15/docs/return-order-form-calculator
docTags: 
createdAt: 2026-07-30T20:34:40.000Z
---

## total

Calculates the total for a return order form.

```csharp
public void GetTotal(IReturnOrderForm returnOrderForm, IMarket market, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var total = returnOrderFormCalculator.GetTotal(returnOrderForm, market, currency);
  Debug.WriteLine("Total for return order form '{0}': {1}", returnOrderForm.OrderFormId, total);
}
```

## subTotal

Calculates the total of all shipments in a return order form.

```csharp
public void GetSubTotal(IReturnOrderForm returnOrderForm, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var subTotal = returnOrderFormCalculator.GetSubTotal(returnOrderForm, currency);
  Debug.WriteLine("Subtotal for return order form '{0}': {1}", returnOrderForm.OrderFormId, subTotal);
}
```

## handlingTotal

Calculates the handling total for a return order form.

```csharp
public void GetHandlingTotal(IReturnOrderForm returnOrderForm, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var handlingTotal = returnOrderFormCalculator.GetHandlingTotal(returnOrderForm, currency);
  Debug.WriteLine("Handling total for return order form '{0}': {1}", returnOrderForm.OrderFormId, handlingTotal);
}
```

## shippingSubTotal

Calculates the shipping subtotal for a return order form.

```csharp
public void GetShippingSubTotal(IReturnOrderForm returnOrderForm, IMarket market, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var shippingSubTotal = returnOrderFormCalculator.GetShippingSubTotal(returnOrderForm, market, currency);
  Debug.WriteLine("Shipping subtotal for return order form '{0}': {1}", returnOrderForm.OrderFormId, shippingSubTotal);
}
```

## orderDiscountTotal

Calculates a return order form's discount amount, which is the sum of all order-level discounts applied to line items across every shipment in the return order form.

```csharp
public void GetOrderDiscountTotal(IReturnOrderForm returnOrderForm, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var orderDiscountTotal = returnOrderFormCalculator.GetOrderDiscountTotal(returnOrderForm, currency);
  Debug.WriteLine("Order discount total for return order form '{0}': {1}", returnOrderForm.OrderFormId, orderDiscountTotal);
}
```

## discountTotal

Calculates a return order form's discount total, which is the sum of:

- The order-level discount amount.
- Line item discount amounts for all line items in all shipments.
- Shipment discount amounts for all shipments in the return order form.

```csharp
public void GetDiscountTotal(IReturnOrderForm returnOrderForm, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var discountTotal = returnOrderFormCalculator.GetDiscountTotal(returnOrderForm, currency);
  Debug.WriteLine("Discount total for return order form '{0}': {1}", returnOrderForm.OrderFormId, discountTotal);
}
```

## returnTaxTotal

Calculates the tax total for a return order form.

```csharp
public void GetReturnTaxTotal(IReturnOrderForm returnOrderForm, IMarket market, Currency currency, IReturnOrderFormCalculator returnOrderFormCalculator) {
  var returnTaxTotal = returnOrderFormCalculator.GetReturnTaxTotal(returnOrderForm, market, currency);
  Debug.WriteLine("Tax total for return order form '{0}': {1}", returnOrderForm.OrderFormId, returnTaxTotal);
}
```

## Change the default calculation

Inherit from `DefaultReturnOrderFormCalculator`, the default implementation of `IReturnOrderFormCalculator`, and override one or more of its methods to change the calculation behavior.

```csharp
public class ReturnOrderFormCalculatorOverridingDefault: DefaultReturnOrderFormCalculator {
  public ReturnOrderFormCalculatorOverridingDefault(IShippingCalculator shippingCalculator, ITaxCalculator taxCalculator): base(shippingCalculator, taxCalculator) {}
  protected override Money CalculateTotal(IReturnOrderForm returnOrderForm, IMarket market, Currency currency) {
    return new Money(0, currency);
  }
  protected override Money CalculateSubtotal(IReturnOrderForm returnOrderForm, Currency currency) {
    return new Money(0, currency);
  }
  protected override Money CalculateHandlingTotal(IReturnOrderForm returnOrderForm, Currency currency) {
    return new Money(0, currency);
  }
  protected override Money CalculateShippingSubTotal(IReturnOrderForm returnOrderForm, IMarket market, Currency currency) {
    return new Money(0, currency);
  }
  protected override Money CalculateReturnTaxTotal(IReturnOrderForm returnOrderForm, IMarket market, Currency currency) {
    return new Money(0, currency);
  }
}
```

## Change the default validation

The default implementation validates that each total is non-negative after calculation. To change the behavior, override the appropriate method: `ValidateTotal`, `ValidateSubtotal`, `ValidateHandlingTotal`, `ValidateShippingSubTotal`, or `ValidateReturnTaxTotal`.

```csharp
public class ReturnOrderFormCalculatorOverridingDefault: DefaultReturnOrderFormCalculator {
  public ReturnOrderFormCalculatorOverridingDefault(IShippingCalculator shippingCalculator, ITaxCalculator taxCalculator): base(shippingCalculator, taxCalculator) {}
  protected override void ValidateTotal(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Total must not be negative.");
    }
  }
  protected override void ValidateSubtotal(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Subtotal must not be negative.");
    }
  }
  protected override void ValidateHandlingTotal(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Handling total must not be negative.");
    }
  }
  protected override void ValidateShippingSubTotal(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Shipping subtotal must not be negative.");
    }
  }
  protected override void ValidateReturnTaxTotal(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Return tax total must not be negative.");
    }
  }
}
```
