Rezervace
Životní cyklus rezervací
Section titled “Životní cyklus rezervací”- Otevření rezervace na event
- Vytvoření rezervace
- Automatické ověření volné kapacity
- Přiřazení stolu (pokud má podnik nakonfigurované stoly)
- Uložení rezervace
- Aktivace autorezervace – pokud byla zaškrtnuta
- Odeslání emailu s potvrzením rezervace a možností storna
Scénáře chování
Section titled “Scénáře chování”1. Kapacita podniku je vyčerpána
Section titled “1. Kapacita podniku je vyčerpána”Hráč může i tak zaregistrovat svůj tým, ale automaticky proběhne rezervace v režimu overbookingu – tým se uloží jako náhradník (AlternateReservation).
Pokud dojde ke zrušení rezervace jiného týmu, automaticky odejde email s informací o uvolnění kapacity všem náhradním týmům.
Obsazení volného místa je v režimu „Kdo dřív přijde, ten dřív mele.”
2. Vytvoření rezervace s autorezervací
Section titled “2. Vytvoření rezervace s autorezervací”Pokud při zakládání rezervace zároveň zaškrtnu autorezervaci, pak se mi automaticky vytvoří rezervace na další termín neprodleně po dokončení aktuálního eventu.
Pokud další termín vyhlášen není, rezervace proběhne až v momentě ručního vytvoření eventu pro daný předpis, případně při automatickém vygenerování eventu. Tato kontrola probíhá denně v 9:00.
3. Zrušení autorezervace
Section titled “3. Zrušení autorezervace”Zrušením autorezervace automaticky rušíme i rezervace na konkrétní eventy v budoucím čase. Pokud jsem tedy např. v pondělí udělal rezervaci s autorezervací na čtvrtek a autorezervaci v úterý zruším, dojde i ke zrušení rezervace na tento čtvrteční event.
Zrušení je hráči potvrzeno emailem včetně informace o zrušení rezervace na event, pokud existuje.
4. Automatické zrušení autorezervace po opakovaném nepotvrzení
Section titled “4. Automatické zrušení autorezervace po opakovaném nepotvrzení”Autorezervace (StandingReservation) generuje pro každý nový event TeamReservation, která čeká na potvrzení od týmu. Pokud tým opakovaně nepotvrdí:
- Po každém nepotvrzení se inkrementuje počítač
consecutive_unconfirmed_count - Potvrzení rezervace counter resetuje na 0
- Jakmile dosáhne 3 po sobě jdoucích nepotvrzených rezervací, autorezervace se automaticky trvale zruší a tým dostane email
StandingReservationCancelledPermanent
Systém kapacit
Section titled “Systém kapacit”Kapacita eventu se počítá dvěma způsoby podle toho, jak má podnik nakonfigurované stoly.
Nový systém – PubTables
Section titled “Nový systém – PubTables”Pokud má podnik nakonfigurované konkrétní stoly (PubTable), kapacita = počet volných stolů.
Každý tým dostane při rezervaci automaticky přiřazený konkrétní stůl:
- Hledá se stůl kde
optimal_capacity >= počet hráčů - Pokud takový neexistuje, hledá se stůl kde
max_capacity >= počet hráčů(přeplnění stolu s potvrzením) - Stůl se přiřadí do
pub_table_idna rezervaci
Legacy systém – capacity pole
Section titled “Legacy systém – capacity pole”Pokud podnik nemá PubTables, kapacita se počítá ze součtu hodnot v JSON poli capacity (velké + malé stoly).
Kapacita = počet zbývajících míst (součet capacity minus počet rezervací).
Týmy v legacy systému nemají přiřazený konkrétní stůl (pub_table_id = NULL).
Hierarchie layoutu
Section titled “Hierarchie layoutu”Při výpočtu kapacity a přiřazování stolů se prochází tato hierarchie:
- Event – má vlastní specifický layout (
TableLayoutItem) - Blueprint – layout sdílený všemi eventy předpisu
- Podnik – výchozí stoly podniku (
PubTable)
Přechod z legacy na nový systém
Section titled “Přechod z legacy na nový systém”Při nasazení migrace se pro podniky s legacy capacity polem automaticky vygenerují PubTables:
capacity.seats→ stoly soptimal_capacity = 6, max_capacity = 8capacity.smallseats→ stoly soptimal_capacity = 2, max_capacity = 4
Stávající rezervace zůstanou bez přiřazeného stolu (pub_table_id = NULL) a fungují v legacy módu.
Práce s rezervacemi
Section titled “Práce s rezervacemi”Záložka rezervace – admin
Section titled “Záložka rezervace – admin”Správa rezervací v administraci, přehled všech rezervací pro daný event.
Panel moderátora
Section titled “Panel moderátora”Moderátor vidí přehled rezervací ke svým eventům. U autorezervací lze manuálně přiřadit konkrétní stůl přes StandingReservationsTable.
Správa rezervací a autorezervací z pohledu hráče – web
Section titled “Správa rezervací a autorezervací z pohledu hráče – web”Hráč může spravovat své rezervace a autorezervace přes tokenový odkaz v emailu.
Developer notes
Section titled “Developer notes”TeamReservation
Section titled “TeamReservation”- Má vlastní observer (
ReservationObserver) - Observer na základě sledování změn odesílá vhodné notifikace a spouští sekundární procesy:
- Notifikace: vytvoření, zrušení, uvolnění místa, potvrzení z uvolněného místa
- Job:
InviteAlternateReservations– email o uvolněném místě náhradním týmům
pub_table_id– přiřazený stůl (nullable,nullOnDelete)standing_reservation_id– odkaz na nadřazenou autorezervaci (nullable)confirmed_at– čas potvrzení standing rezervace hráčem- Metoda
confirm()– potvrdí rezervaci a resetujeconsecutive_unconfirmed_countna autorezervaci - Metoda
cancelUnconfirmed()– zruší nepotvrzenou rezervaci a inkrementujeconsecutive_unconfirmed_count
StandingReservation
Section titled “StandingReservation”- Má vlastní observer
- Observer odesílá notifikace: vytvoření, potvrzení zrušení autorezervace
- Job:
EnsureExactlyOneFutureTeamReservationJob– firstOrCreate funkce pro rezervaci na právě jeden následující event pub_table_id– preferovaný stůl (nullable), přenáší se na generovanouTeamReservationconsecutive_unconfirmed_count– počítač nepotvrzených rezervací; při dosažení 3 se autorezervace automaticky smaže
AlternateReservation
Section titled “AlternateReservation”- Samostatná tabulka (od migrace
2026_03_23_150010), dříve příznakis_alternate=1naTeamReservation - Tým čeká ve frontě bez přiřazeného stolu
- Při uvolnění místa se promuje na
TeamReservationse stolem
PubTable
Section titled “PubTable”- Model
app/Models/PubTable.php - Pole:
pub_id,note,optimal_capacity,max_capacity,sort_order,is_active - Soft deletes – při smazání stolu se
pub_table_idna rezervacích nastaví na NULL - Správa přes Livewire komponentu
PubTableManager