<%- include('partials/forno-logo', { settings, small: true, link: '/' }) %> Panel managera · rezerwacje
<% if (ok) { %>
<%= ok %>
<% } %> <% if (err) { %><% } %>
<%= summary.tablesFree %> / <%= summary.tablesTotal %>wolnych stolików
<%= summary.peopleReserved %>osób (aktywne)
<%= summary.byStatus.pending %>oczekuje na opłatę
<%= summary.byStatus.paid %>opłaconych
<%= fmt.money(summary.paidAmount) %>wpłacono
<%= fmt.money(summary.pendingAmount) %>do zapłaty
<% if (dueReminders.length) { %>

<%- include('partials/forno-icon', { name: 'bell', size: 22 }) %> Przypomnienia do wysłania (≤ 6 h do terminu)

<% if (!smsStatus.enabled) { %>
Automatyczny SMS jest wyłączony (brak konfiguracji FORNO_SMS_*). Zadzwoń lub napisz do gości ręcznie.
<% } else if (!tasksConfigured) { %>
Brak TASKS_TOKEN — cron nie może wywołać /tasks/run. Wyślij przypomnienia ręcznie przyciskiem obok.
<% } %>
<% } %>

<%- include('partials/forno-icon', { name: 'list', size: 22 }) %> Rezerwacje (<%= reservations.length %>)

<% if (reservations.length) { %> <% } %> <% if (!reservations.length) { %>

Brak rezerwacji<%= filter !== 'all' ? ' o tym statusie' : '' %>.

<% } else { %>
<% reservations.forEach((r) => { %> <% }) %>
# Kod Gość Osoby Kwota Termin opłaty Status Akcje
<%= r.id %> <%= r.code %> <%= r.name %>
<%= r.phone %> <% if (r.note) { %>
💬 <%= r.note %><% } %>
zgłoszono <%= fmt.dateTime(r.created_at) %>
<%= r.people %> os.
<%= fmt.tables(r.tables) %>
<%= fmt.money(r.amount) %> <%= fmt.dateTime(r.payment_deadline) %> <% if (r.reminder_sent_at) { %>
SMS ✅ <%= fmt.dateTime(r.reminder_sent_at) %> <% } else if (r.reminder_result && r.reminder_result !== 'ok') { %>
SMS ✖ <%= r.reminder_result %><% } %>
<%= STATUS_LABELS[r.status] %> <% if (r.paid_at) { %>
<%= fmt.dateTime(r.paid_at) %><% } %>
<% if (r.status === 'pending') { %>
<% } else if (r.status === 'paid') { %>
<% } else { %>
<% } %> <%- include('partials/forno-icon', { name: 'receipt', size: 16 }) %> Paragon <% if (r.status === 'pending') { %>
<% } %>
<% } %>

<%- include('partials/forno-icon', { name: 'settings', size: 22 }) %> Ustawienia wydarzenia

Ciepły, zachęcający tekst pod tytułem na stronie rezerwacji (np. „Zarezerwuj stolik w 30 sekund — do zobaczenia!”).
Czas polski (Europe/Warsaw).
Krótki, ludzki tekst pokazywany gościowi na stronie potwierdzenia (gdy rezerwacja czeka na opłatę). Uzupełnia kroki „Co dalej?" — np. o elastyczność terminu, kontakt w razie problemu.

<%- include('partials/forno-icon', { name: 'image', size: 22 }) %> Logo

<% if (settings.logo_data_url) { %> Aktualne logo <% } else { %> <%= settings.venue_name %> <% } %>

<%= settings.logo_data_url ? 'Logo jest ustawione — wyświetla się na stronie rezerwacji, potwierdzeniu i paragonie.' : 'Brak logo — używany jest napis tekstowy „' + settings.venue_name + '”.' %>

Zalecane: PNG lub SVG na przezroczystym tle, szerokie/poziome, do <%= logoMaxKb %> KB. Logo jest zapisywane w ustawieniach (przeżywa restart serwera).
<% if (settings.logo_data_url) { %>
<% } %>

<%- include('partials/forno-icon', { name: 'wrench', size: 22 }) %> System

Zapis do GitHub

Status
<%= syncStatus.enabled ? 'włączony (' + syncStatus.owner + '/' + syncStatus.repo + ')' : 'wyłączony — brak GITHUB_TOKEN, dane znikną po restarcie!' %>
<% if (syncStatus.lastSuccess) { %>
Ostatni commit
<%= syncStatus.lastSuccess %> (<%= fmt.dateTime(syncStatus.lastSuccessTime) %>)
<% } %> <% if (syncStatus.lastError) { %>
Błąd
<%= syncStatus.lastError %>
<% } %>

SMS (<%= smsStatus.provider %>)

Status
<%= smsStatus.enabled ? 'włączony' + (smsStatus.dryRun ? ' — DRY RUN (nie wysyła)' : '') : 'wyłączony — brak FORNO_SMS_USERNAME/PASSWORD' %>
Wysłane
<%= smsStatus.sentCount %>
<% if (smsStatus.lastSuccess) { %>
Ostatni
<%= smsStatus.lastSuccess %> (<%= fmt.dateTime(smsStatus.lastSuccessTime) %>)
<% } %> <% if (smsStatus.lastError) { %>
Błąd
<%= smsStatus.lastError %>
<% } %>

Automat /tasks/run

<%= tasksConfigured ? 'TASKS_TOKEN ustawiony — cron (co 15 min) wygasza rezerwacje i wysyła SMS 6 h przed terminem.' : 'Brak TASKS_TOKEN — endpoint wyłączony. Rezerwacje wygasają przy odświeżeniu strony, SMS-y tylko ręcznie.' %>