Skip to main content

Menu Schedules

Configure time-based pricing across revenue centers in the Maitre'D Virtuo back office.

📋 What Are Menu Schedules?

Menu Schedules let you define named time periods — such as Breakfast, Lunch, Happy Hour, or Dinner — and assign different prices to products, modifiers, and remarks for each period. Schedules are configured per revenue center, so your dine-in pricing can follow a different daily rhythm than your takeout or delivery pricing.

For example, a restaurant might charge less for burgers during a weekday lunch rush on dine-in tables, while keeping delivery prices flat all day. Menu Schedules make this possible without duplicating products or maintaining separate menus.


➕ Creating Menu Schedules

Menu Schedules list page

Navigate to Menu > Menu schedules in the left sidebar. This page lists all schedules that have been created for the current location. To create a new schedule, click the orange New menu schedule button.

Schedule edit page

Each schedule has a single field: a Name (up to 15 characters). Choose something short and recognizable — this name appears on the workstation when staff are operating under that schedule. Use Manage translations to provide the name in other languages.

The ••• menu on each row gives you Edit and Delete options. Deleting a schedule removes it from all revenue centers and pricing grids, so use with caution.

Menu schedules can also be created at the organization level under Global Menu > Menu schedules. Organization-level schedules are available across all locations under that organization.


📅 Assigning Schedules to Revenue Centers

Revenue Center schedule grid

Schedules don't do anything until they are assigned to a revenue center with start times. Navigate to Menu > Revenue Centers, open a revenue center, and scroll to the Menu schedules section.

The grid has one row per schedule and one column per day of the week (Monday through Sunday). Each cell is a time picker where you set the start time for that schedule on that day. To add a schedule, use the Select schedule dropdown at the bottom and click Add.

Key concept: the rows form an ordered timeline. There is no explicit end time — a schedule runs from its start time until the next schedule in the sequence begins. The order of rows matters and can be rearranged using the drag handles (::) on the left side of each row.

Example — a non-contiguous schedule:
Schedules don't need to be unique in the sequence. You can repeat the same schedule to create non-contiguous blocks. For instance:

Regular — starts at 8:00 AM
Happy Hour — starts at 2:00 PM
Regular — starts at 5:00 PM

In this setup, "Regular" pricing applies from 8 AM–2 PM and again from 5 PM through close, with "Happy Hour" pricing sandwiched in between. On the pricing grid, there is still just one "Regular" column — the price is the same whenever Regular is active, regardless of which block of the day it is.

Days with no time set (shown as --:-- --) mean the schedule is inactive on that day for that revenue center. Use the × next to a time to clear it. The red X button at the end of a row removes the schedule from this revenue center entirely.


💲 Setting Schedule-Based Pricing

Product pricing grid with schedule columns

Once schedules are created and assigned to revenue centers, a pricing grid appears on every Product (under the Product variants tab), Modifier, and Remark edit page.

The grid has one row per revenue center and one column per schedule, plus a Default column on the left. The Default price is what the workstation uses when no schedule is active or when a schedule-specific price hasn't been set.

To set a schedule-specific price, click a cell and enter the new value. Leave a cell empty to use the Default price for that combination. Use the × button in a cell to clear a schedule-specific override and revert to Default.

Bulk editing shortcuts: Use Ctrl/Cmd + click on a cell to toggle it. Click a row name (e.g. "Table") to select or deselect the entire row. Click a column header (e.g. "Happy Hour") to select or deselect the entire column. This makes it fast to set the same price across multiple revenue centers or schedules at once.

A cell appears greyed out when there is no association between that schedule and that revenue center — meaning the schedule hasn't been added to the revenue center's configuration. You cannot enter a price in a greyed cell until the schedule is assigned to that revenue center.

Modifier pricing grid

The pricing grid on Modifiers and Remarks works identically. Each has its own Price Configuration tab with the same revenue center × schedule grid.


🖥️ How Schedules Work on the Workstation

When schedules are configured, the workstation automatically transitions to the correct schedule based on the current time and the start times defined in the revenue center configuration. The active schedule name is displayed on the POS interface so staff always know which pricing period is in effect.

If a staff member has the schedule change permission on their role, they can manually override the active schedule from a cart action popup on the workstation. This is useful for edge cases — for example, honouring lunch pricing for a table that was seated just before the dinner schedule kicked in.

Manual overrides are sticky: When a table is manually set to a schedule, it stays locked to that schedule until a staff member changes it again. The automatic time-based transition is ignored for that table. This ensures the pricing stays consistent for the duration of the guest's visit.


✅ Summary of the Setup Flow

  1. Create schedules — Go to Menu > Menu schedules and create named time periods (e.g. Breakfast, Lunch, Happy Hour).

  2. Assign to revenue centers — Open each revenue center and add the relevant schedules with their start times per day of the week.

  3. Set prices — Open each product, modifier, or remark and use the Price Configuration grid to set schedule-specific prices where they differ from the Default.

  4. Verify on the workstation — Confirm that the workstation transitions between schedules at the expected times and that prices update accordingly.

Did this answer your question?