A decentralized event management and credentialing system built on atproto.
at main 123 lines 4.4 kB view raw
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 %}