Reduce returns in create(), add REF_PATTERN constant, title tag, table headers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-21 14:51:22 +01:00
parent 44eacc8747
commit 5fefe22e99
3 changed files with 35 additions and 26 deletions

View File

@@ -19,6 +19,8 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class OrderController extends AbstractController
{
private const REF_PATTERN = self::REF_PATTERN;
#[Route('/evenement/{id}/commander', name: 'app_order_create', requirements: ['id' => '\d+'], methods: ['POST'])]
public function create(int $id, Request $request, EntityManagerInterface $em): Response
{
@@ -28,21 +30,24 @@ class OrderController extends AbstractController
}
$cart = json_decode($request->getContent(), true);
$eventUrl = $this->generateUrl('app_event_detail', [
'orgaSlug' => $event->getAccount()->getSlug(),
'id' => $event->getId(),
'eventSlug' => $event->getSlug(),
]);
if (!\is_array($cart) || 0 === \count($cart)) {
$this->addFlash('error', 'Votre panier est vide.');
return $this->json(['redirect' => $this->generateUrl('app_event_detail', [
'orgaSlug' => $event->getAccount()->getSlug(),
'id' => $event->getId(),
'eventSlug' => $event->getSlug(),
])]);
return $this->json(['redirect' => $eventUrl]);
}
/** @var User|null $user */
$user = $this->getUser();
$order = new BilletBuyer();
$order->setEvent($event);
/** @var User|null $user */
$user = $this->getUser();
if ($user) {
$order->setUser($user);
$order->setFirstName($user->getFirstName());
@@ -50,25 +55,20 @@ class OrderController extends AbstractController
$order->setEmail($user->getEmail());
}
$totalHT = $this->buildOrderItems($order, $cart, $event, $em);
$order->setTotalHT($this->buildOrderItems($order, $cart, $event, $em));
if ($order->getItems()->isEmpty()) {
return $this->json(['redirect' => $this->generateUrl('app_event_detail', [
'orgaSlug' => $event->getAccount()->getSlug(),
'id' => $event->getId(),
'eventSlug' => $event->getSlug(),
])]);
return $this->json(['redirect' => $eventUrl]);
}
$order->setTotalHT($totalHT);
$em->persist($order);
$em->flush();
if ($user) {
return $this->json(['redirect' => $this->generateUrl('app_order_payment', ['id' => $order->getId()])]);
}
$redirect = $user
? $this->generateUrl('app_order_payment', ['id' => $order->getId()])
: $this->generateUrl('app_order_guest', ['id' => $order->getId()]);
return $this->json(['redirect' => $this->generateUrl('app_order_guest', ['id' => $order->getId()])]);
return $this->json(['redirect' => $redirect]);
}
#[Route('/commande/{id}/informations', name: 'app_order_guest', requirements: ['id' => '\d+'], methods: ['GET', 'POST'])]
@@ -217,7 +217,7 @@ class OrderController extends AbstractController
]);
}
#[Route('/ma-commande/{reference}', name: 'app_order_public', requirements: ['reference' => 'ETICKET-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}'], methods: ['GET'])]
#[Route('/ma-commande/{reference}', name: 'app_order_public', requirements: ['reference' => self::REF_PATTERN], methods: ['GET'])]
public function publicOrder(string $reference, EntityManagerInterface $em): Response
{
$order = $em->getRepository(BilletBuyer::class)->findOneBy(['reference' => $reference]);
@@ -237,7 +237,7 @@ class OrderController extends AbstractController
]);
}
#[Route('/ma-commande/{reference}/billet/{ticketReference}', name: 'app_order_download_ticket', requirements: ['reference' => 'ETICKET-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}', 'ticketReference' => 'ETICKET-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}'], methods: ['GET'])]
#[Route('/ma-commande/{reference}/billet/{ticketReference}', name: 'app_order_download_ticket', requirements: ['reference' => self::REF_PATTERN, 'ticketReference' => self::REF_PATTERN], methods: ['GET'])]
public function downloadTicket(string $reference, string $ticketReference, EntityManagerInterface $em, BilletOrderService $billetOrderService): Response
{
$order = $em->getRepository(BilletBuyer::class)->findOneBy(['reference' => $reference]);

View File

@@ -36,12 +36,20 @@
<p style="font-size: 13px; font-weight: 700; color: #6b7280;">Vos billets sont en piece jointe de cet email. Chaque billet contient un QR code unique a presenter a l'entree.</p>
<table style="width: 100%; border-collapse: collapse; margin: 16px 0;">
{% for ticket in tickets %}
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 6px 0; font-size: 12px; font-weight: 700;">{{ ticket.billetName }}</td>
<td style="padding: 6px 0; font-size: 11px; font-family: monospace; color: #6b7280;">{{ ticket.reference }}</td>
</tr>
{% endfor %}
<thead>
<tr style="background: #f3f4f6;">
<th style="padding: 6px 0; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase;">Billet</th>
<th style="padding: 6px 0; text-align: right; font-size: 11px; font-weight: 900; text-transform: uppercase;">Reference</th>
</tr>
</thead>
<tbody>
{% for ticket in tickets %}
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 6px 0; font-size: 12px; font-weight: 700;">{{ ticket.billetName }}</td>
<td style="padding: 6px 0; font-size: 11px; font-family: monospace; color: #6b7280; text-align: right;">{{ ticket.reference }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}

View File

@@ -2,6 +2,7 @@
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>{{ ticket.reference }} - {{ event.title }}</title>
<style>
{% set ac = design ? design.accentColor : '#4f46e5' %}
{% set inv_color = design ? design.invitationColor : '#d4a017' %}