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
@@ -121,6 +121,12 @@ export interface VolunteerRead {
|
||||
fee_amount: number | null;
|
||||
fee_payment_status: FeePaymentStatus | null;
|
||||
fee_paid_at: string | null;
|
||||
/** Coordonnées pour un reçu fiscal (cerfa) — seulement si payé via un type
|
||||
* de paiement « mécénat ». */
|
||||
mecenat_address: string | null;
|
||||
mecenat_city: string | null;
|
||||
mecenat_postal_code: string | null;
|
||||
mecenat_country: string | null;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
@@ -606,6 +612,9 @@ export interface FormPaymentOptionRead {
|
||||
label: string;
|
||||
amount: number;
|
||||
order: number;
|
||||
/** Type « mécénat » : le bénévole passe par une étape d'adresse postale
|
||||
* avant le paiement (reçu fiscal / cerfa). */
|
||||
requires_mecenat_info: boolean;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
@@ -614,12 +623,14 @@ export interface FormPaymentOptionCreate {
|
||||
label: string;
|
||||
amount: number;
|
||||
order?: number;
|
||||
requires_mecenat_info?: boolean;
|
||||
}
|
||||
|
||||
export interface FormPaymentOptionUpdate {
|
||||
label?: string;
|
||||
amount?: number;
|
||||
order?: number;
|
||||
requires_mecenat_info?: boolean;
|
||||
}
|
||||
|
||||
export interface PublicPositionOption {
|
||||
@@ -639,6 +650,7 @@ export interface PublicPaymentOption {
|
||||
id: string;
|
||||
label: string;
|
||||
amount: number;
|
||||
requires_mecenat_info: boolean;
|
||||
}
|
||||
|
||||
/** Tout ce qu'il faut pour afficher le formulaire public — jamais plus. */
|
||||
@@ -655,12 +667,40 @@ export interface PublicFormConfig {
|
||||
payment_options: PublicPaymentOption[];
|
||||
}
|
||||
|
||||
/** Trois formes possibles, selon le choix de paiement (voir
|
||||
* `app/api/forms.py:submit_public_form`) :
|
||||
* - aucun paiement en ligne (case désactivée, ou « je paierai sur place ») :
|
||||
* `volunteer_id` seul, le bénévole est déjà en base ;
|
||||
* - paiement en ligne, type « mécénat » : `pending_token` +
|
||||
* `requires_mecenat_info=true`, rien en base encore — direction l'étape
|
||||
* d'adresse (`submitMecenatInfo`) ;
|
||||
* - paiement en ligne, type simple : `pending_token` + `sumup_checkout_url`,
|
||||
* direction la page de paiement SumUp. */
|
||||
export interface FormSubmissionResult {
|
||||
volunteer_id: string;
|
||||
/** Lien de paiement hébergé SumUp, si un checkout a pu être créé. */
|
||||
volunteer_id: string | null;
|
||||
pending_token: string | null;
|
||||
requires_mecenat_info: boolean;
|
||||
sumup_checkout_url: string | null;
|
||||
}
|
||||
|
||||
/** Étape d'adresse postale d'un type de paiement « mécénat » — tous
|
||||
* obligatoires, nécessaires à l'édition d'un reçu fiscal (cerfa). */
|
||||
export interface MecenatInfoSubmit {
|
||||
address: string;
|
||||
city: string;
|
||||
postal_code: string;
|
||||
country: string;
|
||||
}
|
||||
|
||||
/** Réponse de la vérification en direct du paiement (page de confirmation) —
|
||||
* interrogée jusqu'à ce que le statut ne soit plus `PENDING`. */
|
||||
export interface PendingSubmissionStatus {
|
||||
status: FeePaymentStatus;
|
||||
label: string;
|
||||
amount: number;
|
||||
volunteer_id: string | null;
|
||||
}
|
||||
|
||||
/** Champs du formulaire public — envoyés en `multipart/form-data` (photo
|
||||
* possible). `position_wish_ids`/`artist_wish_ids` : JSON stringifié
|
||||
* (`'["id1","id2"]'`), pas de tableau natif possible en multipart. */
|
||||
@@ -673,9 +713,8 @@ export interface PublicFormSubmission {
|
||||
comment?: string;
|
||||
companion_wish_note?: string;
|
||||
available?: boolean;
|
||||
willing_to_pay_fee?: boolean;
|
||||
/** Type de paiement choisi (voir `PublicPaymentOption`) — `undefined` =
|
||||
* aucun (le bénévole ne participe pas à la cotisation). */
|
||||
/** Type de paiement choisi (voir `PublicPaymentOption`) — absent = « je
|
||||
* paierai sur place » (aucun paiement en ligne). */
|
||||
payment_option_id?: string;
|
||||
position_wish_ids?: string[];
|
||||
artist_wish_ids?: string[];
|
||||
|
||||
Reference in New Issue
Block a user