The item list loads automatically from the Off The Rails Google Sheet. Use this screen to optionally connect the shared orders backend (Apps Script) so all chefs' orders pool into one live list.
Apps Script Setup (one-time)
In your Google Sheet go to Extensions → Apps Script, paste this code, click Deploy → New deployment → Web app (Anyone can access), copy the URL above.
// Paste into Google Apps Script
const RESET_HOUR = 9;
function doGet(e) {
const action = e.parameter.action || '';
const sheetName = e.parameter.sheet || 'OTR Daily Orders';
if (action === 'clear') {
clearOrders(sheetName);
return ContentService.createTextOutput('ok');
}
if (action === 'deleteline') {
const sku = e.parameter.sku || '';
deleteOrderLine(sku, sheetName);
return ContentService.createTextOutput('ok');
}
if (action === 'editline') {
const sku = e.parameter.sku || '';
const sup = e.parameter.sup || '';
const name = e.parameter.name || '';
const qty = e.parameter.qty || '';
const time = e.parameter.time || '';
deleteOrderLine(sku, sheetName);
const sh = getOrderSheet(sheetName);
sh.appendRow([getTodayKey(), 'EDIT', time, sup, name, sku, qty]);
return ContentService.createTextOutput('ok');
}
return ContentService.createTextOutput('ok');
}
function doPost(e) {
const data = JSON.parse(e.postData.contents);
const sheetName = data.sheetName || 'OTR Daily Orders';
return writeOrder(data, sheetName);
}
function getTodayKey() {
const now = new Date();
if (now.getHours() < RESET_HOUR) now.setDate(now.getDate() - 1);
return Utilities.formatDate(now, 'GMT', 'yyyy-MM-dd');
}
function getOrderSheet(sheetName) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sh = ss.getSheetByName(sheetName);
if (!sh) {
sh = ss.insertSheet(sheetName);
sh.appendRow(['Date','Chef','Time','Supplier','Item','SKU','Qty']);
}
return sh;
}
function deleteOrderLine(sku, sheetName) {
const sh = getOrderSheet(sheetName);
const today = getTodayKey();
const rows = sh.getDataRange().getValues();
for (let i = rows.length - 1; i >= 1; i--) {
if (rows[i][0] === today && String(rows[i][5]) === String(sku)) {
sh.deleteRow(i + 1);
}
}
}
function writeOrder(data, sheetName) {
const sh = getOrderSheet(sheetName);
const today = getTodayKey();
data.items.forEach(item => {
sh.appendRow([today, data.chef, data.time,
item.supplier, item.name, item.sku, item.qty]);
});
return ContentService.createTextOutput('ok');
}
function clearOrders(sheetName) {
const sh = getOrderSheet(sheetName);
const today = getTodayKey();
const rows = sh.getDataRange().getValues();
for (let i = rows.length - 1; i >= 1; i--) {
if (rows[i][0] === today) sh.deleteRow(i + 1);
}
}