Shipping and canceling orders
Orders can be created within EVA itself, or pushed in by an external source. Orders are not always shipped upon creation and is often done by an external warehouse. Further, all items in an order are ideally shipped, but instances could happen where partial cancellations within an order could occur for many reasons.
This page will cover how you can update EVA with pushed shipments and cancellations.
Order shipping
We will cover 2 services when it comes to order shipping. ShipExternalOrder
and UpdateOrderShippingStatus
.
ShipExternalOrder
When the package has been transferred to the carrier for delivery the order needs to be 'shipped' in EVA. This is done with the ShipExternalOrder service. Here you will also provide the tracking code (as given by the carrier to the WMS upon creation of the shipping label) + the tracking URL (as given by the carrier upon creation of the shipping label).
All order lines in a single shipment
To ship all order lines in a single shipment in ShipExternalOrder service, set the FinalShipment boolean to true - this marks that this is the final shipment attached to this order and no more shipments will be made/expected on this order.
Based on your settings, any order lines that are not included in your message could auto cancel and even auto refund.
Here is an example with FinalShipment boolean as true:
{
"ID":"",
"BackendID": "OrderNumber123", /backendID of order you want to ship
"BackendSystemID":"SAP", /system identifier from which order was pushed
"Shipments":[
{
"BackendID":"SHIPMENT1234", /unique shipment identifier
"BackendSystemID":"SAP", /system identifier pushing the shipment
"TrackingCode":"1234567890",
"TrackingLink":"https://www.ups.com/mobile/track?trackingNumber=1234567890",
"PackageID":null,
"Lines":[
{
"ID":null,
"BackendID":"linebackendid8",
"Barcode":,
"Quantity":2
}
],
"Packages":null,
"CustomFields":null,
"ShipFromOrganizationUnitID":"74" /OU that ships goods, will impact stock
}
],
"FinalShipment":true
}
Partial shipments
- To ship order lines across multiple shipments in ShipExternalOrder service, set the FinalShipment boolean to false for the first (few) shipments - this marks that a shipment is not yet the final shipment attached to this order. Only when sending the final shipment attached to the order, set the FinalShipment boolean to true, this marks that this is the final of all partial shipments attached to this order.
Full shipment of the order is typically the moment the invoice is created, which marks the order as Completed in EVA
Here is an example with FinalShipment boolean as false:
{
"ID":"",
"BackendID": "OrderNumber123", /backendID of order you want to ship
"BackendSystemID":"SAP", /system identifier from which order was pushed
"Shipments":[
{
"BackendID":"SHIPMENT1234", /unique shipment identifier
"BackendSystemID":"SAP", /system identifier pushing the shipment
"TrackingCode":"1234567890",
"TrackingLink":"https://www.ups.com/mobile/track?trackingNumber=1234567890",
"PackageID":null,
"Lines":[
{
"ID":null,
"BackendID":"linebackendid8",
"Barcode":,
"Quantity":1
}
],
"Packages":null,
"CustomFields":null,
"ShipFromOrganizationUnitID":"74" /OU that ships goods, will impact stock
}
],
"FinalShipment":false
}
UpdateOrderShippingStatus service
The UpdateOrderShippingStatus service allows updating the fulfillment status of an order (picked, packed, etc.). These statuses are not connected to individual shipments and mostly serve to create a ledgered history of statuses on the order. They do not impact the overall status of the order in EVA like ShipExternalOrder
does but rather the data could be used by the customer service teams for example to handle orders via EVA, or can even be converted into a consumer order tracking page.
In order to update EVA on the status of the order in the fulfillment process, the UpdateOrderShippingStatus is used with the following types.
- Statuses of the type '0' and '1' are used to mark two key milestones in the fulfillment process, for which you can trigger additional actions (e.g. send out email to consumer).
- Statuses of the type '2' are used for generic updates on shipping statutes, provided by the carrier.
Order picked : 0
Order packed : 1
Generic update: 2
Examples
// packed
{
"BackendOrderID": "ABC01",
"BackendSystemID": "SAP",
"Type": 1,
"OrderLineID": 123
},
// in sorting center
{
"BackendOrderID": "ABC01",
"BackendSystemID": "SAP",
"Type": 2,
"Date": "2020-06-07T18:34:43.239Z",
"Value": "B01",
"Description": "Arrived in sorting centre"
},
// delivered
{
"BackendOrderID": "ABC01",
"BackendSystemID": "SAP",
"Type": 2,
"Date": "2020-06-08T12:11:38.231Z",
"Value": "D01",
"Description": "Delivered"
},
...
]
Cancelling order or order lines
To cancel an entire order or to cancel certain order lines, use the CancelOrder service.
Since both "Orders" and "order lines" have unique ID's in EVA, there are two ways to cancel order lines.
To avoid uncontrolled order cancellations, the CancelOrder
service can only be requested via an API user and must specify an EVA OrderID.
Cancel a full order
The easiest way to cancel a complete order is to cancel the order without passing the "lines" property. The order can be identified by a OrderID (EVA's system generated order number) or by BackendID + BackendSystemID of order pushed in from an external system.
Here is an example of a full order cancellation:
{
"BackendID":"OrderNumber123",
"BackendSystemID":"SAP",
"OrderID":null,
"OrderLines":[
{
"BackendID":null,
"OrderLineID":null
}
]
}
EVA does not always know if orders pushed to your external WMS are perhaps already picked, packed, or even shipped out. If a CancelOrder
request is performed using a BackendID + BackendSystemID, EVA will automatically assume that the cancellation is coming from your external WMS system, and will in turn allow it. For this reason, please use this service with caution.
Cancel a certain order line
The lines can be identified by an OrderLineID or by BackendID. As mentioned earlier, when no lines are given, all lines of the order will be cancelled.
When order lines require splitting (in case of partial fulfillment), the original order line will be cancelled automatically - new order lines will also be created automatically to match fulfillment lines.
Here is an example of an order line cancellation:
{
"BackendID":"OrderNumber123",
"BackendSystemID":"SAP",
"OrderID":null,
"OrderLines":[
{
"BackendID":"linebackendid8",
"OrderLineID":""
}
]
}
Using the ShipExternalOrder in combination with the FinalShipment boolean you can also partially cancel certain OrderLines in an order by having the FinalShipment boolean as true and not include the cancelled OrderLines.
Additionally, you can also enable the setting Orders:Carts:AllowQuantityOrderedReductions
. Instead of outright cancelling an order line, this setting allows you to decrease a line's quantity to 0. This way the line will not appear as cancelled; it will just not appear at all. Any lines that then still appear as Type: Cancelled are lines that were actually cancelled after the order was placed.