Inscription en deux temps, emails de confirmation et export Excel des bénévoles
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:
co-authored by
Claude Sonnet 5
parent
68d42ee303
commit
a2b748566b
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user