Order.order_number tildeles atomisk i POST /public/orders via en
SELECT ... FOR UPDATE-lås på rundens række + MAX+1, så samtidige
bestillinger lige efter en runde åbner ikke kan kollidere. Nummeret
starter på 1 for hver runde (UNIQUE(purchase_round_id, order_number))
og er nu tilgængeligt som {{order_number}} i mail-skabeloner.
GET /purchase-rounds/{id}/pickup-list genskaber den gamle systems
afhentningsliste (delt af brugeren som reference) mod den nye
datamodel: én printside pr. ordre, sorteret efter order_number (vist
stort i øverste højre hjørne), kontaktinfo, flaske-/kasseantal
(pænt afrundet — originalen viste et urundet float), og
vinlinjer grupperet pr. kategori.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
1.7 KiB
HTML
43 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="da">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Afhentningsliste — {{ route_name }} — {{ round_name }}</title>
|
|
<style>
|
|
body { font-family: sans-serif; }
|
|
.meta-header { font-size: 0.8rem; color: #666; margin-bottom: 1cm; }
|
|
.order-page { page-break-before: always; position: relative; padding-top: 0.5cm; }
|
|
.order-page:first-of-type { page-break-before: avoid; }
|
|
.order-number { position: absolute; top: 0; right: 0; font-size: 2.5rem; font-weight: bold; }
|
|
h1 { margin-top: 0; margin-right: 3cm; }
|
|
table { width: 100%; margin-top: 0.5cm; border-collapse: collapse; }
|
|
td { padding: 2px 6px; }
|
|
.category-row td { font-weight: bold; padding-top: 10px; }
|
|
@media print {
|
|
.order-page { page-break-before: always; }
|
|
.order-page:first-of-type { page-break-before: avoid; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<p class="meta-header">{{ route_name }} — {{ round_name }}</p>
|
|
{% for order in orders %}
|
|
<div class="order-page">
|
|
<div class="order-number">#{{ order.order_number }}</div>
|
|
<h1>{{ order.participant_name }}</h1>
|
|
<table>
|
|
<tr><td>Telefon:</td><td>{{ order.participant_phone or "" }}</td><td>email:</td><td>{{ order.participant_email }}</td></tr>
|
|
<tr><td>Flasker:</td><td>{{ order.total_bottles }}</td><td>Kasser:</td><td>{{ order.total_cases }}</td></tr>
|
|
</table>
|
|
{% for category_name, lines in order.categories %}
|
|
<table>
|
|
<tr class="category-row"><td colspan="2">{{ category_name }}</td></tr>
|
|
{% for line in lines %}
|
|
<tr><td>{{ line.quantity }}</td><td>{{ line.wine_name }}</td></tr>
|
|
{% endfor %}
|
|
</table>
|
|
{% endfor %}
|
|
</div>
|
|
{% endfor %}
|
|
</body>
|
|
</html>
|