| Server IP : 188.114.96.3 / Your IP : 216.73.216.143 Web Server : Apache System : Linux sv058.home.net.pl 6.8.2 husak_dirty_pages_fix #1 SMP PREEMPT_DYNAMIC Tue Apr 2 22:06:51 CEST 2024 x86_64 User : ( 3194769) PHP Version : 8.5.12 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /polana/admin/ |
Upload File : |
<?php
declare(strict_types=1);
require_once dirname(__DIR__) . '/includes/functions.php';
require_login();
ensure_reservations_schema();
ensure_tips_schema();
$user = admin_user();
$role = (string)($user['role'] ?? '');
$reservationNewCount = (int)db()->query(
"SELECT COUNT(*) FROM reservations WHERE status='new'"
)->fetchColumn();
$reservationTodayCount = (int)db()->query(
"SELECT COUNT(*) FROM reservations
WHERE reservation_date=CURDATE()
AND status NOT IN ('rejected','cancelled')"
)->fetchColumn();
if (in_array($role, ['waiter', 'kitchen'], true)) {
$today = date('Y-m-d');
$monthStart = date('Y-m-01');
$monthEnd = date('Y-m-t');
$todayTips = tips_summary_for_user((int)$user['id'], $today, $today);
$monthTips = tips_summary_for_user((int)$user['id'], $monthStart, $monthEnd);
render_admin_header($role === 'waiter' ? 'Pulpit kelnera' : 'Pulpit kuchni');
?>
<div class="admin-title-row">
<div>
<h1><?= $role === 'waiter' ? 'Pulpit kelnera' : 'Pulpit kuchni' ?></h1>
<p><?= $role === 'waiter' ? 'Rezerwacje, grafik i napiwki.' : 'Grafik i napiwki.' ?></p>
</div>
<a class="btn btn-primary" href="/admin/tips.php">Moje napiwki</a>
</div>
<div class="grid-cards">
<?php if ($role === 'waiter'): ?>
<div class="card">
<h3>Rezerwacje dzisiaj</h3>
<div class="stat"><?= $reservationTodayCount ?></div>
<a class="btn btn-small btn-light" href="/admin/reservations.php?from=<?= e($today) ?>&to=<?= e($today) ?>">Pokaż</a>
</div>
<div class="card">
<h3>Nowe rezerwacje</h3>
<div class="stat"><?= $reservationNewCount ?></div>
<a class="btn btn-small btn-light" href="/admin/reservations.php?status=new">Pokaż</a>
</div>
<?php endif; ?>
<div class="card">
<h3>Napiwki dzisiaj</h3>
<div class="stat tip-stat-money"><?= e(tip_money((float)$todayTips['total'])) ?></div>
</div>
<div class="card">
<h3>Napiwki w tym miesiącu</h3>
<div class="stat tip-stat-money"><?= e(tip_money((float)$monthTips['total'])) ?></div>
</div>
<div class="card">
<h3>Wypłacone</h3>
<div class="stat tip-stat-money"><?= e(tip_money((float)$monthTips['paid_total'])) ?></div>
</div>
<div class="card">
<h3>Do wypłaty</h3>
<div class="stat tip-stat-money"><?= e(tip_money((float)$monthTips['unpaid_total'])) ?></div>
</div>
</div>
<div class="two-col" style="margin-top:20px">
<?php if ($role === 'waiter'): ?>
<section class="card">
<h2>Rezerwacje</h2>
<p class="muted">Podgląd bieżących i przyszłych rezerwacji.</p>
<a class="btn btn-primary" href="/admin/reservations.php">Otwórz rezerwacje</a>
</section>
<?php endif; ?>
<section class="card">
<h2>Grafik</h2>
<p class="muted">Twoje dni pracy.</p>
<a class="btn btn-light" href="/admin/schedule.php">Otwórz grafik</a>
</section>
<section class="card">
<h2>Napiwki</h2>
<p class="muted">
Twoje rozliczenia.
</p>
<a class="btn btn-green" href="/admin/tips.php">Moje udziały</a>
</section>
</div>
<?php
render_admin_footer();
exit;
}
if ($role === 'manager') {
$today = date('Y-m-d');
$month = date('Y-m');
$monthStart = date('Y-m-01');
$monthEnd = date('Y-m-t');
$stmt = db()->prepare(
"SELECT COALESCE(SUM(cash_amount+card_amount+other_amount),0) AS total,
COUNT(*) AS entries,
COALESCE(SUM(CASE WHEN status='open' THEN 1 ELSE 0 END),0) AS open_days
FROM tip_pools WHERE tip_date BETWEEN ? AND ?"
);
$stmt->execute([$monthStart,$monthEnd]);
$tipOps = $stmt->fetch() ?: [];
render_admin_header('Pulpit managera');
?>
<div class="admin-title-row">
<div><h1>Pulpit managera</h1><p>Grafik, rezerwacje i dzienne rozliczenia.</p></div>
<a class="btn btn-primary" href="/admin/tips.php?date=<?= e($today) ?>">Rozlicz dzisiaj</a>
</div>
<div class="grid-cards">
<div class="card"><h3>Rezerwacje dzisiaj</h3><div class="stat"><?= $reservationTodayCount ?></div><a class="btn btn-small btn-light" href="/admin/reservations.php?from=<?= e($today) ?>&to=<?= e($today) ?>">Pokaż</a></div>
<div class="card"><h3>Nowe rezerwacje</h3><div class="stat"><?= $reservationNewCount ?></div><a class="btn btn-small btn-light" href="/admin/reservations.php?status=new">Pokaż</a></div>
<div class="card"><h3>Tipy – miesiąc</h3><div class="stat tip-stat-money"><?= e(tip_money((float)($tipOps['total'] ?? 0))) ?></div></div>
<div class="card"><h3>Otwarte dni</h3><div class="stat"><?= (int)($tipOps['open_days'] ?? 0) ?></div></div>
</div>
<div class="two-col" style="margin-top:20px">
<section class="card"><h2>Grafik</h2><p class="muted">Projektowanie obsady i godzin pracy.</p><a class="btn btn-light" href="/admin/schedule.php">Otwórz grafik</a></section>
<section class="card"><h2>Napiwki</h2><p class="muted">Rozliczenia dzienne i zamknięcie miesiąca.</p><a class="btn btn-green" href="/admin/tips.php">Otwórz napiwki</a></section>
</div>
<?php
render_admin_footer();
exit;
}
$menuCount = (int)db()->query('SELECT COUNT(*) FROM menus')->fetchColumn();
$itemCount = (int)db()->query('SELECT COUNT(*) FROM menu_items')->fetchColumn();
$publishedCount = (int)db()->query("SELECT COUNT(*) FROM menus WHERE status='published'")->fetchColumn();
$current = active_menu();
$tipMonthTotal = 0.0;
$tipUnsettled = 0.0;
if (in_array($role, ['admin', 'editor', 'manager'], true)) {
$stmt = db()->query(
"SELECT
COALESCE(SUM(cash_amount + card_amount + other_amount),0) AS total,
COALESCE(SUM(CASE WHEN status='open' THEN cash_amount + card_amount + other_amount ELSE 0 END),0) AS unsettled
FROM tip_pools
WHERE tip_date BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE())"
);
$tipSummary = $stmt->fetch();
$tipMonthTotal = (float)($tipSummary['total'] ?? 0);
$tipUnsettled = (float)($tipSummary['unsettled'] ?? 0);
}
render_admin_header('Pulpit');
?>
<div class="admin-title-row">
<div>
<h1>Pulpit</h1>
<p>Szybkie zarządzanie restauracją i stroną.</p>
</div>
<a class="btn btn-primary" href="/admin/menus.php">Zarządzaj menu</a>
</div>
<div class="grid-cards">
<div class="card">
<h3>Wersje menu</h3>
<div class="stat"><?= $menuCount ?></div>
</div>
<div class="card">
<h3>Pozycje w kartach</h3>
<div class="stat"><?= $itemCount ?></div>
</div>
<div class="card">
<h3>Opublikowane</h3>
<div class="stat"><?= $publishedCount ?></div>
</div>
<div class="card">
<h3>Nowe rezerwacje</h3>
<div class="stat"><?= $reservationNewCount ?></div>
<a class="btn btn-small btn-light" href="/admin/reservations.php">Otwórz</a>
</div>
<div class="card">
<h3>Rezerwacje dzisiaj</h3>
<div class="stat"><?= $reservationTodayCount ?></div>
</div>
<?php if (in_array($role, ['admin', 'editor', 'manager'], true)): ?>
<div class="card">
<h3>Napiwki – miesiąc</h3>
<div class="stat tip-stat-money"><?= e(tip_money($tipMonthTotal)) ?></div>
<a class="btn btn-small btn-light" href="/admin/tips.php">Otwórz</a>
</div>
<div class="card">
<h3>Napiwki do rozliczenia</h3>
<div class="stat tip-stat-money"><?= e(tip_money($tipUnsettled)) ?></div>
</div>
<?php endif; ?>
</div>
<div class="two-col" style="margin-top:20px">
<section class="card">
<h2>Aktualnie widoczne menu</h2>
<?php if ($current): ?>
<p><strong><?= e($current['name']) ?></strong></p>
<p class="muted">
<?= e($current['valid_from'] ?: 'bez daty od') ?>
–
<?= e($current['valid_to'] ?: 'bez daty końcowej') ?>
</p>
<div class="actions">
<a class="btn btn-primary" href="/admin/menu.php?id=<?= (int)$current['id'] ?>">Edytuj</a>
<a class="btn btn-light" href="/menu" target="_blank" rel="noopener">Podejrzyj</a>
</div>
<?php else: ?>
<p class="muted">Nie ma jeszcze opublikowanej karty.</p>
<a class="btn btn-primary" href="/admin/menus.php">Przejdź do menu</a>
<?php endif; ?>
</section>
<section class="card">
<h2>QR</h2>
<p class="muted">Jeden stały QR prowadzi zawsze do <strong>/menu</strong>.</p>
<a class="btn btn-green" href="/admin/qr.php">Pokaż QR</a>
</section>
</div>
<?php render_admin_footer(); ?>