Skip the setup. Our team will have you taking orders in 24 hours. Get started →
Extensions

Group Order

Installation Getting started Adding the Start Group Order button on your menus page Creating the Join Group Order page Configuration Automation events Auto...

You can install the extension via composer using the following command:

composer require igniterlabs/ti-ext-grouporder -W

Run the database migrations to create the required tables:

php artisan igniter:up

This section walks you through setting up group ordering for your restaurant so customers can order together with friends and family.

Run the following command to publish the extension's theme files to your active theme:

php artisan igniter:theme-publish

Alternatively, you can manually add the Start Group Order button to your menu page by following the steps below:

  • Navigate to the Theme Template Editor under Design > Themes then click the file icon next to your active theme
  • On the Theme Template Editor page, select Pages under the Template section, then choose Menus [local.menus] page to edit.
  • From the Choose a component to attach dropdown, select Group Order - Start group order to attach the component to the page.
  • Under the Markup tab, add the following HTML where you want the Start Group Order button to appear. Typically, this is somewhere on the menus page.
<div class="d-flex justify-content-end mt-3">
    <livewire:igniterlabs.grouporder::start-group-order/>
</div>

After adding the HTML code above, your markup should look similar to this:

<div class="col-lg-4 mt-4 mt-lg-0">
    <div class="d-flex justify-content-end">
        <div class="local-control p-3 border rounded">
            <div class="d-inline-block w-100 fw-bold text-sm-left text-md-center">
                <x-igniter-orange::fulfillment/>
            </div>
        </div>
    </div>
    <div class="d-flex justify-content-end mt-3">
        <livewire:igniterlabs.grouporder::start-group-order/>
    </div>
</div>
  • Click the Save button to save your changes.

If you have not already done so, run the following command to publish the extension's theme files to your active theme:

php artisan igniter:theme-publish

Alternatively, you can manually create the Join Group Order page by following the steps below:

  • Navigate to the Theme Template Editor under Design > Themes then click the file icon next to your active theme
  • On the Theme Template Editor page, select Pages under the Template section, then click the New Page button to create a new page.
  • In the Create Page form, enter the following details:
    • Template filename: group-order.join
  • Click the Save button to create the page.
  • After creating the page, add the following HTML code to the page's markup:
<div class="container pt-5 pb-4">

    <div class="row">
        <div class="col-sm-6 m-auto">
            <div class="card mb-4">
                <div class="card-body">
                    <livewire:igniterlabs.grouporder::join-group-order/>
                </div>
            </div>
        </div>
    </div>
</div>
  • From the Choose a component to attach dropdown, select Join Group Order to attach the component to the page.
  • Click the Save button to save your changes.

From your TastyIgniter Admin, navigate to Manage > Settings > Group Order Settings to configure global settings.

Set a time limit for guests to join and submit their orders before the ready time:

  1. Go to Settings > Group Order Settings
  2. Switch on Enable Order Deadline
  3. Set Deadline (minutes before ready time) to your desired value (e.g., 30 minutes)
  4. Click Save

Require a minimum number of guests to submit their orders before the host can checkout:

  1. Go to Settings > Group Order Settings
  2. Set Minimum Guests Required to your desired value (e.g., 2)
    • Set to 0 to disable this requirement
  3. Click Save

Override global settings for specific locations:

  1. Go to Manage > Locations
  2. Find the location you want to customize and click the settings icon (gear/cog)
  3. Navigate to the Group Order under General tab
  4. Configure the following options:
    • Enable Group Ordering: Toggle group ordering on/off for this location
    • Enable Deadline: Override the global deadline setting (-1 uses global, 0 disables, 1 enables)
    • Deadline Minutes: Set a custom deadline for this location
    • Minimum Guests Required: Set a custom minimum guest requirement
  5. Click Save

The extension provides automation rules for group orders. Navigate to Manage > Automation > Rules to create custom automation based on group order events.

The extension dispatches an automation.groupOrder.schedule.hourly event every hour for active group orders created within the last 30 days. Use this to:

  • Send reminder emails to guests who haven't submitted
  • Notify hosts about pending guests

