Inscription en deux temps, emails de confirmation et export Excel des bénévoles
ci-cd / build-backend (push) Successful in 30s
ci-cd / build-frontend (push) Successful in 18s
ci-cd / deploy (push) Successful in 12s

Formulaire public — paiement en ligne :
- Le bénévole n'est plus compté en base tant qu'un paiement en ligne choisi
  n'est pas confirmé (PendingFormSubmission, promu en Volunteer à la
  confirmation, webhook ou vérification en direct).
- Type de paiement « mécénat » : étape d'adresse postale avant le paiement,
  conservée sur le bénévole pour un reçu fiscal (cerfa) ultérieur.
- Page de confirmation au retour de SumUp, avec relance possible après
  échec/expiration sans ressaisir le formulaire.
- « Je paierai sur place » remplace « je ne participe pas » ; tous les
  champs activés par la coordination sont désormais obligatoires.
- La fiche bénévole n'affiche plus l'état des cases à cocher, seulement le
  résultat réel du paiement (libellé, montant, statut).

Emails :
- Email de confirmation d'inscription à la création du bénévole (tient lieu
  de reçu de paiement quand une cotisation est payée en ligne).
- Mise en forme HTML au thème de l'application (logo de l'édition en
  en-tête) pour tous les emails envoyés, texte brut conservé en repli.

Export Excel des bénévoles (COORDINATION) : coordonnées, vœux résolus en
noms lisibles, cotisation et mécénat.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-09-30 07:41:58 +02:00
co-authored by Claude Sonnet 5
parent 68d42ee303
commit a2b748566b
34 changed files with 2318 additions and 291 deletions
+20 -1
View File
@@ -140,6 +140,7 @@ async function checkPublicForm() {
first_name: 'Test',
last_name: 'Smoke',
hcaptcha_token: 'dev',
email: 'test.smoke@example.org',
artist_wish_ids: [sameDay[0].id, sameDay[1].id],
});
} catch (err) {
@@ -154,6 +155,7 @@ async function checkPublicForm() {
first_name: 'Test',
last_name: 'Smoke',
hcaptcha_token: 'dev',
email: 'test.smoke@example.org',
position_wish_ids: positions.slice(0, 3).map((p) => p.id),
});
} catch (err) {
@@ -161,6 +163,8 @@ async function checkPublicForm() {
}
}
// Paiement en ligne choisi : rien en base tant que la « banque » (mock) ne
// confirme pas — voir CLAUDE.md § 2, Paiement de la cotisation.
const result = await api.forms.submitPublic(e, {
first_name: 'test',
last_name: 'smoke',
@@ -171,7 +175,22 @@ async function checkPublicForm() {
artist_wish_ids: artists[0] ? [artists[0].id] : [],
payment_option_id: classique.id,
});
const created = await api.volunteers.get(e, result.volunteer_id);
if (result.volunteer_id || !result.pending_token) {
throw new Error('formulaire public : un paiement en ligne ne devrait pas créer le bénévole tout de suite');
}
const midCount = (await api.volunteers.list(e)).length;
if (midCount !== beforeCount) {
throw new Error('formulaire public : le bénévole ne devrait pas encore compter en base');
}
let status = await api.forms.getPendingStatus(e, result.pending_token);
if (status.status === 'PENDING') {
status = await api.forms.getPendingStatus(e, result.pending_token);
}
if (status.status !== 'PAID' || !status.volunteer_id) {
throw new Error('formulaire public : le paiement simulé ne se confirme pas');
}
const created = await api.volunteers.get(e, status.volunteer_id);
const afterCount = (await api.volunteers.list(e)).length;
console.log(