Template
## Summary - Closes #5 - Optional `shop`, `pos_sync`, `events`, and `shipping` apps gated by `FEATURE_*` flags - Deps match the catalog: shop/events need email + Stripe; POS/shipping need shop - Portal inventory, POS webhooks, capacity tickets, EasyPost/Pirate Ship shipping ## Test plan - [ ] `manage.py test` (152 passed locally) - [ ] Shop cart + paid order decrements stocked inventory - [ ] POS inbound webhook decrements SKU; paid order queues outbound reserve - [ ] Event capacity blocks overbook; paid order emails ticket codes - [ ] Shipping stub label + Pirate Ship CSV of unshipped paid orders - [ ] `validate-env.sh` rejects shop without email/payments, POS/shipping without shop Reviewed-on: #6
18 lines
771 B
HTML
18 lines
771 B
HTML
{% extends "base.html" %}
|
|
{% block title %}Tickets · {{ event.title }}{% endblock %}
|
|
{% block content %}
|
|
<section class="section section-lg">
|
|
<div class="container">
|
|
<h1>Tickets · {{ event.title }}</h1>
|
|
<p>{{ event.price }} {{ event.currency|upper }} each{% if event.seats_remaining is not None %} · {{ event.seats_remaining }} left{% endif %}</p>
|
|
<form method="post">
|
|
{% csrf_token %}
|
|
<p><label>Email <input name="email" type="email" required></label></p>
|
|
<p><label>Name <input name="customer_name"></label></p>
|
|
<p><label>Quantity <input name="quantity" type="number" min="1" value="1"></label></p>
|
|
<button class="button button-primary" type="submit">Pay with Stripe</button>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|