- Decrement billet quantity after purchase in BilletOrderService::generateOrderTickets - Block purchase when stock is exhausted (quantity <= 0) in OrderController::buildOrderItems - Add organizer email notification on new order (order_notification_orga template) - Add organizer email notification on cancel/refund (order_cancelled_orga template) - Add ExpirePendingOrdersCommand (app:orders:expire-pending) cron every 5min via Ansible - Cancels pending orders older than 30 minutes, restores stock, invalidates tickets - Includes BilletBuyerRepository::findExpiredPending query method - 3 unit tests covering: no expired orders, stock restoration, unlimited billets - Add payment_intent.payment_failed webhook: cancels order, logs audit, emails buyer - Add charge.refunded webhook: sets order to refunded, invalidates tickets, notifies orga and buyer - Validate billet type (billet/reservation_brocante/vote) against organizer offer - getAllowedBilletTypes: gratuit=billet only, basic/sur-mesure=all types - Server-side validation in hydrateBilletFromRequest, UI filtering in templates - Update TASK_CHECKUP.md: all Billetterie & Commandes items now complete Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
25 lines
1.4 KiB
Twig
25 lines
1.4 KiB
Twig
{% extends 'email/base.html.twig' %}
|
|
|
|
{% block title %}Remboursement - {{ order.event.title }}{% endblock %}
|
|
|
|
{% block content %}
|
|
<h2>Votre commande a ete remboursee</h2>
|
|
<p>Bonjour {{ order.firstName }},</p>
|
|
<p>Votre commande <strong>{{ order.orderNumber }}</strong> pour l'evenement <strong>{{ order.event.title }}</strong> a ete remboursee.</p>
|
|
|
|
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
|
<tr style="border-bottom: 1px solid #e5e7eb;">
|
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
|
<td style="padding: 10px 12px; font-weight: 700;">{{ order.orderNumber }}</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #e5e7eb;">
|
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Montant rembourse</td>
|
|
<td style="padding: 10px 12px; font-weight: 900; color: #16a34a;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>Le remboursement sera visible sur votre releve bancaire sous 5 a 10 jours ouvrables. Les billets associes a cette commande ont ete invalides.</p>
|
|
|
|
<p style="font-size: 12px; color: #9ca3af;">Si vous avez des questions, contactez l'organisateur de l'evenement.</p>
|
|
{% endblock %}
|