Skip to main content

Endless Aisle invoicing

docs image

Endless Aisle invoicing

Configure invoices for Endless Aisle orders

A few configurations need to be made in order to set up invoicing on Endless Aisle orders. Further, a few guidelines to keep in mind when it comes to endless aisle order cancellations, financial events and the invoice trigger moment.


To set up invoicing for Endless Aisle a few configurations need to be implemented.

Orders:DeliveryInvoiceStrategytrueSets the invoicing behavior to payment for Endless Aisle orders. This should be set on store OU level or country level. Do not set it on the root organization
CreditCancelledOrderLinestrueThis setting creates a credit invoice for endless aisle order lines if/when they get cancelled.

Best practice is to not allow cash payments on Endless Aisle orders, that way if any cancellations take place at a future time, an easy straight forward refund can be made on the same payment method used.

Order(lines) cancellations

For any reason an Endless Aisle order is cancelled, such as product no longer available in the warehouse or simply a customer no longer desires to purchase it. Three methods to cancel an Endless Aisle order(lines) are then supported, and will subsequently trigger a credit invoice:

Ship External Order


This method is used when external warehouses are being used (orders are being pushed to EVA).

The first method to cancel an Endless Aisle order(lines), is to use the ShipExternalOrder service. Using the property FinalShipment and value true will cancel orderline(s) that are not shipped, and subsequently create a the underlying credit invoice.

More on ShipExternalOrders can be found here.

Ship Order


This method is used when no external warehouses are being used (orders originate from within EVA).

The second method is through the ShipOrder service. The same property as ShipExternalOrder, namely FinalShipment and value true will cancel orderline(s) that are not shipped, and subsequently create the underlying credit invoice.

More on ShipOrder can be found here.

Cancel Order

The third and last method is through the CancelOrder service.

More on CancelOrder can be found here.


If you are using an external WMS, you'll need to call this service when logged-in as an API user. Otherwise, doing it via our front ends for EVA originating orders would suffice.

Invoice trigger

The invoice trigger moment for Endless Aisle orders is AfterFullyPaid.


The Endless Aisle configuration is leading when it comes to the InvoiceTrigger setting. In other words, if the value of the InvoiceTrigger setting was AfterLastShipment, the invoice for Endless Aisle order would still be triggered AfterFullyPaid.

Financial events

In an Endless Aisle order scenario, various events are raised at respective moments. Events start off at the invoicing trigger stage with two events, the Sales and Sales Tax events. However, those sales events are raised before the goods are shipped since the invoice triggering moment for Endless Asile is AfterFullyPaid (see Endless Aisle Invoice trigger for more.

In cookbook recipes, the Sales event is used to book revenue. In the case of Endless Aisle and e-commerce sales, there has been no delivery made yet and therefore, recognizing revenue at this stage will eventually lead to inaccurate financial reporting. According to the revenue recognition principle under both GAAP and IFRS, revenue should only be recognized when it is earned and realizable. In the context of endless aisle, this typically means that revenue should be recognized only when the goods have been shipped to the customer. Here is where Shipment event comes into action. This event ensures that the revenue is recognized at the appropriate time.

Below is an overview of the financial events relating to an endless aisle order with a total sales value of €100 EUR, whereas the product has a cost price of €50.

Events upon payment / invoice issuance

Store NL€17.36UnprocessedSales tax
Store NL€100.00UnprocessedSales
Store NL€100.00UnprocessedPayment

Since the order is fully paid and thus invoiced, the expected Sales, Sales Tax, and Payment events are raised with the total invoiced value.

Events upon shipment

Store NL€50.00UnprocessedCost of goods-
Store NL€-50.00UnprocessedStock sold-
Store NL€100.00UnprocessedShipment-
Warehouse NL€100.00UnprocessedShipment-
Store NL€50.00UnprocessedStock receivedTransfer Order
Store NL€50.00UnprocessedStock mutationTransfer Order
Warehouse NL€-50.00UnprocessedStock soldTransfer Order

In this case, the endless aisle sales order of Store NL is being fulfilled by Warehouse NL. This creates a transfer order from the warehouse to the store which in turn raised two Shipment events, one for the total sales value of the transfer order form Warehouse NL to Store NL, and one for the total sales value of the shipment form Store NL to the consumer.

Accounting entries - an example

Looking at the scenario above, a sale is made with a total value of €100 including VAT. The order is paid in the store by the consumer and at a later point in time shipped from the warehouse. The invoice is issued directly in the store when the payment is made. The corresponding COGS is €50,-.

Accounting entries upon payment / invoice issuance

Account nameDR / CRDebit (€)Credit (€)
Unearned RevenueCR-100
VAT LiabilitiesCR-17.36

Since payment has been received, the Cash or Cash Equivalent account needs to be debited. Simultaneously, this is recognized an as Unearned Revenue on the balance sheet (liability) since the payment made is an advance payment in this scenario. At this stage, the company has an obligation to the customer in the form of products owed. However, we also owe tax at this point since an invoice has been issed (at moment of payment) therefore, the VAT liabilities need to also be credited.

Accounting entries upon shippment of goods

Account nameDR / CRDebit (€)Credit (€)
Unearned RevenueDR82,64-

At the moment of shipment, the Shipment event is raised. Revenue can now be booked on the P&L since the obligation to deliver the goods to the customer has been fulfilled.