Translation system: - Add LibreTranslate container (dev + prod), CPU-only, no port exposed, FR/EN/ES/DE/IT - Create app:translate command: reads *.fr.yaml, translates incrementally, preserves placeholders - Makefile: make trans / make trans_prod (stops container after translation) - Ansible: start libretranslate -> translate -> stop during deploy - Prod container restart: "no" (only runs during deploy) - .gitignore: ignore generated *.en/es/de/it.yaml files - 11 tests for TranslateCommand (API unreachable, empty, incremental, obsolete keys, placeholders, fallback) Test coverage improvements: - OrderController: event ended (400), invalid cart JSON, invalid email, stock zero (4 new tests) - AccountController: finance stats all statuses (paid/pending/refunded/cancelled), soldCounts (2 new tests) - JS cart: checkout without error elements, hide error on retry, stock polling edge cases (singular, no label, qty zero, unknown billet) (8 new tests) - JS editor: comment node sanitization (1 new test) - JS tabs: missing panel, generated id, parent null, click no-panel (5 new tests) Code duplication fixes: - MeilisearchConsistencyCommand: extract diffAndReport() method (was duplicated 3x) - Email templates: extract _order_items_table.html.twig partial (shared by notification + cancelled) - SonarQube: exclude src/Entity/** from CPD (getters/setters duplication) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
33 lines
1.8 KiB
Twig
33 lines
1.8 KiB
Twig
{% extends 'email/base.html.twig' %}
|
|
|
|
{% block title %}Nouvelle commande - {{ order.event.title }}{% endblock %}
|
|
|
|
{% block content %}
|
|
<h2>Nouvelle commande !</h2>
|
|
<p>Bonjour,</p>
|
|
<p>Une nouvelle commande a ete passee pour votre evenement <strong>{{ order.event.title }}</strong>.</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; font-size: 14px;">{{ 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;">Acheteur</td>
|
|
<td style="padding: 10px 12px; font-weight: 700;">{{ order.firstName }} {{ order.lastName }}</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;">Email</td>
|
|
<td style="padding: 10px 12px;">{{ order.email }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Date</td>
|
|
<td style="padding: 10px 12px;">{{ order.paidAt|date('d/m/Y H:i') }}</td>
|
|
</tr>
|
|
</table>
|
|
|
|
{{ include('email/_order_items_table.html.twig', {order: order, show_total: true}) }}
|
|
|
|
<p style="font-size: 12px; color: #9ca3af;">Vous pouvez consulter le detail de cette commande depuis votre espace organisateur, onglet Statistiques.</p>
|
|
{% endblock %}
|