- Create BilletBuyer entity: event, user (nullable for guests), firstName,
lastName, email, reference (ETICKET-XXXX-XXXX-XXXX), totalHT, status,
stripeSessionId, paidAt, items (OneToMany)
- Create BilletBuyerItem entity: billet, billetName (snapshot), quantity,
unitPriceHT, line total helpers
- OrderController with full checkout flow:
- POST /evenement/{id}/commander: create order from cart JSON
- GET/POST /commande/{id}/informations: guest form (name, email)
- GET /commande/{id}/paiement: payment page with recap
- POST /commande/{id}/stripe: Stripe Checkout on connected account
with application_fee, productId, and quantities
- GET /commande/{id}/confirmation: success page
- Cart JS: POST cart data on Commander click, redirect to guest/payment
- Templates: guest form, payment page, order summary partial, success page
- Stripe payment uses organizer connected account, application_fee based
on commissionRate, existing productId when available
- Tests: BilletBuyerTest (12), BilletBuyerItemTest (6), cart.test.js (13)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1.8 KiB
Twig
37 lines
1.8 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}Confirmation - E-Ticket{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="page-container">
|
|
<div class="max-w-xl mx-auto text-center">
|
|
<div class="card-brutal p-8">
|
|
<div class="text-6xl mb-4">✓</div>
|
|
<h1 class="text-3xl font-black uppercase tracking-tighter italic heading-page mb-4">Commande confirmee</h1>
|
|
<p class="font-bold text-gray-600 mb-2">Merci {{ order.firstName }} !</p>
|
|
<p class="text-sm font-bold text-gray-500 mb-6">Votre commande <span class="font-mono text-gray-900">{{ order.reference }}</span> a bien ete enregistree.</p>
|
|
|
|
<div class="border-2 border-gray-900 p-4 bg-gray-50 text-left mb-6">
|
|
<p class="text-xs font-black uppercase tracking-widest text-gray-500 mb-2">Details</p>
|
|
{% for item in order.items %}
|
|
<div class="flex justify-between py-1 text-sm font-bold">
|
|
<span>{{ item.billetName }} x{{ item.quantity }}</span>
|
|
<span>{{ item.lineTotalHTDecimal|number_format(2, ',', ' ') }} €</span>
|
|
</div>
|
|
{% endfor %}
|
|
<div class="flex justify-between pt-2 mt-2 border-t-2 border-gray-900 font-black">
|
|
<span>Total</span>
|
|
<span class="text-indigo-600">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</span>
|
|
</div>
|
|
</div>
|
|
|
|
<p class="text-xs font-bold text-gray-400 mb-6">Un email de confirmation sera envoye a {{ order.email }}</p>
|
|
|
|
<a href="{{ path('app_home') }}" class="btn-brutal font-black uppercase text-sm tracking-widest hover:bg-indigo-600 hover:text-white transition-all">
|
|
Retour a l'accueil
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|