S1 — Výběr vstupenek (neadresné sezení)
Účel obrazovky
Pro akce bez seat mapy — výběr cenových kategorií pomocí quantity counterů. Uživatel zvolí počet vstupenek v jednotlivých cenových úrovních (parter, balkón, VIP…) a pokračuje do košíku.
Content Priority
- Header — název akce, datum, místo konání, zpět na P3 — Detail akce App Bar / Top NavigationBack Button
- Seznam cenových kategorií — pokud je kategorií nejvýše 4, zobrazit plochý seznam (všechny sekce rozbalené, bez accordionu). Od 5 kategorií výše použít accordion (standardní sbalitelné bloky). U každé kategorie: název (např. „Parter"), krátký popis, cena za kus, dostupnost („Zbývá X" / „Vyprodáno") Accordion / Expandable
- Quantity counter — tlačítka + a − pro jemné úpravy po jedné vstupence (vhodné pro 1–5 ks); výchozí hodnota 0. Přímý vstup: klepnutí na zobrazené číslo (počet) otevře numerickou klávesnici pro zadání přesného počtu najednou (v mezích dostupnosti a limitů objednávky). Doplňkový copy u counteru: „Klepněte na číslo pro zadání přesného počtu" Counter (+/-)
- Real-time pricing — průběžný přepočet celkové ceny při změně množství Price Summary
- Bottom bar — sticky bar s celkovou cenou a CTA „Pokračovat do košíku" CTA Sticky BarPrimary Button
- Countdown timer — pokud uživatel přišel z P4 — Seat map, timer pokračuje z P4; pokud neadresná větev obchází seat map, timer začne na S1 (stejná pravidla rezervace jako v checkout flow) Countdown Timer
Interakce
| Trigger | Akce | Cíl |
|---|---|---|
| Tap na + u kategorie | Zvýšení quantity o 1, přepočet ceny | Real-time update bottom bar |
| Tap na − u kategorie | Snížení quantity o 1 (min 0) | Real-time update bottom bar |
| Tap na číslo u counteru | Otevření numerické klávesnice, zadání přesného počtu | Validace vůči max/min, přepočet ceny |
| Quantity = 0 | − tlačítko disabled | Visual feedback |
| Quantity = max dostupnost | + tlačítko disabled | Visual feedback |
| Tap „Pokračovat do košíku" | Validace (alespoň 1 vstupenka), přechod | P5 — Košík |
| Tap „Pokračovat" s 0 vstupenkami | CTA disabled, nelze pokračovat | Blokáda |
| Swipe zpět / Back | Návrat bez uložení | P3 — Detail akce |
Stavy
| Stav | Popis | Vizuální chování |
|---|---|---|
| Loading | Načítání cenových kategorií | Skeleton (accordion nebo flat list dle počtu kategorií), disabled countery |
| Loaded | Kategorie dostupné | Flat list (≤4 kategorií) plně rozbalený, nebo accordion (5+) s rozumným defaultem, aktivní countery |
| Category sold out | Jedna kategorie vyprodána | Šedá/disabled, badge „Vyprodáno", counter skryt |
| All sold out | Všechny kategorie vyprodány | Disabled CTA, banner „Tato akce je vyprodaná" |
| Partial selection | Uživatel vybral některé kategorie | Aktivní bottom bar s celkovou cenou |
Edge Cases a Error States
| Scénář | Řešení |
|---|---|
| Kategorie vyprodána během výběru | Toast „Kategorie X byla právě vyprodána", refresh dostupnosti, odebrání z košíku pokud byla vybrána |
| Limit max vstupenek na objednávku (např. 10) | Zobrazit limit u counteru „Max 10 na objednávku", disable + při dosažení celkového součtu |
| Uživatel tlačítkem Pokračovat s 0 vstupenkami | CTA vždy disabled pokud součet = 0, nelze odeslat |
| Změna ceny na serveru během výběru | Info banner „Ceny se mohly změnit", refresh z API před přechodem do P5 |
| Částečně vyprodán (zbývá 2, uživatel má 3) | Při refresh: snížení quantity na max dostupné, toast „Kategorie X — zbývají jen 2 vstupenky" |
Mobilní patterny a odlišení od webu
Co přebíráme
- Struktura cenových kategorií (accordion na webu; v MA zjednodušení na flat list při malém počtu)
- Real-time cenový souhrn
- Countdown timer z flow nákupu (P4 nebo start na S1)
Co děláme jinak
- Haptic feedback na tap +/− — lehký tap pro potvrzení akce
- Větší touch targety pro counter tlačítka a pro číslo počtu (min 48dp) — na webu stačí menší click area
- Hybridní quantity — +/− pro kroky po jedné; klepnutí na číslo otevře numerickou klávesnici pro přesný počet (rychlé větší objemy)
- Flat list vs accordion — ≤4 kategorie bez zbytečného sbalování; 5+ accordion
- Sticky bottom bar — vždy viditelný při scrollu, web má CTA níže v layoutu
Aplikované patterny
- iOS:
UISteppernebo custom stepper; klepnutí na hodnotu otevře numerickou klávesnici (UIKeyboardType.numberPad/ alert s políčkem);UIImpactFeedbackGeneratorpro haptiku u +/− - Android:
MaterialButton/IconButtonpro +/−, pro přímý vstupVisualTransformationnebo samostatný read-only field sKeyboardType.Number;HapticFeedbackConstantspro click feedback
API Data
GET/cashdesk/event/{eventId}POST/cart/ticket/add/event-non-numberedGET/cart| Operace | Endpoint | Trigger | Poznámka |
|---|---|---|---|
| Cenové kategorie | GET /cashdesk/event/{eventId} | Otevření obrazovky | Vrací HallSection s view_type: NON (non-numbered), cenové kategorie |
| Přidání neadresných | POST /cart/ticket/add/event-non-numbered | Tap „Pokračovat" | Odešle ticket_count per kategorie |
| Aktuální košík | GET /cart | Po přidání | Vrací aktualizovaný košík s validity (countdown) |
CoreAPI poznatek
Neadresné akce mají HallSection.view_type = NON. Cenové kategorie (PriceCategory) mají barvu a abbreviation pro vizuální rozlišení. CustomerCategory (student, senior) se aplikuje přes PUT /cart/ticket/set-customer-category až v P5 Košík.
Reference — Aktuální web
SCR-WEB-27Neadresné — kategorie s countery, cenové kategorieSCR-WEB-28S navigací a total bottom barReference — CineStar benchmark
CineStar je zaměřen na kinematografie se sedadlovým výběrem; neadresné sezení není typický use case. Pro srovnání viz S1 adresné — Seat map.

