Cerfa mécénat rempli envoyé par email à la confirmation du paiement
Quand un paiement « mécénat » est confirmé, l'email de confirmation porte en pièce jointe le reçu fiscal (cerfa 11580*05) rempli du bénévole, avec une phrase l'annonçant dans le corps. Généré en tâche de fond : un échec de génération envoie l'email sans pièce jointe plutôt que rien. - build_message/send acceptent des pièces jointes - app/mecenat/receipts.py : passage Volunteer → MecenatReceipt, partagé avec l'export coordination - modèle cerfa remplacé par une version pré-remplie avec l'association (organisme bénéficiaire, cases 200/978, signature) ; position de la date du versement ajustée Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5675e1d220
commit
5a0209ce43
@@ -81,6 +81,12 @@ from app.email import (
|
||||
send,
|
||||
)
|
||||
from app.forms import verify_hcaptcha
|
||||
from app.mecenat import (
|
||||
RECEIPT_FILENAME,
|
||||
MecenatReceipt,
|
||||
generate_mecenat_receipts_pdf,
|
||||
receipt_for,
|
||||
)
|
||||
from app.models import (
|
||||
Account,
|
||||
Artist,
|
||||
@@ -822,21 +828,48 @@ def _promote_pending(
|
||||
session.commit()
|
||||
|
||||
if volunteer.email:
|
||||
# Paiement « mécénat » (adresse postale saisie) : le cerfa rempli part
|
||||
# en pièce jointe du même email — voir `_send_paid_confirmation`.
|
||||
receipt = receipt_for(volunteer) if volunteer.mecenat_address else None
|
||||
subject, body = render_registration_paid_confirmation(
|
||||
first_name=volunteer.first_name,
|
||||
label=volunteer.fee_payment_label or "",
|
||||
amount=volunteer.fee_amount or 0,
|
||||
with_mecenat_receipt=receipt is not None,
|
||||
)
|
||||
background.add_task(
|
||||
send,
|
||||
_send_paid_confirmation,
|
||||
volunteer.email,
|
||||
subject,
|
||||
body,
|
||||
logo=edition_logo(session, edition.id),
|
||||
receipt=receipt,
|
||||
)
|
||||
return volunteer
|
||||
|
||||
|
||||
def _send_paid_confirmation(
|
||||
to: str,
|
||||
subject: str,
|
||||
body: str,
|
||||
*,
|
||||
logo: tuple[bytes, str] | None,
|
||||
receipt: MecenatReceipt | None,
|
||||
) -> None:
|
||||
"""Tâche de fond : génère le cerfa (si mécénat) puis envoie. Best effort
|
||||
comme le reste des emails — un échec de génération du PDF ne doit pas
|
||||
priver le bénévole de sa confirmation, qui part alors sans pièce jointe
|
||||
(la coordination garde l'export des reçus pour le lui renvoyer)."""
|
||||
attachments = []
|
||||
if receipt is not None:
|
||||
try:
|
||||
pdf = generate_mecenat_receipts_pdf([receipt])
|
||||
attachments.append((pdf, "application/pdf", RECEIPT_FILENAME))
|
||||
except Exception:
|
||||
logger.exception("Reçu fiscal mécénat non généré — email envoyé sans pièce jointe")
|
||||
send(to, subject, body, logo=logo, attachments=attachments)
|
||||
|
||||
|
||||
def _apply_pending_checkout_result(
|
||||
session: Session,
|
||||
edition: Edition,
|
||||
|
||||
Reference in New Issue
Block a user