Create a return order form and exchange offer
Describes how create a return order form and an exchange order in Optimizely Customized Commerce.
EPiServer.Commerce.Order.IReturnOrderForm
: Provides information about a return order form. This interface inherits fromIOrderForm
. TheReturnForms
collection inIPurchaseOrder
was changed fromICollection<IOrderForm>
toICollection<IReturnForm>
.EPiServer.Commerce.Order.IReturnLineItem
: Provides information about a return line item. This interface inherits fromILineItem
. TheLineItem
class inheritsIReturnLineItem
and includesOriginalLineItemId
.EPiServer.Commerce.Order.IReturnLineItemCalculator
: Calculates the extended price for anIReturnLineItem
.GetExtendedPrice
: Gets the extended price for anIReturnLineItem
.GetDiscountedPrice
: Gets the discounted price for anIReturnLineItem
.
EPiServer.Commerce.Order.IReturnOrderFormCalculator
: Calculates totals on anIReturnOrderForm
.GetHandlingTotal
: Gets the handling total for anIReturnOrderForm
.GetSubTotal
: Calculates the total of all shipments in anIReturnOrderForm
.GetTotal
: Gets the total for anIReturnOrderForm
.GetOrderDiscountTotal
: Gets the discount price of anIReturnOrderForm
.GetDiscountTotal
: Gets the discount total of anIReturnOrderForm
.
EPiServer.Commerce.Order.IShippingCalculator
: Provides an API for shipping calculations.GetShippingReturnItemsTotal
: Gets the total process for all return line items in the shipment.
EPiServer.Commerce.Order.ITaxCalculator
: Provides APIs for tax calculations.GetShippingReturnTaxTotal
: Gets the tax total for a return shipment.GetReturnTaxTotal
: Gets the return tax total for anIReturnOrderForm
.
EPiServer.Commerce.Order.IPurchaseOrderFactory
: Creates instances of purchasing order components.CreateReturnOrderForm
: Creates the return order form for a purchase order.
var purchaseOrderFactory = ServiceLocator.Current.GetInstance<IPurchaseOrderFactory>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnOrderForm = purchaseOrderFactory.CreateReturnOrderForm(purchaseOrder);
CreateReturnShipment
: Creates a shipment for the return.
var purchaseOrderFactory = ServiceLocator.Current.GetInstance<IPurchaseOrderFactory>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var shipment = purchaseOrder.GetFirstShipment();
var returnShipment = purchaseOrderFactory.CreateReturnShipment(shipment);
CreateReturnLineItem
: Creates a return line item from an original line item, with a specified return quantity and reason.
var purchaseOrderFactory = ServiceLocator.Current.GetInstance<IPurchaseOrderFactory>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var shipment = purchaseOrder.GetFirstShipment();
var returnLineItem = purchaseOrderFactory.CreateReturnLineItem(shipment.LineItems.First(), 1, "broken");
CreateExchangePayment
: Creates a payment for an exchange order.
var purchaseOrderFactory = ServiceLocator.Current.GetInstance<IPurchaseOrderFactory>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var shipment = purchaseOrder.GetFirstShipment();
var exchangePayment = purchaseOrderFactory.CreateExchangePayment();
EPiServer.Commerce.Order.IReturnPurchaseOrderCalculator
: Calculates return totals on a purchase order.GetTotal
: Gets the total of all return order forms.
var returnOrderCalculator = ServiceLocator.Current.GetInstance<IReturnOrderCalculator>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnTotal = returnOrderCalculator.GetTotal(purchaseOrder);
GetSubTotal
: Gets the subtotal of all return order forms.
var returnOrderCalculator = ServiceLocator.Current.GetInstance<IReturnOrderCalculator>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnSubTotal = returnOrderCalculator.GetSubTotal(purchaseOrder);
EPiServer.Commerce.Order.IReturnOrderNumberGenerator
: Generates the return order form number and exchange order number.
var purchaseOrderFactory = ServiceLocator.Current.GetInstance<IPurchaseOrderFactory>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var order = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnOrderNumberGenerator = ServiceLocator.Current.GetInstance<IReturnOrderNumberGenerator>();
var exchangeOrderNumber = returnOrderNumberGenerator.GenerateExchangeOrderNumber(order);
var returnOrderFormNumber = returnOrderNumberGenerator.GenerateReturnOrderFormNumber(order);
EPiServer.Commerce.Order.IReturnOrderFormExtensions
: Provides extensions for the return order form.
Extensions
CanCreateExchangeOrder
: Checks whether an exchange order can be created from a return order form.IsEditable
: Checks whether a return order form is editable.IsCancellable
: Checks whether a return order form is cancellable.IsCompletable
: Checks whether a return order form is completable.IsAwaitingCompletable
: Checks whether a return order form is awaiting completion.EPiServer.Commerce.Order.IReturnOrderService
: Handles operations onIReturnOrderForm
such as completing, canceling a return, or acknowledging receipt of items. Also provides an operation to create an exchange order from a purchase order.AcknowledgeReceiptItems
: Acknowledges the receipt of items on a return form.
var returnOrderService = ServiceLocator.Current.GetInstance<IReturnOrderService>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnOrderForm = purchaseOrder.ReturnForms.First();
returnOrderService.AcknowledgeReceiptItems(returnOrderForm);
CancelReturn
: Cancels a return form.
var returnOrderService = ServiceLocator.Current.GetInstance<IReturnOrderService>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnOrderForm = purchaseOrder.ReturnForms.First();
returnOrderService.CancelReturn(returnOrderForm);
Note that the purchase order was saved but not recalculated. It needs to be recalculated and saved.
OrderStatusManager.RecalculatePurchaseOrder(purchaseOrder);
orderRepository.Service.Save(purchaseOrder);
CompleteReturn
: Completes a return form.
var returnOrderService = ServiceLocator.Current.GetInstance<IReturnOrderService>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var returnOrderForm = purchaseOrder.ReturnForms.First();
returnOrderService.CompleteReturn(returnOrderForm);
Note that the purchase order and any exchange order were saved but not recalculated. They need to be recalculated and saved.
OrderStatusManager.RecalculatePurchaseOrder(purchaseOrder);
orderRepository.Service.Save(purchaseOrder);
var exchangeOrder = orderRepository.Service.Load<IPurchaseOrder>(purchaseOrder.ExchangeOrderGroupId.Value);
if (exchangeOrder != null)
{
OrderStatusManager.RecalculatePurchaseOrder((PurchaseOrder)exchangeOrder);
orderRepository.Service.Save(exchangeOrder);
}
CreateExchangeOrder
: Creates an exchange order from a purchase order.
var returnOrderService = ServiceLocator.Current.GetInstance<IReturnOrderService>();
var orderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>();
var orderLink = new OrderReference(1, "Default", Guid.NewGuid(), typeof(IPurchaseOrder));
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId);
var exchangeOrder = returnOrderService.CreateExchangeOrder(purchaseOrder, purchaseOrder.GetFirstShipment());
After creating an exchange order, if you are using PurchaseOrder
(from IPurchaseOrder
) and OrderAddress
(from IOrderAddress
), the address needs to be cloned from the original purchase order to the exchange order.
var purchaseOrder = orderRepository.Load<IPurchaseOrder>(orderLink.OrderGroupId) as PurchaseOrder;
var exchangeOrder = returnOrderService.CreateExchangeOrder(purchaseOrder, purchaseOrder.GetFirstShipment()) as PurchaseOrder;
exchangeOrder.OrderAddresses.Clear();
foreach (var orderAddress in purchaseOrder.OrderAddresses)
{
var clonedOrderAddress = (OrderAddress)orderAddress.Clone();
clonedOrderAddress.OrderGroupId = purchaseOrder.OrderGroupId;
purchaseOrder.OrderAddresses.Add(clonedOrderAddress);
}
Updated 3 days ago