Files
crm_ecosplay/templates/emails/payment_reminder_client.html.twig
Serreau Jovann 8b35e2b6d2 feat: comptabilite + prestataires + rapport financier + stats dynamiques
Comptabilite (Super Admin) :
- ComptabiliteController avec 7 exports CSV/JSON compatibles SAGE
  (journal ventes, grand livre, FEC, balance agee, reglements,
  commissions Stripe 1.5%+0.25E, couts services)
- Export PDF via ComptaPdf (FPDF) avec bloc legal pre-rempli,
  tableau pagine, champ signature DocuSeal
- Signature electronique DocuSeal + callback + envoi email signe
  avec template dedie (compta_export_signed.html.twig)
- Rapport financier public (RapportFinancierPdf) : recettes par
  service, depenses (Stripe, infra, prestataires), bilan excedent/deficit
- Codes comptables clients EC-XXXX (plus de 411xxx)

Prestataires (Super Admin) :
- Entite Prestataire (raisonSociale, siret, email, phone, adresse)
- Entite FacturePrestataire (numFacture, montantHt, montantTtc,
  year, month, isPaid, PDF via Vich)
- CRUD complet avec recherche SIRET via proxy API data.gouv.fr
- Commande cron app:reminder:factures-prestataire (5 du mois)
- Factures prestataires integrees dans export couts services
- Sidebar Super Admin : entree Prestataires + Comptabilite

Stats (/admin/stats) :
- Cout prestataire dynamique depuis FacturePrestataire
- Fusion Infra + Prestataire en "Cout de fonctionnement"
- Commission Stripe corrigee (1.5% + 0.25E par transaction)

Divers :
- DocuSealService::sendComptaForSignature() + getApi()
- Customer::generateCodeComptable() format EC-XXXX-XXXXX
- Protection double prefixe EC- a la creation client
- Bouton regenerer PDF cache quand advert state=accepted
- Modals sans script inline (data-modal-open/close dans app.js)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 23:39:31 +02:00

77 lines
7.0 KiB
Twig

{% extends 'email/base.html.twig' %}
{% block content %}
<table width="600" cellpadding="0" cellspacing="0" style="margin: 0 auto;">
<tr>
<td style="padding: 32px;">
{% set greeting = customer.raisonSociale ? 'Chez ' ~ customer.raisonSociale : 'Bonjour ' ~ customer.firstName %}
<h1 style="font-family: Arial, Helvetica, sans-serif; font-size: 22px; font-weight: 700; color: #111827; margin: 0 0 16px;">{{ greeting }},</h1>
{% if type == 'reminder' %}
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #374151; line-height: 22px; margin: 0 0 16px;">
Nous vous rappelons que l'avis de paiement <strong>{{ advert.orderNumber.numOrder }}</strong> d'un montant de <strong>{{ tva_enabled ? advert.totalTtc : advert.totalHt }} &euro; TTC</strong> reste en attente de reglement.
</p>
{% elseif type == 'warning' %}
<div style="background-color: #fef3c7; border-left: 3px solid #f59e0b; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #92400e; font-weight: 700; margin: 0 0 4px;">Avertissement</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">Votre avis de paiement <strong>{{ advert.orderNumber.numOrder }}</strong> est en retard de reglement. Merci de regulariser votre situation dans les meilleurs delais.</p>
</div>
{% elseif type == 'suspension_warning' %}
<div style="background-color: #fef2f2; border-left: 3px solid #dc2626; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #dc2626; font-weight: 700; margin: 0 0 4px;">Avertissement - Suspension imminente</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">Sans reglement de l'avis <strong>{{ advert.orderNumber.numOrder }}</strong> sous 5 jours, vos services seront <strong>suspendus</strong>.</p>
</div>
{% elseif type == 'final_reminder' %}
<div style="background-color: #fef2f2; border-left: 3px solid #dc2626; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #dc2626; font-weight: 700; margin: 0 0 4px;">Ultime rappel</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">Ceci est votre <strong>dernier rappel</strong> avant la suspension de vos services. Merci de regler l'avis <strong>{{ advert.orderNumber.numOrder }}</strong> immediatement.</p>
</div>
{% elseif type == 'suspension' %}
<div style="background-color: #fef2f2; border-left: 3px solid #dc2626; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #dc2626; font-weight: 700; margin: 0 0 4px;">Suspension de vos services</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">En l'absence de reglement de l'avis <strong>{{ advert.orderNumber.numOrder }}</strong>, vos services ont ete <strong>suspendus</strong>. Le retablissement sera effectue des reception de votre paiement.</p>
</div>
{% elseif type == 'formal_notice' %}
<div style="background-color: #fef2f2; border-left: 3px solid #991b1b; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #991b1b; font-weight: 700; margin: 0 0 4px;">Mise en demeure</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">Conformement aux conditions generales, nous vous mettons en demeure de regler l'avis <strong>{{ advert.orderNumber.numOrder }}</strong> d'un montant de <strong>{{ tva_enabled ? advert.totalTtc : advert.totalHt }} &euro; TTC</strong>. A defaut de reglement, des poursuites pourront etre engagees.</p>
</div>
{% elseif type == 'termination_warning' %}
<div style="background-color: #fef2f2; border-left: 3px solid #991b1b; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #991b1b; font-weight: 700; margin: 0 0 4px;">Avertissement - Resiliation et suppression de donnees</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">Sans reglement sous 15 jours, votre contrat sera <strong>resilie</strong> et l'ensemble de vos donnees sera <strong>definitivement supprime</strong>. Cette action est irreversible.</p>
</div>
{% elseif type == 'termination' %}
<div style="background-color: #fef2f2; border-left: 3px solid #991b1b; padding: 10px 16px; margin: 0 0 16px;">
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #991b1b; font-weight: 700; margin: 0 0 4px;">Resiliation de contrat</p>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #374151; margin: 0;">Votre contrat a ete <strong>resilie</strong> suite au non-paiement de l'avis <strong>{{ advert.orderNumber.numOrder }}</strong>. Vos donnees seront supprimees et une procedure de <strong>recouvrement legal</strong> sera engagee pour le montant de <strong>{{ tva_enabled ? advert.totalTtc : advert.totalHt }} &euro; TTC</strong>.</p>
</div>
{% endif %}
<table width="100%" cellpadding="0" cellspacing="0" style="margin: 20px 0; border: 1px solid #e5e7eb;">
<tr>
<td style="padding: 10px 16px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; color: #9ca3af; background: #f9fafb; width: 35%;">Avis de paiement</td>
<td style="padding: 10px 16px; font-family: monospace; font-size: 13px; font-weight: 700;">{{ advert.orderNumber.numOrder }}</td>
</tr>
<tr>
<td style="padding: 10px 16px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; color: #9ca3af; background: #f9fafb;">{% if tva_enabled %}Montant TTC{% else %}Montant{% endif %}</td>
<td style="padding: 10px 16px; font-family: monospace; font-size: 16px; font-weight: 700;">{{ tva_enabled ? advert.totalTtc : advert.totalHt }} &euro;</td>
</tr>
</table>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #9ca3af; margin: 16px 0 0;">
Pour toute question : <a href="mailto:contact@e-cosplay.fr" style="color: #fabf04;">contact@e-cosplay.fr</a>
</p>
</td>
</tr>
</table>
{% endblock %}