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>
77 lines
7.0 KiB
Twig
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 }} € 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 }} € 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 }} € 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 }} €</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 %}
|