Appearance
Pickup Settings
Overview
Pickup (takeout) is one of the two online-ordering fulfillment channels (the other is delivery). It is not a standalone back-office page: all pickup options live on the Online Ordering page (Online → Online Ordering, route /online/online-ordering), spread across a few sections. The page itself is validated by StoreOnlineOrderingRequest, and its defaults come from Constants::$DEFAULT_ONLINE_ORDERING_SETTING['takeout'] and related keys.
Key Purpose: Enable customers to order for pickup (collection) and control pickup-specific timing, instructions, fees, and minimum order amount.
Purpose
This page lets you turn the pickup channel on/off, add a pickup-specific time buffer on top of the location's preparation time, set same-day / next-day cut-off times, allow scheduled pickup orders, and configure the three dedicated pickup options in the Pickup Settings section (pickup instructions, a pickup transaction fee, and a pickup minimum order amount).
Key Concepts
- Pickup = "takeout": In code the pickup channel is the
takeoutblock of the online ordering settings object. The toggle istakeout.enabled; the per-channel time buffer istakeout.delay. - Preparation Time is location-level: The base prep time is the
average_prep_timeproperty on the Location record (shown read-only on the Online Ordering page asaverage_prep_time_min). It is shared by pickup and delivery and is not part of the pickup/online-ordering settings object. To change it, go to Settings → Locations. (Same as for delivery — see Online Ordering.) - Pickup Delay (
takeout.delay): An additional buffer added on top of the location's preparation time for pickup orders. Default0(no adjustment). It is required (numeric) when pickup is enabled. - Scheduled Pickup: Whether customers may order for a future day is controlled by
schedule_order_for_future_days.takeout.enabled(defaulttrue) and…takeout.days_in_advance(default30, max365). There is no separate "ASAP" toggle — when scheduling is off, only the earliest/now-based slot logic applies. - Cut-off times: Pickup has independent same-day and next-day cut-off toggles (
takeout.same_day_cutoff,takeout.next_day_cutoff), each with anenabledflag and anH:itime. - Last Pickup Slot (
takeout.last_slot_at_closing_time): Controls whether the last offered pickup time slot is exactly the location's closing time (default,true) or one preparation time earlier (false). This is pickup-only — delivery always reserves the preparation time before closing, regardless of this setting.
Actions
Enable / Configure Pickup
In the top fulfillment card of the Online Ordering page, toggle pickup on/off (takeout.enabled) and optionally enter a pickup delay in minutes (takeout.delay) to extend the earliest available pickup time. You can also set same-day and next-day cut-off times here.
Allow Scheduled Pickup Orders
In the Fullfilment & Scheduling section, toggle schedule_order_for_future_days.takeout.enabled and set how many days in advance customers can order (days_in_advance, max 365).
Set the Last Pickup Slot
In the Fullfilment & Scheduling section, under "Last pickup slot at closing time", toggle takeout.last_slot_at_closing_time. On (default) means the last pickup slot offered is your closing time itself; off means the last slot is one preparation time before closing, so the order can still be prepared before the location closes. This affects pickup only — delivery always reserves the preparation time before closing.
Configure Pickup Instructions, Fee, and Minimum
In the Pickup Settings section (forms/PickupSettings.vue), enable and fill in:
- Pickup instructions (
pick_up_instructions) — free-text guidance shown at checkout. - Pickup transaction fee (
pickup_transaction_fee) — an extra fee charged on pickup orders. - Pickup minimum order amount (
pickup_minimum_order_amount) — a separate minimum that applies to pickup orders.
Location
- Backoffice Route:
/online/online-ordering(nav: Online → Online Ordering) - Backend Controller:
app/Http/Controllers/Api/BackOffice/OnlineOrderingController.php - Validation:
app/Http/Requests/BackOffice/OnlineOrdering/StoreOnlineOrderingRequest.php - Defaults:
app/Constants.php→$DEFAULT_ONLINE_ORDERING_SETTING - Vue (page):
src/pages/online/online-ordering/index.vue→src/views/online/online-ordering/OnlineOrdering.vue - Vue (Pickup Settings section):
src/views/online/online-ordering/forms/PickupSettings.vue - Vue (pickup enable / delay / cut-offs):
src/views/online/online-ordering/forms/OnlineOrdering.vue - Vue (scheduled pickup, last pickup slot):
src/views/online/online-ordering/forms/FullfilmentAndScheduling.vue
Note: The "Pickup Settings" entry is a section (
id="PickupSettings") within the single Online Ordering page, not a separate/pickup-and-delivery/pickuproute. Almost all pickup options are split between that section and the fulfilment/scheduling cards above it. The one exception is Pickup Available On (pickup_available_days), which is set on the Online Settings page (/online-settings) under Order Capacity Management → Delivery & Pickup Days.The section heading is spelled "Fullfilment & Scheduling" in the product (double
l, no secondlin "fulfilment"). This doc uses the product's spelling so it matches what a merchant sees on the page.
Fields
Enable Pickup
| Property | Value |
|---|---|
| Field ID | takeout.enabled |
| Label | Takeout |
| Type | Toggle |
| Default | true |
| Validation | required, boolean |
Description: Allow customers to order for pickup. This is the same takeout.enabled field described in the Online Ordering doc.
Customer Impact:
- Enabled: "Pickup" option available at checkout
- Disabled: Only delivery (if enabled) is available
Pickup Delay
| Property | Value |
|---|---|
| Field ID | takeout.delay |
| Label | Add Delay (placeholder text — the input has no separate label) |
| Type | Number |
| Unit | Minutes |
| Default | 0 |
| Validation | required, numeric (only when takeout.enabled is true) |
Description: Extra buffer time added on top of the location's preparation time for pickup orders. Leave at 0 to use the default preparation time with no adjustment.
Business Logic:
- Pickup earliest = Now + Location preparation time (
average_prep_time) + Pickup Delay - The field is shown next to a read-only chip displaying the location's preparation time (
average_prep_time_min), which links to the location's preparation-time setting.
Preparation Time (read-only here)
| Property | Value |
|---|---|
| Field ID | average_prep_time (Location record) |
| Label | Preparation Time |
| Type | Number |
| Unit | Minutes |
| Source | Location record (read-only on the Online Ordering page) |
Description: The base preparation time used for both pickup and delivery, and the number quoted to guests. This is a location-level setting (average_prep_time on the Location, returned via getAveragePrepTime()), not part of the online-ordering settings object or StoreOnlineOrderingRequest. Set it under Settings → Locations; the Online Ordering page displays it read-only and lets you add a pickup delay on top. Per-item prep times do not add to it — that behaviour is gated off platform-wide (see Menu Items).
Same-day Cut-off (Pickup)
| Property | Value |
|---|---|
| Field ID | takeout.same_day_cutoff.enabled (toggle) + takeout.same_day_cutoff.time (time) |
| Label | Same-day cut-off |
| Type | Toggle + Time (H:i) |
| Default | enabled: false, time: null |
| Validation | enabled: required boolean; time: required (H:i) when enabled |
Description: After this time, same-day pickup ordering closes and customers must choose a later day.
Next-day Cut-off (Pickup)
| Property | Value |
|---|---|
| Field ID | takeout.next_day_cutoff.enabled (toggle) + takeout.next_day_cutoff.time (time) |
| Label | Next-day cut-off |
| Type | Toggle + Time (H:i) |
| Default | enabled: false, time: null |
| Validation | enabled: required boolean; time: required (H:i) when enabled |
Description: Cut-off for next-day pickup ordering, mirroring the same-day cut-off.
Last Pickup Slot at Closing Time
| Property | Value |
|---|---|
| Field ID | takeout.last_slot_at_closing_time |
| Label | Last pickup slot at closing time |
| Type | Toggle |
| Default | true |
| Validation | sometimes|boolean (optional; boolean-cast on save) |
Description: Controls whether the last time slot offered for pickup is the location's closing time itself, or one preparation time earlier. Pickup-only — it has no effect on delivery, which always reserves the preparation time before closing regardless of this toggle.
Business Logic:
- On (default,
true): The last pickup slot equals closing time. - Off (
false): The last pickup slot is closing time minus the location's preparation time (average_prep_time), so the order can be finished before close. - Used by the order-capacity slot generator (
BlockedPeriodSlotExpander/ the front-endblockedTimeslotsutil) when computing which time-slot options to offer/block for pickup.
Allow Scheduled Pickup Orders
| Property | Value |
|---|---|
| Field ID | schedule_order_for_future_days.takeout.enabled |
| Label | Takeout — the toggle row under the card "Can customers schedule pickups & delivery for future days?" |
| Type | Toggle |
| Default | true |
| Validation | required, boolean |
Description: Allow customers to schedule pickup orders for future days. See Scheduled Orders.
Pickup Days in Advance
| Property | Value |
|---|---|
| Field ID | schedule_order_for_future_days.takeout.days_in_advance |
| Label | Reads as "Can be scheduled up to __ days in advance" |
| Type | Number |
| Unit | Days |
| Default | 30 |
| Validation | required, numeric, max: 365 (only when scheduled pickup is enabled). The back-office UI also clamps the value to the 0-365 range. |
Description: How many days ahead customers can schedule pickup.
Pickup Instructions
| Property | Value |
|---|---|
| Field ID | pick_up_instructions.enabled (toggle) + pick_up_instructions.placeholder (text) |
| Label | Pickup Instructions |
| Type | Toggle + Textarea |
| Default | enabled: false, placeholder: "Add some instructions..." |
| Validation | enabled: required boolean; placeholder: required string when enabled |
Description: Free-text pickup guidance for customers. The text lives in pick_up_instructions.placeholder (note the underscore spelling pick_up_instructions). It is only required when the toggle is on.
Examples:
- "Please collect your order at the counter and show your order number."
- "Ring the bell at the side entrance."
Pickup Transaction Fee
| Property | Value |
|---|---|
| Field ID | pickup_transaction_fee.enabled (toggle) + pickup_transaction_fee.fee (currency) |
| Label | Takeaway Transaction Fee (card) / Transaction fee (amount input) |
| Type | Toggle + Currency |
| Default | enabled: false, fee: 0 |
| Validation | enabled: nullable boolean; fee: required numeric, min: 0 (when enabled) |
Description: An additional fee charged on pickup orders. Enter the amount in the location's currency.
Pickup Minimum Order Amount
| Property | Value |
|---|---|
| Field ID | pickup_minimum_order_amount.enabled (toggle) + pickup_minimum_order_amount.amount (currency) |
| Label | Pickup Minimum Order Amount |
| Type | Toggle + Currency |
| Default | enabled: false, amount: 10 |
| Validation | enabled: required boolean; amount: required numeric (when enabled) |
Description: A minimum order value that applies specifically to pickup orders. This is separate from the general minimum_order_amount (see Online Ordering). When enabled, pickup orders below this amount are blocked at checkout.
Pickup Available Days
| Property | Value |
|---|---|
| Field ID | pickup_available_days |
| Label | Pickup Available On |
| Where | Online Settings (/online-settings) → Order Capacity Management → Delivery & Pickup Days — not the Online Ordering page |
| Type | Array of day names (day chips plus a "Select all" checkbox) |
| Default | All 7 days (Sunday–Saturday) |
| Validation | nullable array; each entry must be a valid day name |
Description: The weekdays on which pickup is offered ("Select which days customers can place pickup orders"). Stored as an array of English day names (e.g. ["Monday", "Tuesday", …]).
Business Logic
Pickup Time Calculation
Earliest pickup = Now + Location preparation time + Pickup delay (takeout.delay)- Location preparation time =
average_prep_timeon the Location record (read-only here). - Pickup delay =
takeout.delay(default 0). - Time-slot duration and capacity filtering are handled by the scheduling / order-capacity system, not by a pickup-specific field. See Scheduled Orders and Order Capacity.
Cut-offs and Scheduling
- Same-day and next-day cut-off times (
takeout.same_day_cutoff,takeout.next_day_cutoff) close same-day / next-day ordering after the configured time. - Whether future-day ordering is offered at all is controlled by
schedule_order_for_future_days.takeout(enabled + days_in_advance). - The last available pickup slot in a day is governed by
takeout.last_slot_at_closing_time: whentrue(default) it's exactly closing time; whenfalseit's closing time minus the location's preparation time. Delivery is never affected by this toggle — a delivery order always reserves the preparation time before closing.
Customer Impact
Online Ordering Checkout (storefront)
Storefront behavior below is not verified against the storefront codebase here; it describes the intended effect of the settings.
- Select "Pickup" as the fulfillment type (only if
takeout.enabled). - See an earliest time based on the location's prep time plus pickup delay.
- If scheduled pickup is enabled, pick a future day within
days_in_advance. - See any pickup instructions and pickup transaction fee.
- The order must meet the pickup minimum order amount (if enabled).
What Settings Affect
| Setting | Customer Sees |
|---|---|
takeout.enabled = false | No pickup option |
takeout.delay | Later earliest pickup time |
pickup_minimum_order_amount | "Minimum order amount" gate for pickup |
pickup_transaction_fee | Extra fee on pickup orders |
pick_up_instructions | Instructions shown at checkout |
schedule_order_for_future_days.takeout | Whether/how far ahead pickup can be scheduled |
Relations
Depends On
- Locations: Pickup settings (and the base preparation time) are per location
- Business Hours: Pickup is offered within open hours
- Order Capacity: Affects available time slots
Affects
- Online Ordering: Pickup is one of the two fulfillment channels
- Transactions: Pickup orders
- KDS: Order preparation timing
Related Features
Business Rules
- Pickup is the
takeoutblock of the online ordering settings object; the channel toggle istakeout.enabled(default true) and the per-channel buffer istakeout.delay(default 0, required numeric when pickup is enabled). - The base preparation time is the location-level
average_prep_time, shared by pickup and delivery; it is read-only on the Online Ordering page and is set under Settings → Locations. - The earliest pickup time is the location preparation time plus the pickup delay; there is no separate ASAP toggle and no pickup-specific time-slot-duration field.
- Pickup has its own minimum order amount (
pickup_minimum_order_amount) that is independent of the generalminimum_order_amount, plus an optional pickup transaction fee (pickup_transaction_fee). - Pickup instructions are stored in
pick_up_instructions.placeholderand are only required when thepick_up_instructions.enabledtoggle is on. - Same-day and next-day cut-off times for pickup are independent toggles, each requiring an
H:itime when enabled. - Scheduled pickup is governed by
schedule_order_for_future_days.takeout(enabled default true, days_in_advance default 30, max 365). takeout.last_slot_at_closing_time(defaulttrue) decides whether the last pickup time slot of the day is closing time itself or closing time minus the location's preparation time; it is pickup-only and does not change delivery's slot generation.
FAQs
- Where do I configure pickup? Mostly on the Online Ordering page (Online → Online Ordering). The pickup channel toggle, delay, and cut-offs are in the top fulfilment card; scheduling is in Fullfilment & Scheduling; instructions, transaction fee, and pickup minimum are in the Pickup Settings section. There is no separate pickup page. The one setting that lives elsewhere is Pickup Available On (which weekdays pickup is offered) — Online Settings → Order Capacity Management → Delivery & Pickup Days.
- How do I set the preparation time? I don't see it on the pickup section. The base preparation time is a location-level setting (
average_prep_time), shown read-only here. Set it under Settings → Locations, then add a pickup delay (takeout.delay) on top if you need extra buffer for pickup. - What is the pickup delay used for?
takeout.delayadds minutes on top of the location preparation time, specifically for pickup orders. Default 0 means no adjustment. - Can I require a different minimum for pickup than for delivery? Yes. There is a general
minimum_order_amountand a separatepickup_minimum_order_amount; pickup uses its own when enabled. - Can I charge a fee for pickup orders? Yes, enable
pickup_transaction_feeand set the fee amount (min 0). - Can I let customers schedule pickup for a future day? Yes. Enable
schedule_order_for_future_days.takeoutand setdays_in_advance(max 365). See Scheduled Orders. - Can I close same-day pickup after a certain time? Yes. Enable the pickup same-day cut-off (
takeout.same_day_cutoff) and set a time; a next-day cut-off is available too. - Why is a pickup time slot right at closing time being offered, when the order can't be prepared in time? By default (
takeout.last_slot_at_closing_time= true) the last pickup slot is closing time itself. If you want the last slot to leave room for preparation, turn off "Last pickup slot at closing time" in Fullfilment & Scheduling — the last slot then becomes closing time minus the location's preparation time. - Does the "last pickup slot" setting affect delivery too? No.
takeout.last_slot_at_closing_timeonly affects pickup. Delivery orders always reserve the preparation time before closing, regardless of this toggle.
Troubleshooting
Problem: No pickup option at checkout
Causes:
takeout.enabledis off- Online ordering is disabled or not accepting orders
- Pickup is closed for the day (cut-off passed or no pickup hours)
Solutions:
- Enable the pickup toggle in the top fulfillment card
- Check the master "Enable Online Ordering" and "Accepting Orders" toggles
- Review the same-day / next-day cut-off times
Problem: Earliest pickup time too late
Causes:
- Large location preparation time (
average_prep_time) - Large pickup delay (
takeout.delay)
Solutions:
- Review the preparation time under Settings → Locations
- Reduce
takeout.delay
Problem: Pickup orders blocked by a minimum
Causes:
pickup_minimum_order_amountis enabled and set above the cart total
Solutions:
- Lower the pickup minimum or disable it
Problem: Last pickup slot of the day is too close to closing / doesn't leave prep time
Causes:
takeout.last_slot_at_closing_timeistrue(the default), so the last offered pickup slot is exactly closing time.
Solutions:
- In Fullfilment & Scheduling, turn off "Last pickup slot at closing time" (
takeout.last_slot_at_closing_time→false) so the last slot becomes closing time minus the location's preparation time.
Assistant Guidance
When answering questions about this feature:
- Almost all pickup settings live on the Online Ordering page (
/online/online-ordering), split across the fulfilment card, the Fullfilment & Scheduling section (the double-lspelling is the product's own), and the Pickup Settings section — there is no separate pickup route. The exception is Pickup Available On (pickup_available_days), on Online Settings (/online-settings) → Order Capacity Management → Delivery & Pickup Days. - Don't confuse the location-level
average_prep_time(Settings → Locations) withtakeout.delay(an extra pickup-only buffer) ortakeout.last_slot_at_closing_time(which controls whether the last slot of the day includes prep time or not). All three interact but are independently configurable. takeout.last_slot_at_closing_timeis pickup-only; never claim it changes delivery's last slot — delivery always reserves prep time before closing.- If asked "why is a pickup slot offered right at closing time," point to
takeout.last_slot_at_closing_timebefore suggesting prep-time or delay changes.
Examples
These examples show only the pickup-relevant keys of the online ordering settings object. The base preparation time is the location-level
average_prep_time, which is not part of this object.
Pickup Enabled, No Delay
json
{
"takeout": {
"enabled": true,
"delay": 0,
"last_slot_at_closing_time": true,
"same_day_cutoff": { "enabled": false, "time": null },
"next_day_cutoff": { "enabled": false, "time": null }
},
"schedule_order_for_future_days": {
"takeout": { "enabled": true, "days_in_advance": 7 }
},
"pickup_minimum_order_amount": { "enabled": false, "amount": 10 },
"pickup_transaction_fee": { "enabled": false, "fee": 0 },
"pick_up_instructions": { "enabled": false, "placeholder": "Add some instructions..." }
}Pickup with Delay, Fee, and Instructions
json
{
"takeout": {
"enabled": true,
"delay": 10,
"last_slot_at_closing_time": false,
"same_day_cutoff": { "enabled": true, "time": "20:30" },
"next_day_cutoff": { "enabled": false, "time": null }
},
"schedule_order_for_future_days": {
"takeout": { "enabled": true, "days_in_advance": 14 }
},
"pickup_minimum_order_amount": { "enabled": true, "amount": 15 },
"pickup_transaction_fee": { "enabled": true, "fee": 0.50 },
"pick_up_instructions": {
"enabled": true,
"placeholder": "Please use the side entrance for pickup orders."
}
}