Admin Portal¶
The Admin Portal is the comprehensive management interface for HNS staff to manage all aspects of ticketing operations.
Tech Stack¶
- Backend: Symfony (PHP)
- Templates: Twig
- Styling: Tailwind CSS
- Interactivity: Alpine.js for dynamic components
- Stadium Maps: SVG-based visualization
User Roles¶
| Role | Permissions |
|---|---|
| Super Admin | Full system access, can approve cancellations |
| Match Manager | Create/edit matches, configure sales phases |
| Stadium Operator | Seat operations, stadium configuration |
| Quota Manager | Create/manage quotas, CSV import |
| BLACKADMIN | Blacklist management, violation monitoring |
| Support Agent | Ticket lookup, transfers, refunds |
| Finance | Reports, reconciliation |
| Read-Only | View dashboards and reports only |
Navigation Structure¶
Admin Portal
├── Dashboard
├── Events & Matches
│ ├── Match List
│ ├── Create Match (Wizard)
│ └── Match Detail
│ ├── Info Tab
│ ├── Stadium Tab
│ ├── Sales Phases Tab
│ └── Quotas Tab
├── Stadium Management
│ ├── Stadium Templates
│ ├── Seat Operations
│ └── Sector Transfer
├── Quota Management
│ ├── Quota List
│ ├── Create Quota
│ ├── CSV Import
│ └── Quota Detail
├── Blacklist (BLACKADMIN)
│ ├── Blacklist Entries
│ ├── CSV Import
│ └── Violation Attempts
├── Reports
│ ├── Sales Reports
│ ├── Real-Time Dashboard
│ ├── Financial Reports
│ └── Operational Reports
├── Support Tools
│ ├── Ticket Lookup
│ ├── Transfer Tickets
│ ├── Process Refunds
│ └── Emergency Print
└── Settings
├── Users & Permissions
└── System Configuration
Screens¶
Dashboard¶
Purpose: Overview of upcoming matches, key metrics, and quick actions.
Key Components:
- Stats Cards: Total upcoming matches, tickets sold today, active quotas, pending support tickets
- Upcoming Matches Table: Next 5 matches with status, sales progress, quick actions
- Sales Progress Chart: Today's sales volume over time
- Quick Actions: Create match, import quotas, view reports
Workflow Reference: Real-Time Statistics
Layout:
┌─────────────────────────────────────────────────────────────────┐
│ HNS Admin Portal [User] [Logout] │
├─────────────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Upcoming │ │ Sold │ │ Active │ │ Support │ │
│ │ Matches │ │ Today │ │ Quotas │ │ Tickets │ │
│ │ 5 │ │ 1,234 │ │ 42 │ │ 8 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌─────────────────────────────────┐ ┌─────────────────────────┐ │
│ │ Upcoming Matches │ │ Quick Actions │ │
│ │ ┌─────────────────────────┐ │ │ │ │
│ │ │ CRO vs POL | Mar 15 │ │ │ [Create Match] │ │
│ │ │ Sales: 85% | Published │ │ │ [Import Quotas] │ │
│ │ └─────────────────────────┘ │ │ [View Reports] │ │
│ │ ... │ │ │ │
│ └─────────────────────────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Match List¶
Purpose: View and manage all matches with filtering and bulk actions.
Key Components:
- Filter Bar: Status dropdown, date range picker, search input
- Data Table: Sortable columns, status badges, action buttons
- Bulk Actions: Export selection, bulk status change
Table Columns:
| Column | Description |
|---|---|
| Match | Home vs Away teams |
| Date | Kick-off date/time |
| Venue | Stadium name |
| Status | Draft, Published, Cancelled, Closed |
| Sales | Progress bar (sold/total) |
| Actions | View, Edit, Cancel |
Workflow Reference: Match Management
Create Match Wizard¶
Purpose: Multi-step wizard for creating new match events.
Steps:
- Basic Information
- Home Team (defaults to Croatia)
- Away Team (dropdown)
- Competition Type (UEFA Nations League, Friendly, Qualifier, etc.)
- Date and Time (kick-off)
- Venue/Stadium selection
-
Away match toggle (for non-numbered seats)
-
Stadium Configuration (skipped for away matches)
- Select stadium template
- Configure active sectors
- Set pricing per sector/category
-
Define capacity
-
Sales Phases
- Phase 1: Loyalty Early Access
- Start/End Date
- Eligibility Rules (min points)
- Ticket Limit
-
Phase 2: General Public
- Start/End Date
- Ticket Limit per customer
-
Quotas (Initial)
- Pre-defined quota types (UEFA, Sponsors, Family)
- Sector allocations
-
Percentage of capacity
-
Content & Media
- Match banner upload
- Important info text
-
Visibility status (Draft/Scheduled/Visible)
-
Review & Publish
- Summary of all settings
- Validation warnings
- Publish or Save as Draft
Key Components:
- Step indicator (progress bar)
- Form sections with validation
- Date/time pickers
- Stadium mini-map preview
- Sector selection interface
Workflow Reference: Match Management
Match Detail¶
Purpose: View and manage all aspects of a specific match.
Tab Structure:
Info Tab¶
- Match details (teams, date, venue)
- Edit basic information
- Status management (Publish, Cancel, Close)
- Notification options (with/without ticket holder notification)
Stadium Tab¶
- Interactive stadium map
- Sector status overview
- Link to seat operations
- Capacity breakdown by status
Sales Phases Tab¶
- Phase configuration
- Edit phase dates
- View phase performance
Quotas Tab¶
- List of quotas for this match
- Create new quota
- Quick status overview (allocated, claimed, sold)
Action Buttons:
- Export Access Control Data (pre-match)
- Close Match (post-match, with attendance import)
- Cancel Match (requires Super Admin)
Workflow References: - Match Management - Stadium Configuration
Stadium Management - Seat Operations¶
Purpose: Individual and bulk seat status management.
Key Components:
- Stadium Visualization: Full stadium view with zoom capability
- Selection Tools:
- Click individual seats
- Multi-select mode (Ctrl+click)
- Select by section
- Select by row range
- Select by seat range
- Filter-based selection
- Status Change Panel:
- Current status display
- New status dropdown (valid transitions only)
- Reason field (required)
- Apply button with confirmation
Selection Summary Panel:
Selected: 856 seats
├── Available: 856
├── Sold: 0
├── Reserved: 0
└── Other: 0
[Change Status ▼]
Seat Status Colors:
| Status | Color | Description |
|---|---|---|
| Available | Green | Ready for sale |
| Sold | Blue | Purchased |
| Reserved | Yellow | In cart/pending |
| Technical | Purple | Press/media |
| Official | Gold | VIP allocation |
| Blocked | Red | Unavailable |
| Maintenance | Gray | Under repair |
| Quarantined | Orange | Investigation |
| Allocated | Cyan | Quota assigned |
| Inactive | Light Gray | Not in use |
Workflow Reference: Seat Operations
Seat Search & Lookup¶
Purpose: Find seats by various criteria and view/modify details.
Search Methods:
- By Seat Number: Stadium, Section, Row, Seat
- By Reservation/Quota: Document type and number
- By Email: Customer email address
- Via Stadium Map: Click on seat in visualization
- Advanced Search: Multi-criteria filters
Seat Detail Modal:
┌─────────────────────────────────────────────┐
│ Seat: Maksimir - Section A - Row 5 - Seat 12│
├─────────────────────────────────────────────┤
│ Status: Sold (blue badge) │
│ Match: Croatia vs Poland - 15.03.26 │
│ Linked Doc: Quota #300032x [View →] │
│ Customer: J*** K*** (OIB: *******34) │
│ Email: j***@email.com │
│ Order: #4100234 │
│ Price: 50.00 EUR │
│ Payment: Paid │
│ Last Change: 15.11.2025 14:32 by admin │
├─────────────────────────────────────────────┤
│ [Change Status] [Modify Assignment] [History]│
└─────────────────────────────────────────────┘
Workflow Reference: Seat Operations - Part 5
Quota Management - Quota List¶
Purpose: View and manage all quotas across matches.
Key Components:
- Filter Bar: Match dropdown, status filter, search by email
- Data Table: Sortable, paginated
Table Columns:
| Column | Description |
|---|---|
| Quota ID | Unique identifier |
| Match | Match name and date |
| Recipient | Email and internal note |
| Sectors | Allocated sectors |
| Total | Total seats allocated |
| Status Breakdown | Allocated/Reserved/Sold/Delegated |
| Deadline | Expiration date (visual reminder) |
| Actions | View, Edit, Cancel |
Status Badges:
- Active: Green - quota is active
- Past Deadline: Yellow - visual reminder, still claimable
- Cancelled: Red - admin cancelled
Workflow Reference: Quota Creation
Quota Management - Create Quota¶
Purpose: Create individual quota with seat allocation.
Form Fields:
| Field | Type | Description |
|---|---|---|
| Recipient Email | Email input | Unique identifier |
| Internal Note | Text | Admin-only label |
| Match | Dropdown | Target match |
| Sectors | Multi-select | Sector codes (D1, C1, B2) |
| Quantity | Number | Total tickets |
| Discount Code | Dropdown | 0 (full), GR (free), or % |
| Allocation Algorithm | Radio | NM (Best Seats) or REDOM (Distributed) |
| Expiration Date | DateTime | Visual reminder |
| Can Create Subquotas | Checkbox | Allow delegation |
| Delayed Payment | Checkbox | Deferred payment option |
| Transfer Permission | Radio | YES (unlimited) / NO (standard rules) |
| Auto-Send Email | Checkbox | Send notification on create |
Validation:
- Email format
- Sector codes exist for match
- Sufficient inventory available
- Expiration is future date
Workflow Reference: Quota Creation
Quota Management - CSV Import¶
Purpose: Bulk import quotas from CSV file.
Steps:
- Select Match(es): Single or multiple matches
- Upload CSV: File with predefined format
- Validation Preview: Show valid/invalid rows with errors
- Confirm Import: Review and execute
CSV Format:
email,internal_note,sectors,quantity,discount_code,algorithm,expiration,can_subquota,delayed_payment,transfer
sponsor@company.hr,T-Com Sponsor,D1;C1,10,GR,NM,2026-03-10 23:59,TRUE,FALSE,NO
Validation Display:
Total rows: 287
├── Valid: 283 ✓
└── Invalid: 4 ✗
- Row 45: Invalid email format
- Row 78: Sector X99 does not exist
- Row 156: Insufficient inventory (requested 50, available 23)
- Row 231: Duplicate email in file
Workflow Reference: Quota Creation - A1
Quota Detail¶
Purpose: View full quota details with real-time status.
Sections:
- Summary: Recipient, match, sectors, deadline
- Status Breakdown: Visual chart of allocated/reserved/sold/delegated
- Seat List: Table of all seats with individual status
- Subquotas: List of delegated subquotas (if any)
- Activity Log: Timeline of quota events
Actions:
- Edit Quota
- Cancel Quota (options: All Unused / Unfulfilled Only)
- Resend Email
- Masquerade as Owner (admin login as quota holder)
Workflow Reference: Quota Creation
Blacklist Management - Entry List¶
Purpose: View and manage blacklist entries.
Key Components:
- Search Bar: By OIB or name
- Data Table: Paginated list of entries
- Quick Actions: Add entry, Import CSV, Clear all
Table Columns:
| Column | Description |
|---|---|
| OIB | Partially masked (*34) |
| Name | Full name |
| DOB | Date of birth |
| Effective Date | Date added |
| Actions | View, Remove |
Workflow Reference: Blacklist Management
Blacklist Management - CSV Import¶
Purpose: Bulk import blacklist from security team.
Process:
- Pre-Match Refresh: Clear existing entries (optional)
- Upload CSV: Standard format from police/security
- Validation: OIB format, duplicates
- Preview: Valid/invalid counts
- Confirm Import: Execute with audit note
CSV Format:
OIB,FirstName,LastName,DateOfBirth
12345678901,Ivan,Horvat,15.03.1985
Post-Import Warning: If imported OIB has existing tickets, system prompts for ticket cancellation.
Workflow Reference: Blacklist Management
Blacklist Management - Violation Attempts¶
Purpose: Monitor blocked purchase attempts.
Report Display:
| Column | Croatian Label | Description |
|---|---|---|
| Date | DATUM POKUSAJA | Timestamp of attempt |
| First Name | IME | Attempted name |
| Last Name | PREZIME | Attempted surname |
| DOB | DATUM_ROD | Date of birth |
| OIB | OIB | Partially masked |
| Event | - | Match attempted |
| IP | - | IP address |
| User ID | - | HNS app account |
| Attempts | - | Repeat count |
Filters: Date range, individual, event
Workflow Reference: Blacklist Management - Part 3
Reports - Sales Dashboard¶
Purpose: Real-time sales monitoring.
Key Components:
- Live Counter: Tickets sold today (auto-refresh)
- Sales by Channel: Online, Box Office, Quota
- Sales by Sector: Heat map of stadium
- Hourly Chart: Sales volume over time
- Top Matches: Best-selling upcoming events
Workflow Reference: Real-Time Statistics
Reports - Financial Reports¶
Purpose: Financial reconciliation and export.
Report Types:
- Daily sales summary
- Payment method breakdown
- Refund summary
- Service fee report
- Deferred payment status
Export: CSV, Excel, PDF
Workflow Reference: Financial Reporting
Support Tools - Ticket Lookup¶
Purpose: Find tickets for customer support inquiries.
Search Options:
- Order number
- Email address
- OIB
- Ticket barcode
Result Actions:
- View ticket details
- Transfer to another person
- Process refund
- Emergency print
Workflow References: - Customer Support Transfer - Customer Support Refund
Support Tools - Emergency Print¶
Purpose: Print physical tickets for edge cases.
Use Cases:
- Customer phone malfunction
- QR code display issues
- VIP/official requirements
Process:
- Look up ticket by barcode/order
- Verify customer identity
- Select thermal printer
- Print ticket with unique barcode
- Invalidate mobile ticket (optional)
Workflow Reference: Emergency Ticket Printing
Cross-Portal Integration¶
Masquerade Function¶
Admin can "login as quota owner" to assist users:
- Available from quota detail page
- Full view of what quota holder sees
- All actions logged with admin attribution
- 30-minute session limit
- Cannot perform payment actions
Audit Trail¶
All admin actions logged with:
- Admin user ID
- Timestamp
- Action type
- Before/after values
- Reason (when required)
Last Updated: January 2026