Formulaire public : paiement de la cotisation via l'API SumUp (remplace Yapla)
ci-cd / build-backend (push) Failing after 4m12s
ci-cd / build-frontend (push) Skipped
ci-cd / deploy (push) Skipped

Remplace le simple lien Yapla statique par une vraie intégration API SumUp :
checkout hébergé créé à la soumission du formulaire, statut de paiement
(PENDING/PAID/FAILED/EXPIRED) tenu à jour par un webhook SumUp et visible sur
la fiche du bénévole. La cotisation n'est plus un montant unique : la
coordination configure autant de types de paiement qu'elle veut (libellé +
montant, ex. « Cotisation classique », « Mécénat »), et le bénévole en
choisit un à l'inscription — le libellé et le montant choisis sont figés sur
le bénévole, indépendamment d'une modification ultérieure de la config.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-09-29 19:56:04 +02:00
co-authored by Claude Sonnet 5
parent 0be5daa89c
commit 0bd38a6465
25 changed files with 1457 additions and 125 deletions
+11 -2
View File
@@ -9,6 +9,7 @@ import type {
DayPartRead,
EditionRead,
FormFieldType,
FormPaymentOptionRead,
PositionCategory,
PositionRead,
ShiftRead,
@@ -56,8 +57,10 @@ export interface MockState {
logo: string | null; // data URL
logoType: string | null;
description: string | null;
yaplaUrl: string | null;
sumupMerchantCode: string | null;
sumupApiKey: string | null;
};
formPaymentOptions: FormPaymentOptionRead[];
/** volunteerId -> photo (formulaire public), data URL. */
photos: Map<string, string>;
seq: number;
@@ -273,6 +276,10 @@ export function buildMockState(): MockState {
companion_wish_note: null,
self_declared_available: false,
willing_to_pay_fee: false,
fee_payment_label: null,
fee_amount: null,
fee_payment_status: null,
fee_paid_at: null,
created_at: NOW,
updated_at: NOW,
});
@@ -447,8 +454,10 @@ export function buildMockState(): MockState {
fields: [],
},
formTemplate: {
isOpen: true, fields: [], logo: null, logoType: null, description: null, yaplaUrl: null,
isOpen: true, fields: [], logo: null, logoType: null, description: null,
sumupMerchantCode: null, sumupApiKey: null,
},
formPaymentOptions: [],
photos: new Map(),
seq,
};