Appearance
Delivery Settings
Overview
Delivery Settings configure how customers can order for delivery. Set delivery fees, minimum orders, delivery times, and driver instructions.
Key Purpose: Configure delivery ordering options, fees, and timing.
Purpose
This page lets you configure all delivery-related settings for a location, including fees, minimum order amounts, timing, scheduling, delivery hours, and driver instructions.
Key Concepts
- Delivery Fee: A base charge added to the order total for delivery, which can be overridden by zone-specific fees when delivery zones are enabled.
- Free Delivery Threshold: An order subtotal above which the delivery fee is waived, encouraging customers to place larger orders.
- Delivery Time Calculation: Total delivery time = preparation time + delivery travel time + additional delay buffer. This determines the earliest available delivery slot.
- Time Slot Duration: The length of each selectable delivery window (e.g., 30-minute slots like "13:00-13:30"). Delivery slots are typically longer than pickup slots.
- Delivery Hours: Specific hours during which delivery is available, which can be different from (and typically narrower than) the location's general business hours.
Actions
Configure Delivery Settings
Set up or update all delivery parameters including enabling/disabling delivery, fees, minimums, preparation and delivery times, scheduling options, and delivery hours.
Set Free Delivery Threshold
Define an order amount above which delivery becomes free, or set to null to always charge the delivery fee.
Configure Delivery Zones
Toggle zone-based delivery on or off. When zones are enabled, area-specific fees and minimums from delivery zones override the base delivery settings.
Location
- Backoffice Route:
/pickup-and-delivery/delivery - Backend Controller:
app/Http/Controllers/Api/DeliveryController.php - Vue Component:
src/views/pickup-and-delivery/delivery/index.vue
Fields
Delivery Enabled
| Property | Value |
|---|---|
| Field ID | enabled |
| Label | Enable Delivery |
| Type | Toggle |
| Default | false |
Description: Allow customers to order for delivery.
Customer Impact:
- Enabled: "Delivery" option available at checkout
- Disabled: Only pickup or dine-in available
Delivery Fee
| Property | Value |
|---|---|
| Field ID | delivery_fee |
| Label | Delivery Fee |
| Type | Currency |
| Default | 0 |
| Validation | min: 0 |
Description: Base fee charged for delivery.
Customer Impact:
- Added to order total at checkout
- Shown before checkout
Note: Can be overridden by delivery zones.
Free Delivery Threshold
| Property | Value |
|---|---|
| Field ID | free_delivery_threshold |
| Label | Free Delivery Above |
| Type | Currency |
| Default | null (no free delivery) |
| Validation | min: 0 |
Description: Order amount above which delivery is free.
Customer Impact:
- "Free delivery on orders over €X"
- Encourages larger orders
Examples:
- €25: Free delivery on orders €25+
- €50: Free delivery on orders €50+
- null: Always charge delivery fee
Minimum Order Amount
| Property | Value |
|---|---|
| Field ID | minimum_order |
| Label | Minimum Order |
| Type | Currency |
| Default | 0 |
| Validation | min: 0 |
Description: Minimum order value required for delivery.
Customer Impact:
- "Minimum order €X for delivery"
- Can't checkout below minimum
Examples:
- €10: Low minimum
- €15: Standard minimum
- €25: Higher minimum
Preparation Time
| Property | Value |
|---|---|
| Field ID | prep_time |
| Label | Preparation Time |
| Type | Number |
| Unit | Minutes |
| Default | 20 |
| Validation | min: 5, max: 120 |
Description: Time to prepare a delivery order.
Delivery Time
| Property | Value |
|---|---|
| Field ID | delivery_time |
| Label | Delivery Time |
| Type | Number |
| Unit | Minutes |
| Default | 30 |
| Validation | min: 5, max: 120 |
Description: Estimated time for delivery after preparation.
Customer Impact:
- Total time = Prep Time + Delivery Time
- "Delivered in approximately X minutes"
Delivery Delay
| Property | Value |
|---|---|
| Field ID | delivery_delay |
| Label | Additional Delay |
| Type | Number |
| Unit | Minutes |
| Default | 0 |
| Validation | min: 0, max: 60 |
Description: Extra buffer time for busy periods.
ASAP Delivery
| Property | Value |
|---|---|
| Field ID | asap_enabled |
| Label | Allow ASAP Delivery |
| Type | Toggle |
| Default | true |
Description: Allow customers to order for immediate delivery.
Scheduled Delivery
| Property | Value |
|---|---|
| Field ID | scheduled_enabled |
| Label | Allow Scheduled Delivery |
| Type | Toggle |
| Default | true |
Description: Allow customers to schedule delivery for later.
Advance Ordering Days
| Property | Value |
|---|---|
| Field ID | advance_days |
| Label | Order Ahead Days |
| Type | Number |
| Unit | Days |
| Default | 7 |
| Validation | min: 1, max: 30 |
Description: How far in advance customers can schedule delivery.
Time Slot Duration
| Property | Value |
|---|---|
| Field ID | time_slot_duration |
| Label | Time Slot Duration |
| Type | Number |
| Unit | Minutes |
| Default | 30 |
| Validation | min: 15, max: 60 |
Description: Length of each delivery time slot.
Note: Delivery slots typically longer than pickup (30 min vs 15 min).
Delivery Hours
| Property | Value |
|---|---|
| Field ID | delivery_hours |
| Label | Delivery Hours |
| Type | Schedule |
| Default | Same as business hours |
Description: Specific hours when delivery is available.
Example:
- Business hours: 10:00 - 22:00
- Delivery hours: 11:00 - 21:00 (shorter window)
Delivery Instructions Field
| Property | Value |
|---|---|
| Field ID | show_delivery_instructions |
| Label | Show Delivery Instructions Field |
| Type | Toggle |
| Default | true |
Description: Allow customers to add delivery instructions.
Customer Impact:
- Text field for special instructions
- "Ring doorbell", "Leave at door", etc.
Driver Instructions
| Property | Value |
|---|---|
| Field ID | driver_instructions |
| Label | Default Driver Instructions |
| Type | Textarea |
| Required | No |
Description: Default instructions for all delivery drivers.
Examples:
- "Always call customer before delivery"
- "Do not leave orders unattended"
Delivery Radius
Use Delivery Zones
| Property | Value |
|---|---|
| Field ID | use_zones |
| Label | Use Delivery Zones |
| Type | Toggle |
| Default | true |
Description: Use delivery zones for area-based settings.
If Enabled: See Delivery Zones
Maximum Delivery Distance
| Property | Value |
|---|---|
| Field ID | max_distance |
| Label | Maximum Distance |
| Type | Number |
| Unit | Kilometers |
| Default | 10 |
| Depends On | use_zones = false |
Description: Maximum delivery distance from location.
Business Logic
Delivery Time Calculation
Current time: 12:00
Prep time: 20 minutes
Delivery time: 30 minutes
Delivery delay: 10 minutes
Earliest delivery: 12:00 + 20 + 30 + 10 = 13:00
Rounded to next slot (30 min slots):
Available from: 13:00Delivery Fee Calculation
Order subtotal: €22.00
Base delivery fee: €3.50
Free delivery threshold: €25.00
Subtotal < Threshold?
├── Yes → Charge delivery fee (€3.50)
└── No → Free delivery (€0.00)
OR with zones:
├── Check customer postal code
├── Find matching zone
└── Use zone's delivery feeAddress Validation
Customer enters address
│
▼
Validate address format
│
▼
Check delivery zones:
├── In zone? → Accept, apply zone settings
└── Not in zone? → "We don't deliver to this area"
OR check distance:
├── Within max distance? → Accept
└── Too far? → "Outside delivery area"Customer Impact
Online Ordering Checkout
- Select "Delivery" as order type
- Enter delivery address
- Address validated against zones/distance
- See delivery fee and minimum
- Choose ASAP or scheduled time
- Add delivery instructions (optional)
- Complete payment
- Track order status
Delivery Information Display
Delivery Details:
📍 Delivering to:
Kalverstraat 123
1012 AB Amsterdam
⏰ Estimated delivery: 13:00 - 13:30
(approximately 45 minutes)
💰 Delivery fee: €3.50
(Free delivery on orders over €25)
📝 Instructions:
"Ring doorbell twice, apartment 4B"Relations
Depends On
- Locations: Delivery settings per location
- Delivery Zones: Area-specific settings
- Business Hours: Delivery within hours
- Order Capacity: Affects slot availability
Affects
- Online Ordering: Delivery option
- Transactions: Delivery orders
- Reports: Delivery analytics
Related Features
Business Rules
- When delivery zones are enabled (
use_zones = true), zone-specific delivery fees and minimums override the base delivery fee and minimum order amount configured here. - The free delivery threshold applies to the order subtotal (before delivery fee); if the subtotal meets or exceeds the threshold, the delivery fee is waived to zero.
- Delivery hours can be configured separately from business hours, allowing a narrower delivery window (e.g., business hours 10:00-22:00 but delivery only 11:00-21:00).
- The earliest available delivery time is calculated as: current time + preparation time + delivery travel time + additional delay buffer, then rounded up to the next available time slot.
- If both ASAP and scheduled delivery are disabled, no delivery time slots will be available and customers cannot place delivery orders.
FAQs
- What is the difference between delivery fee and zone fee? The delivery fee here is the base/default fee. When delivery zones are enabled, each zone can have its own fee that overrides this base fee for customers in that zone.
- How does the free delivery threshold work? If a customer's order subtotal reaches or exceeds the threshold amount, the delivery fee drops to zero. If the threshold is set to null, the delivery fee always applies.
- Can delivery hours be different from pickup hours? Yes. Delivery hours, pickup hours, and general business hours are all configured independently, allowing you to offer each service during different time windows.
- What does the additional delay setting do? The delivery delay adds extra buffer time on top of preparation and delivery times. Use it during busy periods to give the kitchen and drivers more breathing room.
- Can customers add delivery instructions? Yes, if the "Show Delivery Instructions" toggle is enabled. Customers can enter free-text instructions like "Ring doorbell" or "Leave at door" during checkout.
Troubleshooting
Problem: "We don't deliver to this area"
Causes:
- Address outside delivery zones
- Address beyond max distance
- Postal code not configured
- Address validation error
Solutions:
- Add postal code to delivery zone
- Increase max distance
- Configure postal codes
- Check address format
Problem: Delivery fee incorrect
Causes:
- Zone fee overriding base fee
- Free delivery threshold applied
- Wrong zone matched
Solutions:
- Check zone settings
- Verify threshold setting
- Review zone postal codes
Problem: No delivery times available
Causes:
- Outside delivery hours
- Capacity limits reached
- All slots in past
- Delivery disabled
Solutions:
- Check delivery hours
- Increase capacity
- Try scheduling for later
- Enable delivery
Problem: Delivery taking too long
Causes:
- Prep time underestimated
- Delivery time underestimated
- High order volume
- Driver delays
Solutions:
- Increase prep time
- Increase delivery time
- Add delivery delay during busy times
- Manage driver capacity
Examples
Standard Delivery Settings
json
{
"enabled": true,
"delivery_fee": 3.50,
"free_delivery_threshold": 25,
"minimum_order": 15,
"prep_time": 20,
"delivery_time": 30,
"delivery_delay": 0,
"asap_enabled": true,
"scheduled_enabled": true,
"advance_days": 7,
"time_slot_duration": 30,
"show_delivery_instructions": true,
"use_zones": true
}Premium Delivery (Free)
json
{
"enabled": true,
"delivery_fee": 0,
"free_delivery_threshold": null,
"minimum_order": 20,
"prep_time": 25,
"delivery_time": 25,
"asap_enabled": true,
"scheduled_enabled": true,
"driver_instructions": "Always call customer 5 minutes before arrival"
}Limited Delivery Hours
json
{
"enabled": true,
"delivery_fee": 4.50,
"minimum_order": 20,
"delivery_hours": {
"Monday": { "enabled": true, "from": "17:00", "to": "21:00" },
"Tuesday": { "enabled": true, "from": "17:00", "to": "21:00" },
"Wednesday": { "enabled": true, "from": "17:00", "to": "21:00" },
"Thursday": { "enabled": true, "from": "17:00", "to": "21:00" },
"Friday": { "enabled": true, "from": "17:00", "to": "22:00" },
"Saturday": { "enabled": true, "from": "12:00", "to": "22:00" },
"Sunday": { "enabled": true, "from": "12:00", "to": "21:00" }
}
}Delivery Time Selection UI
┌─────────────────────────────────────┐
│ When would you like delivery? │
├─────────────────────────────────────┤
│ │
│ ○ ASAP (Delivered in ~45 min) │
│ │
│ ● Schedule for later │
│ │
│ Date: [Today ▼] │
│ │
│ Time: │
│ ┌───────────┐ ┌───────────┐ │
│ │13:00-13:30│ │13:30-14:00│ │
│ └───────────┘ └───────────┘ │
│ ┌───────────┐ ┌───────────┐ │
│ │14:00-14:30│ │14:30-15:00│ │
│ └───────────┘ └───────────┘ │
│ │
│ Delivery Instructions (optional): │
│ ┌─────────────────────────────────┐│
│ │ Ring doorbell, apt 4B ││
│ └─────────────────────────────────┘│
│ │
│ [Continue] │
└─────────────────────────────────────┘Order Summary with Delivery
Order Summary
─────────────────────────────────────
Margherita Pizza (L) €15.50
Garlic Bread €4.50
2x Cola €5.00
─────────────────────────────────────
Subtotal €25.00
Delivery Fee €0.00 ✓
(Free delivery on orders €25+)
─────────────────────────────────────
Total €25.00
─────────────────────────────────────
📍 Delivery to:
Kalverstraat 123, Amsterdam
⏰ Estimated: 13:00 - 13:30