Skip to content

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 takeout block of the online ordering settings object. The toggle is takeout.enabled; the per-channel time buffer is takeout.delay.
  • Preparation Time is location-level: The base prep time is the average_prep_time property on the Location record (shown read-only on the Online Ordering page as average_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. Default 0 (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 (default true) and …takeout.days_in_advance (default 30, max 365). 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 an enabled flag and an H:i time.
  • 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.vuesrc/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/pickup route. 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 second l in "fulfilment"). This doc uses the product's spelling so it matches what a merchant sees on the page.

Fields

Enable Pickup

PropertyValue
Field IDtakeout.enabled
LabelTakeout
TypeToggle
Defaulttrue
Validationrequired, 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

PropertyValue
Field IDtakeout.delay
LabelAdd Delay (placeholder text — the input has no separate label)
TypeNumber
UnitMinutes
Default0
Validationrequired, 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)

PropertyValue
Field IDaverage_prep_time (Location record)
LabelPreparation Time
TypeNumber
UnitMinutes
SourceLocation 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)

PropertyValue
Field IDtakeout.same_day_cutoff.enabled (toggle) + takeout.same_day_cutoff.time (time)
LabelSame-day cut-off
TypeToggle + Time (H:i)
Defaultenabled: false, time: null
Validationenabled: 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)

PropertyValue
Field IDtakeout.next_day_cutoff.enabled (toggle) + takeout.next_day_cutoff.time (time)
LabelNext-day cut-off
TypeToggle + Time (H:i)
Defaultenabled: false, time: null
Validationenabled: 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

PropertyValue
Field IDtakeout.last_slot_at_closing_time
LabelLast pickup slot at closing time
TypeToggle
Defaulttrue
Validationsometimes|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-end blockedTimeslots util) when computing which time-slot options to offer/block for pickup.

Allow Scheduled Pickup Orders

PropertyValue
Field IDschedule_order_for_future_days.takeout.enabled
LabelTakeout — the toggle row under the card "Can customers schedule pickups & delivery for future days?"
TypeToggle
Defaulttrue
Validationrequired, boolean

Description: Allow customers to schedule pickup orders for future days. See Scheduled Orders.


Pickup Days in Advance

PropertyValue
Field IDschedule_order_for_future_days.takeout.days_in_advance
LabelReads as "Can be scheduled up to __ days in advance"
TypeNumber
UnitDays
Default30
Validationrequired, 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

PropertyValue
Field IDpick_up_instructions.enabled (toggle) + pick_up_instructions.placeholder (text)
LabelPickup Instructions
TypeToggle + Textarea
Defaultenabled: false, placeholder: "Add some instructions..."
Validationenabled: 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

PropertyValue
Field IDpickup_transaction_fee.enabled (toggle) + pickup_transaction_fee.fee (currency)
LabelTakeaway Transaction Fee (card) / Transaction fee (amount input)
TypeToggle + Currency
Defaultenabled: false, fee: 0
Validationenabled: 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

PropertyValue
Field IDpickup_minimum_order_amount.enabled (toggle) + pickup_minimum_order_amount.amount (currency)
LabelPickup Minimum Order Amount
TypeToggle + Currency
Defaultenabled: false, amount: 10
Validationenabled: 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

PropertyValue
Field IDpickup_available_days
LabelPickup Available On
WhereOnline Settings (/online-settings) → Order Capacity Management → Delivery & Pickup Days — not the Online Ordering page
TypeArray of day names (day chips plus a "Select all" checkbox)
DefaultAll 7 days (Sunday–Saturday)
Validationnullable 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_time on 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: when true (default) it's exactly closing time; when false it'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.

  1. Select "Pickup" as the fulfillment type (only if takeout.enabled).
  2. See an earliest time based on the location's prep time plus pickup delay.
  3. If scheduled pickup is enabled, pick a future day within days_in_advance.
  4. See any pickup instructions and pickup transaction fee.
  5. The order must meet the pickup minimum order amount (if enabled).

What Settings Affect

SettingCustomer Sees
takeout.enabled = falseNo pickup option
takeout.delayLater earliest pickup time
pickup_minimum_order_amount"Minimum order amount" gate for pickup
pickup_transaction_feeExtra fee on pickup orders
pick_up_instructionsInstructions shown at checkout
schedule_order_for_future_days.takeoutWhether/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

Business Rules

  • Pickup is the takeout block of the online ordering settings object; the channel toggle is takeout.enabled (default true) and the per-channel buffer is takeout.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 general minimum_order_amount, plus an optional pickup transaction fee (pickup_transaction_fee).
  • Pickup instructions are stored in pick_up_instructions.placeholder and are only required when the pick_up_instructions.enabled toggle is on.
  • Same-day and next-day cut-off times for pickup are independent toggles, each requiring an H:i time 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 (default true) 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.delay adds 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_amount and a separate pickup_minimum_order_amount; pickup uses its own when enabled.
  • Can I charge a fee for pickup orders? Yes, enable pickup_transaction_fee and set the fee amount (min 0).
  • Can I let customers schedule pickup for a future day? Yes. Enable schedule_order_for_future_days.takeout and set days_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_time only affects pickup. Delivery orders always reserve the preparation time before closing, regardless of this toggle.

Troubleshooting

Problem: No pickup option at checkout

Causes:

  1. takeout.enabled is off
  2. Online ordering is disabled or not accepting orders
  3. Pickup is closed for the day (cut-off passed or no pickup hours)

Solutions:

  1. Enable the pickup toggle in the top fulfillment card
  2. Check the master "Enable Online Ordering" and "Accepting Orders" toggles
  3. Review the same-day / next-day cut-off times

Problem: Earliest pickup time too late

Causes:

  1. Large location preparation time (average_prep_time)
  2. Large pickup delay (takeout.delay)

Solutions:

  1. Review the preparation time under Settings → Locations
  2. Reduce takeout.delay

Problem: Pickup orders blocked by a minimum

Causes:

  1. pickup_minimum_order_amount is enabled and set above the cart total

Solutions:

  1. 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:

  1. takeout.last_slot_at_closing_time is true (the default), so the last offered pickup slot is exactly closing time.

Solutions:

  1. In Fullfilment & Scheduling, turn off "Last pickup slot at closing time" (takeout.last_slot_at_closing_timefalse) 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-l spelling 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) with takeout.delay (an extra pickup-only buffer) or takeout.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_time is 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_time before 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."
  }
}