A decentralized event management and credentialing system built on atproto.
1{% extends "admin_base.html" %}
2
3{% block title %}Ticket Records - Admin Panel{% endblock %}
4
5{% block content %}
6<!-- Page Header -->
7<div class="content">
8 <h1 class="title is-4">Ticket Records</h1>
9 <p class="subtitle is-6">{{ total_tickets }} purchases and registrations ({{ current_page }} of {{ total_pages }} pages)</p>
10</div>
11
12<!-- Ticket Records Table -->
13{% if tickets %}
14<div class="box">
15 <div class="table-container">
16 <table class="table is-fullwidth is-striped is-hoverable">
17 <thead>
18 <tr>
19 <th>Ticket ID</th>
20 <th>Email</th>
21 <th>DID</th>
22 <th>Type</th>
23 <th>Created At</th>
24 <th width="150">Actions</th>
25 </tr>
26 </thead>
27 <tbody>
28 {% for ticket in tickets %}
29 <tr>
30 <td>
31 <code class="has-text-info">{{ ticket.ticket_id }}</code>
32 </td>
33 <td>
34 <span class="has-text-weight-medium">{{ ticket.email }}</span>
35 </td>
36 <td>
37 {% if ticket.has_did %}
38 <div class="is-size-7" style="word-break: break-all;">
39 <code class="has-text-success">{{ ticket.did }}</code>
40 </div>
41 {% else %}
42 <span class="tag is-light has-text-grey">No DID</span>
43 {% endif %}
44 </td>
45 <td>
46 <span class="tag is-info">{{ ticket.ticket_type }}</span>
47 </td>
48 <td>
49 <span class="is-size-7 has-text-grey">{{ ticket.created_at }}</span>
50 </td>
51 <td>
52 <a href="/admin/tickets/{{ ticket.ticket_id }}"
53 class="button is-small is-info">
54 View
55 </a>
56 </td>
57 </tr>
58 {% endfor %}
59 </tbody>
60 </table>
61 </div>
62
63 <!-- Pagination -->
64 {{ view_pagination(pagination) }}
65</div>
66
67
68<!-- Summary Cards -->
69<div class="columns">
70 <div class="column is-4">
71 <div class="box has-text-centered">
72 <p class="heading">Total Tickets</p>
73 <p class="title">{{ total_tickets }}</p>
74 </div>
75 </div>
76 <div class="column is-4">
77 <div class="box has-text-centered">
78 <p class="heading">With DID (Page)</p>
79 <p class="title">{{ with_did_count }}</p>
80 </div>
81 </div>
82 <div class="column is-4">
83 <div class="box has-text-centered">
84 <p class="heading">With Tito Link (Page)</p>
85 <p class="title">{{ with_tito_link_count }}</p>
86 </div>
87 </div>
88</div>
89
90{% else %}
91<!-- Empty State -->
92<div class="box has-text-centered">
93 <div class="content">
94 <h3 class="title is-5 has-text-grey">No Ticket Records Found</h3>
95 <p class="has-text-grey">
96 No ticket records have been created yet. Tickets will appear here as they are purchased through Tito webhooks or created manually.
97 </p>
98 </div>
99</div>
100{% endif %}
101
102<!-- Help Section -->
103<div class="box">
104 <div class="content">
105 <h4 class="title is-6">About Ticket Records</h4>
106 <p class="is-size-7">
107 Ticket records track event purchases and registrations. Each ticket contains:
108 </p>
109 <ul class="is-size-7">
110 <li><strong>Ticket ID:</strong> Unique identifier for the ticket</li>
111 <li><strong>Email:</strong> Purchaser's email address</li>
112 <li><strong>DID:</strong> Decentralized identifier (if user has authenticated)</li>
113 <li><strong>Type:</strong> Ticket category (general-admission, vip, etc.)</li>
114 <li><strong>Tito Link:</strong> Link to the original Tito ticket (if from webhook)</li>
115 </ul>
116 <div class="notification is-info is-light mt-4">
117 <div class="content is-size-7">
118 <strong>Usage:</strong> Ticket records are used to validate badge award eligibility and RSVP permissions.
119 </div>
120 </div>
121 </div>
122</div>
123{% endblock %}