Add a Group Order Attribute condition to your automation rules to check:

Attribute Description
Group order status Active, Locked, Completed, or Canceled
Has pending guests Whether guests are still adding items
Has deadline set Whether a deadline is configured
Hours until deadline Time remaining until deadline
Is past deadline Whether the deadline has passed

This section covers how to integrate with the Group Order extension programmatically.

Retrieve the current group order from the session:

use IgniterLabs\GroupOrder\Classes\Manager;

$manager = resolve(Manager::class);

// Get the current group order (returns null if none active)
$groupOrder = $manager->current();

// Check if user is the host
$isHost = $manager->isCurrentHost();

// Check if user is a guest
$isGuest = $manager->isCurrentGuest();

// Get the current guest record
$guest = $manager->getGuest();
use IgniterLabs\GroupOrder\Actions\StartGroupOrder;
use IgniterLabs\GroupOrder\Models\GroupOrder;

$groupOrder = resolve(StartGroupOrder::class)->handle($customer, $location, [
    'split_bill' => true, // or false
    'spending_limit' => 20, // Optional, only used if split_bill is true
]);
use IgniterLabs\GroupOrder\Actions\JoinGroupOrder;

$guest = resolve(JoinGroupOrder::class)->handle($groupOrder, [
    'first_name' => 'John',
    'last_name' => 'Doe',
    'email' => '[email protected]',
]);
use IgniterLabs\GroupOrder\Actions\SendInvite;

resolve(SendInvite::class)->handle($groupOrder, '[email protected]');
use IgniterLabs\GroupOrder\Actions\LockGroupOrder;

resolve(LockGroupOrder::class)->handle($groupOrder);
use IgniterLabs\GroupOrder\Actions\CancelGroupOrder;

resolve(CancelGroupOrder::class)->handle($groupOrder);
use IgniterLabs\GroupOrder\Actions\RemoveGuest;

resolve(RemoveGuest::class)->handle($groupOrder, $guest);

The extension dispatches events that you can listen to for custom integrations:

Fired when a customer creates a new group order:

Event::listen('groupOrder.started', function($groupOrder) {
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when a guest joins the group order:

Event::listen('groupOrder.joined', function($guest, $groupOrder) {
    // $guest: IgniterLabs\GroupOrder\Models\Guest model
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when a guest submits their order:

Event::listen('groupOrder.guestSubmitted', function($guest) {
    // $guest: IgniterLabs\GroupOrder\Models\Guest model
});

Fired when a guest leaves the group order:

Event::listen('groupOrder.guestLeft', function($guest, $groupOrder) {
    // $guest: IgniterLabs\GroupOrder\Models\Guest model
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when the host removes a guest from the group order:

Event::listen('groupOrder.guestRemoved', function($guest, $groupOrder) {
    // $guest: IgniterLabs\GroupOrder\Models\Guest model
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when the host sends an email invitation:

Event::listen('groupOrder.inviteSent', function($groupOrder, $email) {
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
    // $email: string - The email address the invite was sent to
});

Fired when the host locks the group order:

Event::listen('groupOrder.locked', function($groupOrder) {
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when the host cancels the group order:

Event::listen('groupOrder.canceled', function($groupOrder) {
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when the host extends the order deadline:

Event::listen('groupOrder.deadlineExtended', function($groupOrder) {
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Fired when a group order is set as the current session order:

Event::listen('groupOrder.setCurrent', function($groupOrder) {
    // $groupOrder: IgniterLabs\GroupOrder\Models\GroupOrder model
});

Two permissions control access to group order features in the admin panel:

Permission Purpose
IgniterLabs.GroupOrder.Manage Allow viewing and editing group orders
IgniterLabs.GroupOrder.Delete Allow deleting group orders

Assign these in Manage > Staff members > Roles.

The extension registers the following mail templates:

Template Purpose
igniterlabs.grouporder::mail.invite Email sent to guests with the invite link

Customize this template in Design > Mail Templates.

Did this answer your question?

Your feedback helps us improve our help articles.

Need more help?

Explore the help center, join the community, or get priority support from the TastyIgniter team.