Skip to main content

Click & Collect

docs image

Click & Collect

All about Click & Collect


Click & Collect, also known as Call & Collect, is a convenient ordering method that allows customers to order products online and then pick them up at a physical store location. This is initiated by customers who prefer to pick up their goods in person.

Step-by-step guide to click-and-collect on EVA

While Click & collect is relatively straightforward, it comprises various components that influence its behavior within EVA. In this step-by-step guide, we will break down the Click & Collect flow, offering detailed insights into each stage of the process. From initiating the flow to managing reservations, communicating with customers, setting up pickup reminders, and optimizing the entire experience, we will guide you through the entire journey of Click & Collect on EVA.

  1. Initiating the flow
  2. Webshop initiation
  3. (In-store) Reservation task
  4. (In-store) Informing the customers
  5. Pickup reminders
  6. Required reservation time
  7. (In-store) Clean up reservations

1. Initiating the flow

Click & Collect orders are always initiated by the customer, who decides to pick up their purchase in a specific store. Because we know all of this information, initiating a click-and-collect flow is fairly straightforward. The initiation can occur through one of two places:

2. Webshop initiation

External webshops use PushSalesOrder to communicate orders to EVA. In order to mark orders as click-and-collect, we need to set a PickupOrganizationUnit. In PushSalesOrder, this can be achieved by specifying the PickupOrganizationUnitBackendID.

An example order would look like this:

"BackendSystemID": "pickup_test",
"BackendID": "externalorderid8",
"CurrencyID": "EUR",
"SoldFromOrganizationUnitBackendID": "nl_webshop",
"PickupOrganizationUnitBackendID": "almere_store",
"Customer": {
"EmailAddress": "",
"Gender": "M",
"FirstName": "John",
"LastName": "Doe",
"PhoneNumber": "+31612345678"
"BillingAddress": {
"Street": "Grove street",
"HouseNumber": "7",
"ZipCode": "1234AB",
"City": "Amsterdam",
"CountryID": "NL"
"Lines": [
"BackendID": "linebackendid8",
"ProductID": 33,
"Quantity": 1,
"Amount": 49.95,
"TaxRate": 0.21
"Payments": [
"BackendID": "paymentbackendid8",
"Method": "PIN",
"Amount": 49.95
"ID": 153,
"CustomerID": 5,
"AlreadyExists": false

When RequiredData:RequireOrderTransferForNonPaidPickup is set to true (otherwise, it defaults to false), and an unpaid order of type Reserve has a pickup point different from the order creation point, the SoldFromOU is updated to the pickup point. This ensures that SoldFromOU reflects the location where the payment is made.

In addition to the pickup organization, we also need a customer with a billing address. A shipping address not needed, obviously.

The request will provide you with the new order's OrderID.

3. (In-store) Reservation task

The 'Reserve in store' functionality can be enabled by setting Orders:Reservations:ClickAndCollectEnabled to true.

Additionally, you must configure it as a checkout option. This is makes it appear as a selectable tile during the checkout process, both on POS and the Checkout App. This specific checkout option is known as PickupPoint.

To ensure that a store is deemed suitable for click-and-collect orders (especially when there is a limited number of the required products in stock), you can use Orders:Reservations:ClickAndCollectMinQuantityAvailable to customize the minimum quantity of products that stores must have in inventory before they become visible as options for pick up.

Once a click-and-collect order is created, the specified store will receive the order as a reservation task under 'Click & Collect Tasks' in the Tasks App. Selecting the task will open an overview of all the items that require picking for this order. These items can be gathered either by scanning them or by manually inputting their barcode.

Printing a receipt

Once all the items have been picked, we can complete the reservation task. When completing the task, there is an option to print a reservation receipt. You can configure the receipt using the OrderReservationReceipt stencil template.

You might consider printing a reservation receipt as it offers a tangible, itemized list for ensuring order accuracy and serves as a useful reference for customers when they come to collect their order.

Default reservation strategy

You can adjust the default reservation strategy using the InsufficientStockForReservationStrategy setting. By default, this setting is configured as ORDER, which means that even if a product is out of stock, the sales order is still sent to the designated organization unit as a click-and-collect order, initiating the reservation flow.

Alternatively, you can set it to CANCEL. With this, any order line with no stock will be automatically canceled, eliminating the possibility of initiating a reservation flow when there's no available stock.

Useful link(s)

4. (In-store) Informing the customer

How can I let the customer know their order is ready?

Once the task has been completed, EVA will send an email and/or SMS to notify the customer that their order is now ready for pick up.


To establish this email flow, you must configure two settings: Mail:StockReservationCreated:Enabled and VerifyPaidPickupOrders:Enabled, both set to true. The latter is essential for displaying a QR code in the email. You can configure the email using the StockReservation stencil template.

Once set up correctly, the customer will receive an email with a unique QR code, which only they can access. To release the (paid) pickup order, the customer can simply show this QR code to the employee. If, for any reason, the employee needs to release the order without the customer's QR code, their role must have the ReleasePaidPickupOrders permission.


Additionally, you can set an SMS message to be sent to the customer to inform them. This requires the following three steps:

  1. Set up SMS configuration with MessageBird
  2. Set up a StockReservation template with destination SMS
  3. Set Sms:StockReservation:Send to true
Useful link(s)

5. Pickup reminders

How can I set up pickup reminders? How frequent will they be sent out?

To remind customers to pick up their reserved order, we can configure the PickupReminder:ReminderDays setting. If we set this to 4,2,1, EVA will automatically send a reminder email when there are four days left for the customer to pick up their order. It will then send another reminder when there are only two days left and yet another when there's just one day left. You can customize the reminder email using the PickupReminder stencil template.

To support these reminders, we need to set up the EVA.UserTasks.Tasks.PickupReminders task in the Scheduled tasks chapter in Admin Suite's Control room module. If we configure it to run at 24-hour intervals, it will periodically check if any reservation orders match the number of days that corresponds with the PickupReminder:ReminderDays setting and trigger the e-mails.

When completing a cleanup task, you can instruct EVA to automatically refund the order by setting RefundAfterReservationOrderLineCancelled to true.

Useful link(s)

6. Required reservation time

Why do you need a required reservation time?

You might want to set a required reservation time to manage the flow of customers and ensure that items are prepared for pickup when customers arrive.

To set a specific time for a store to prepare a click-and-collect order, you can use the Orders:Reservation:RequiredReservationTime setting. This setting allows you to specify the amount of time the store needs to prepare a click-and-collect order before it becomes available for pick up.

Taking opening hours into consideration

The calculation will also consider opening hours. If this setting pushes the click-and-collect order past the end of the day, it will automatically roll over to the following day.

Useful link(s)

7. (In-store) Clean up reservations

What happens when customers don't pick up their orders?

It's not ideal, but it happens. At some point, some people are going to forget to pick up their reserved orders, or simply just had a change of mind. To prevent these reserved orders to hang around indefinitely, we've implemented reservation cleanup tasks. These tasks allow us to set a maximum reservation duration. Once this duration is exceeded, a reservation cleanup task is triggered.

This is made possible by setting ReservationCleanupTasks:Enabled to true. The previously mentioned scheduled task PickupReminder is responsible for generating these cleanup tasks at 30-minute intervals.

To configure the maximum amount of days, we use MaxReservationTime. By default, this is set to 7 days.

Useful link(s)