Skip to main content

Warehouse order exporter

Usually, when you have a webshop set up or an Endless Aisle order, any orders placed on that organization unit are fulfilled from a warehouse. Since these warehouses are probably using their own Warehouse Management System to handle these orders, we need EVA to export these orders to this external system. To do so, we need to set up an order exporter.

The webshop mentioned is of course just an example. The order exporter is set up to be used for any order that ends up being fulfilled by an external WMS.

To set up our order exporter, we need three things:

  1. A fulfillment relation between the warehouse and the webshop
  2. An endpoint where the warehouse's WMS can receive the order
  3. The exporter settings on the warehouse organization units

Supplier/fulfillment relation

There are two ways to configure a fulfillment relationship between the webshop and its potential suppliers.

We recommend setting up EVA's Order orchestration to let EVA decide which supplier is best for individual orders based on your preferences. This means that sometimes the order will lead to Ship from store, while at other times the fulfillment will be done by your (external) warehouse.

You can however also configure a static supplier relation with your webshop. In that case, the order will always be exported to a specific supplier based on your configuration. This is configured in the Allocation chapter in Suite.

Order orchestration supersedes Allocation

Even if you've configured a static supplier relation in the Allocation chapter, an active orchestration sheet will take priority.

Endpoint

Regardless of your choice for supplier relations, when the fulfillment is directed to your warehouse you will need to communicate this to your warehouse's WMS.

To achieve this, EVA exports the order to an endpoint of your choice as a JSON file: you need to have an available endpoint where your WMS can receive the JSON file. From that point on, your external WMS can over the process.

If you want to test the flow towards the endpoint, you can set up a temporary one. You could for example use Pipedream to set one up.

Exporter settings

The OU that signifies your external warehouse needs to have the following settings specified:

SettingValue
OrderExporterWAREHOUSE
WarehouseOrderExporter:EndpointYour endpoint mentioned in the section above.
WarehouseOrderExporter:Token(optional) We will add this token to the 'Authorization' header in the request

Result

Now, whenever an order is placed on the web shop OU - and is to fulfilled by your warehouse - a JSON will be fired towards the warehouse endpoint. The export will look something like this:

{
"AllowPartialFulfillment": false,
"BackendID": "217720",
"BackendSystemID": "Insom",
"BackendType": null,
"BillingAddress": {
"Address1": "Street",
"Address2": null,
"AddressedTo": "",
"City": "Amsterdam",
"CountryID": "NL",
"District": null,
"EmailAddress": null,
"FirstName": null,
"HouseNumber": "1",
"LastName": null,
"PhoneNumber": null,
"State": null,
"Street": "Street",
"Subdistrict": null,
"ZipCode": "1019"
},
"CurrencyID": "EUR",
"CustomFields": null,
"Customer": {
"BackendID": "54",
"BackendRelationID": null,
"BackendSystemID": "Insom",
"CountryID": "NL",
"DateOfBirth": null,
"Email": "michael@sfs.com",
"FirstName": "Michael",
"FiscalID": null,
"FullName": "Michael Shipper",
"Gender": null,
"GlobalID": null,
"ID": 1381,
"Initials": null,
"LanguageID": "nl",
"LastName": "Shipper",
"Nickname": null,
"PhoneNumber": null,
"PlaceOfBirth": null,
"Salutation": null,
"Telephone": null,
"TimeZone": null,
"Title": null
},
"CustomerOrderID": "1948",
"FallbackShippingAddress": null,
"GlobalID": "euw1948",
"ID": "1948",
"InvoiceTo": {
"BackendID": "webshop_nl",
"BackendRelationID": null,
"ID": 6,
"Name": "Webshop NL"
},
"Lines": [
{
"BackendID": null,
"Barcode": "978020137057",
"Carrier": null,
"Description": "New Black Gym Bag",
"ID": 2828,
"ProductID": "014-1-978020137057",
"Quantity": 1,
"RequestedDate": "2024-04-03T00:00:00Z",
"ShippingMethod": null,
"SupplierProductDescription": null,
"SupplierProductID": null,
"TaxRate": 1.21,
"UnitPrice": 0
},
{
"BackendID": null,
"Barcode": "978020137057",
"Carrier": null,
"Description": "New Black Gym Bag",
"ID": 2829,
"ProductID": "014-1-978020137057",
"Quantity": 1,
"RequestedDate": "2024-04-03T00:00:00Z",
"ShippingMethod": null,
"SupplierProductDescription": null,
"SupplierProductID": null,
"TaxRate": 1.21,
"UnitPrice": 0
}
],
"OrderFulfillmentID": "226",
"OrderReference": "EVA_OF_1948_226",
"OriginatingFrom": {
"BackendID": "webshop_nl",
"BackendRelationID": null,
"ID": 6,
"Name": "Webshop NL"
},
"Remark": null,
"ShipFrom": {
"BackendID": "lelystad_warehouse",
"BackendRelationID": null,
"ID": 11,
"Name": "Lelystad warehouse"
},
"ShippingAddress": {
"Address1": "Koningsbergenstraat",
"Address2": null,
"AddressedTo": "Michael Shipper",
"City": "Lelystad",
"CountryID": "NL",
"District": null,
"EmailAddress": null,
"FirstName": "Michael",
"HouseNumber": "2",
"LastName": "Shipper",
"PhoneNumber": null,
"State": null,
"Street": "Koningsbergenstraat",
"Subdistrict": null,
"ZipCode": "8232DA"
},
"ShippingCosts": 0,
"SoldFrom": {
"BackendID": "webshop_nl",
"BackendRelationID": null,
"ID": 6,
"Name": "Webshop NL"
},
"TotalAmountInTax": 17.98,
"Type": 0,
"WarehouseID": "lelystad_warehouse"
}}

To get a better understanding of your own exports, test a couple of orders and fetch the results from the endpoint.

Delaying, modifying and cancelling exported orders

You can optionally offer your consumers a custom time period to change their mind before you start the actual fulfillment proces. By setting OrderFulfillment:ExportDelayInMinutes with your custom value, the actual export to your WMS will be delayed by that time. This does not affect the commits on stock.

During this "cooldown" period, only order (line) cancellations are possible. Afterwards the possibility of modifications and/or cancellations on orders exported to your warehouse WMS are determined based on the following settings on your warehouse OU:

First off, we have to set AllowModifyingQuantityAfterExport to true. Otherwise, this doesn't work.

To determine your position on cancellations, you can configure WarehouseOrderExporter:Cancellations:Allow. This setting can hold one of three values:

  • 0 - never allow (default)
  • 1 - always allow
  • 2 - ledger

If you choose 2 as a value, then the order line will not allow cancellations except from ledgers specified in the following setting:

  • WarehouseOrderExporter:Cancellations:AllowFromLedger (based on your created/existing OrderLedger)
  • WarehouseOrderExporter:Cancellations:AllowUntilLedger (based on your created/existing OrderLedger)

Allowing the modifying of orders (or not) can be configured by means of WarehouseOrderExporter:Modifications:Allow. This setting has the same possible values:

  • 0 - never allow (default)
  • 1 - always allow
  • 2 - ledger

If you choose 2 as a value, then the order line will not allow modifications except from ledgers specified in the following setting:

  • WarehouseOrderExporter:Modification:AllowUntilLedger with a value based on your created/existing OrderLedger.
  • WarehouseOrderExporter:Modification:AllowFromLedger with a value based on your created/existing OrderLedger.

Results

Modifications and cancellations will just trigger a new export towards the endpoint. The integration layer to the WMS should be set up to recognize existing OrderID to distinguish between new orders and modifications.