Auto-select active menu based on current time, allow manual override
When multiple menus exist, checks current time and day against menu schedules. If exactly one menu matches, auto-selects it. If times overlap or none match, shows all categories. User can still manually select any menu or 'All Menus' from the dropdown. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
41ef1631ef
commit
9091461079
2 changed files with 35 additions and 1 deletions
|
|
@ -82,6 +82,40 @@ try {
|
||||||
"MenuSortOrder": qMenus.MenuSortOrder[m]
|
"MenuSortOrder": qMenus.MenuSortOrder[m]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Auto-select menu based on current time when no specific menu requested
|
||||||
|
if (menuID == 0 && qMenus.recordCount > 1) {
|
||||||
|
now = timeFormat(now(), "HH:mm");
|
||||||
|
dayOfWeek = dayOfWeek(now()); // 1=Sun, 2=Mon, ... 7=Sat
|
||||||
|
dayBit = 2 ^ (dayOfWeek - 1); // bitmask: 1=Sun, 2=Mon, 4=Tue, etc.
|
||||||
|
activeMenuIds = [];
|
||||||
|
|
||||||
|
for (m = 1; m <= qMenus.recordCount; m++) {
|
||||||
|
// Check if menu is active today (days bitmask)
|
||||||
|
menuDays = qMenus.MenuDaysActive[m];
|
||||||
|
if (bitAnd(menuDays, dayBit) == 0) continue;
|
||||||
|
|
||||||
|
// Check time range
|
||||||
|
hasStart = !isNull(qMenus.MenuStartTime[m]);
|
||||||
|
hasEnd = !isNull(qMenus.MenuEndTime[m]);
|
||||||
|
if (hasStart && hasEnd) {
|
||||||
|
startT = timeFormat(qMenus.MenuStartTime[m], "HH:mm");
|
||||||
|
endT = timeFormat(qMenus.MenuEndTime[m], "HH:mm");
|
||||||
|
if (now >= startT && now <= endT) {
|
||||||
|
arrayAppend(activeMenuIds, qMenus.MenuID[m]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No time restriction = always active
|
||||||
|
arrayAppend(activeMenuIds, qMenus.MenuID[m]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If exactly one menu is active now, auto-select it
|
||||||
|
if (arrayLen(activeMenuIds) == 1) {
|
||||||
|
menuID = activeMenuIds[1];
|
||||||
|
}
|
||||||
|
// If multiple match (overlap) or none match, show all (menuID stays 0)
|
||||||
|
}
|
||||||
} catch (any e) {
|
} catch (any e) {
|
||||||
// Menus table might not exist yet
|
// Menus table might not exist yet
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3343,7 +3343,7 @@
|
||||||
const selector = document.getElementById('menuSelector');
|
const selector = document.getElementById('menuSelector');
|
||||||
if (!selector) return;
|
if (!selector) return;
|
||||||
|
|
||||||
let options = '<option value="0">All Categories</option>';
|
let options = '<option value="0">All Menus</option>';
|
||||||
for (const menu of this.menus) {
|
for (const menu of this.menus) {
|
||||||
const selected = menu.MenuID === this.selectedMenuId ? 'selected' : '';
|
const selected = menu.MenuID === this.selectedMenuId ? 'selected' : '';
|
||||||
options += `<option value="${menu.MenuID}" ${selected}>${this.escapeHtml(menu.MenuName)}</option>`;
|
options += `<option value="${menu.MenuID}" ${selected}>${this.escapeHtml(menu.MenuName)}</option>`;
|
||||||
|
|
|
||||||
Reference in a new issue