Numéro d'ordre unique sur chaque reçu fiscal mécénat

Volunteer.mecenat_receipt_number (migration 0020, unique) : année du
paiement + rang sur 5 chiffres (202600001…), une seule numérotation pour
toutes les éditions, repartant à 1 chaque année. Attribué à la
confirmation du paiement, ou au premier export pour les bénévoles payés
avant (dans l'ordre des paiements), puis jamais réattribué — un reçu
regénéré garde son numéro. Attribution sérialisée par un verrou
pg_advisory_xact_lock (webhook et sondage peuvent confirmer deux
paiements à la fois). Imprimé centré dans la case « Numéro d'ordre du
reçu » en page 1 du cerfa.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-10-03 13:48:05 +02:00
co-authored by Claude Opus 5.5
parent 5a0209ce43
commit ccd769d04e
10 changed files with 214 additions and 16 deletions
+3
View File
@@ -84,6 +84,7 @@ from app.forms import verify_hcaptcha
from app.mecenat import (
RECEIPT_FILENAME,
MecenatReceipt,
assign_receipt_number,
generate_mecenat_receipts_pdf,
receipt_for,
)
@@ -795,6 +796,8 @@ def _promote_pending(
)
session.add(volunteer)
session.flush()
if volunteer.mecenat_address:
assign_receipt_number(session, volunteer)
position_ids = _filter_owned_ids(
session, Position, edition.id, _parse_id_list(pending.position_wish_ids_json)