Journal des modifications
Les évolutions de Cohez.io, de la plus récente à la plus ancienne.
44 versions correspondent à « HelloAsso ».
Versions 11 à 20 sur 44
0.16.32.0 — 2026-06-25
Ajouts
- Relancer le paiement au niveau du panier. La page « Détail du panier » propose désormais un bouton « Relancer le paiement » qui s'adresse au payeur pour l'ensemble du panier, en un seul envoi. Le mode est choisi automatiquement : si un paiement HelloAsso reste à régler, un lien de paiement est renvoyé ; sinon (chèque, virement, espèces) un rappel récapitulatif liste le solde restant dû de chaque inscrit, le total et la date limite la plus proche. Une fenêtre de confirmation affiche le destinataire et prévient si une relance a déjà été envoyée il y a moins de 24 h. L'historique des relances du panier est visible sur la page. Le panneau est masqué quand le panier est soldé et pour un compte en lecture seule ; l'isolation entre associations est garantie (un panier d'une autre association renvoie une 404).
0.16.28.0 — 2026-06-23
Corrections
- On reste sur le plan de paiement après une action. Enregistrer, encaisser ou rejeter un versement renvoie désormais vers la page « Plan de paiement » du panier, plus vers le détail du panier.
- Barre de paiement lisible quand il n'y a aucun versement. La piste de la barre de progression reçoit une bordure : en thème sombre elle ne disparaît plus sur fond de carte, et le solde restant s'affiche désormais dans la légende.
- Pas de reçu en double sur un double-clic. Marquer un versement reçu ou rejeté deux fois de suite (double-soumission) ne ré-envoie plus les e-mails de reçu ni ne réécrit l'historique : l'action est rendue idempotente sous verrou.
Modifications
- Saisie d'un versement accessible depuis le détail du panier ET le plan de paiement. La fenêtre de saisie s'ouvre sur place (sans changer de page) ; seul l'enregistrement redirige vers le plan de paiement.
- Le trésorier peut saisir et encaisser les versements (la saisie exige la permission de mise à jour des adhérents).
Sécurité
- Isolation par association renforcée à la saisie d'un versement : un moyen de paiement personnalisé d'une autre association est refusé, et le paiement en ligne HelloAsso ne peut plus être choisi comme moyen de saisie manuelle.
0.16.26.0 — 2026-06-22
Ajouts
- Saisie des paiements au niveau du panier (versements). La saisie d'un paiement se fait désormais sur le panier entier, plus sur chaque inscription séparément. Un versement représente la pièce réelle reçue (un chèque, un virement, un paiement en ligne) ; il se répartit automatiquement sur les inscriptions du panier au prorata du solde restant, au centime près. Un panier réglé par plusieurs moyens donne plusieurs versements. La page de détail d'un panier affiche chaque versement, ses imputations par inscrit, son statut, et les actions « marquer reçu » / « marquer rejeté ».
- Reçu de versement. Un versement encaissé produit autant de lignes de reçu que d'inscriptions imputées.
Modifications
- Moyens de paiement à la saisie : seuls les moyens activés par l'association sont proposés (hors paiement en ligne HelloAsso, géré automatiquement). Un moyen désactivé dans les réglages n'apparaît plus dans la liste.
- Marquer un versement rejeté ne dé-valide jamais une inscription déjà validée : le rejet est signalé sans supprimer une adhésion acquise.
Corrections
- Montant de versement enregistré au bon ordre de grandeur : un montant saisi en euros n'est plus multiplié par cent à l'enregistrement.
0.16.22.0 — 2026-06-17
Modifications
- Les e-mails du parcours d'inscription et de paiement adoptent une identité visuelle commune. Un châssis de marque partagé (en-tête au nom du club, mise en page, pied « Propulsé par Cohez.io ») est désormais appliqué aux mails du funnel — confirmation de panier, relance HelloAsso, paiement reçu, inscription validée, ajustement de panier. Chaque mail porte en pied son statut, sa référence de panier et sa date d'inscription, pour un repérage immédiat.
- Le mail « Votre paiement a bien été reçu » est enrichi : il s'adresse nommément au payeur, récapitule le montant total, le montant déjà payé et le reste à régler, et précise le moyen de règlement utilisé.
Corrections
- La relance d'acompte réaffiche la date limite de règlement. Lors de l'harmonisation des e-mails, l'échéance de l'acompte (« à régler avant le … ») avait disparu de la relance — pourtant le cœur du message. Elle est rétablie, par adhérent.
- Le pied de l'e-mail d'inscription validée n'expose plus l'adresse du payeur. Le mail part toujours à l'adhérent ; le pied « Envoyé à » affichait par erreur l'adresse du payeur (libellé inexact et divulgation de données). Il affiche désormais l'adresse réelle du destinataire.
- Les noms à apostrophe s'affichent en clair dans la version texte des e-mails (nom de club, de cours, de personne), au lieu d'une entité HTML illisible (
').
Retraits
- L'e-mail d'administration « Paiement reçu pour une inscription » est supprimé, jugé redondant. Le reçu envoyé au payeur reste inchangé.
0.16.18.0 — 2026-06-15
Ajouts
- Commande
registrations:resend-cart-confirmation: outil de rattrapage pour renvoyer l'e-mail récapitulatif de panier aux payeurs d'inscriptions enregistrées avant le déploiement de cette fonctionnalité, qui ne l'ont donc jamais reçu. Ciblage par tenant et par fenêtre de dates, dry-run par défaut (envoi réel via--send), exclusion automatique des inscriptions ayant déjà reçu un e-mail lié à leur paiement.
Corrections
- E-mail de confirmation envoyé pour toute inscription en ligne : après une inscription via le formulaire public, le payeur reçoit désormais systématiquement un e-mail récapitulatif, quel que soit le moyen de paiement (HelloAsso, chèque, virement, espèces…) et dès que l'inscription est enregistrée — sans attendre la validation. Auparavant, seules les inscriptions réglées hors ligne déclenchaient un accusé : les paiements HelloAsso n'en recevaient aucun.
Modifications
- Un seul e-mail récapitulatif par panier, adressé au payeur : pour une inscription groupée (plusieurs adhérents en une soumission), le payeur reçoit un unique e-mail listant tous les adhérents et le détail des montants, au lieu d'un message par adhérent.
- E-mail de confirmation refondu aux couleurs du club : l'e-mail porte désormais l'identité de l'association (nom du club en en-tête et comme expéditeur, bloc contact, mention « Propulsé par Cohez.io » discrète en pied de page) au lieu de l'image Cohéz.io. Récapitulatif par adhérent avec sous-total par personne quand le panier en compte plusieurs et total global mis en avant, action de paiement adaptée au moyen choisi (chèque, virement, espèces, paiement en ligne), référence et date d'inscription. Gabarit HTML compatible messageries (mise en page en tableaux, styles en ligne, largeur 600 px, mode sombre) accompagné d'une version texte.
0.16.13.0 — 2026-06-11
Ajouts
- Gestion des inscriptions — filtre par saison, campagne et cours : la liste s'ouvre désormais sur la saison active et se filtre par saison (axe principal), puis affine par campagne et par cours. Le sélecteur « Toutes les saisons » lève le filtre. Campagne et cours se limitent automatiquement à la saison choisie.
- Bandeau de remplissage du cours : quand un cours est sélectionné, un bandeau indique le nombre d'inscrits actifs, la capacité, les places restantes et signale « Complet » dès que la capacité est atteinte. Les inscriptions annulées sont exclues du compteur.
Modifications
- Mise en page des filtres d'inscriptions réorganisée sur trois niveaux (contexte saison/campagne/cours, puis recherche/statut/tri, puis réinitialisation) avec un séparateur visuel entre les filtres et la liste.
Corrections
- Le filtre
statutde la liste d'inscriptions est désormais validé (valeurs hors énumération rejetées). - Le sélecteur de saisons reste synchronisé avec les données serveur lors des navigations conservant l'état.
Ajouts
- Relancer un paiement depuis la fiche d'inscription. Un nouveau panneau « Relancer le paiement » apparaît sur la fiche d'une inscription dont le paiement reste dû, pour l'équipe disposant du droit de gestion des membres. Pour un règlement HelloAsso, la relance renvoie un e-mail contenant un lien de paiement fiable (ancré sur le panier) ; le destinataire affiché avant l'envoi est exactement celui qui recevra le mail. Une relance récente (moins de 24 h) est signalée pour éviter les envois en rafale, et la date de la dernière relance est rappelée.
- Rappeler par e-mail les impayés réglés hors ligne. Pour une inscription non soldée dont le règlement attendu est un chèque, un virement, des espèces ou un moyen personnalisé (donc sans paiement HelloAsso), l'équipe peut envoyer un rappel par e-mail. Le rappel indique le montant restant dû, le moyen de paiement prévu et la date limite lorsqu'elle existe — sans aucun lien de paiement, puisque l'association n'encaisse pas en ligne dans ce cas.
Modifications
- Les e-mails partent au nom de l'association. Les e-mails adressés aux adhérents et payeurs (confirmation, reçu, relance, validation, rappel…) affichent désormais le nom de l'association comme nom d'expéditeur, au lieu d'un nom générique. L'adresse d'envoi technique reste inchangée (SPF/DKIM préservés).
Technique
- Nouvelle colonne
payments.manual_relance_sent_at, distincte dehelloasso_relance_sent_at: une relance manuelle n'est plus ré-armée par la synchronisation automatique, et la relance automatique (cron) exclut les paiements déjà relancés à la main. Une nouvelle tentative de paiement du payeur ré-arme la relance manuelle pour ne pas exclure le panier à vie. - Trait
WithTenantSenderappliqué à l'ensemble des mailables tenant (expéditeur = nom du tenant, repli sur le nom global si absent).
0.16.11.0 — 2026-06-09
Corrections
- Les paiements HelloAsso déclenchent enfin un vrai reçu. Quand un paiement HelloAsso était confirmé (retour de paiement, webhook ou synchronisation), l'application marquait le paiement comme reçu mais n'envoyait aucun reçu au payeur ni aucune notification à l'association — contrairement à un paiement enregistré à la main. Pire, l'e-mail de confirmation envoyé après paiement affichait « Statut : En attente », ce qui contredisait le paiement qui venait d'aboutir. Désormais, comme pour le flux manuel, chaque paiement HelloAsso confirmé envoie le reçu (avec le solde restant le cas échéant) au payeur et notifie l'association.
- L'adhérent reste informé même quand un tiers paie son acompte. Sur un acompte réglé via HelloAsso par un payeur distinct (parent, tiers payeur), l'adhérent ne recevait plus aucune notification sur sa propre inscription. Il reçoit maintenant une copie du reçu d'acompte. Sur un paiement intégral, l'adhérent est déjà prévenu par l'e-mail de validation, sans envoi en double.
- L'e-mail de confirmation d'inscription affiche le bon statut de paiement. Le statut (« En attente », « Acompte reçu, solde en attente », « Payé ») est maintenant calculé selon l'état réel de l'inscription, et le bloc « Acompte requis » ne s'affiche plus que pour une inscription encore en brouillon.
Retraits
- Bouton « Voir mon inscription » retiré des e-mails adressés aux adhérents. Il pointait vers une page du back-office accessible uniquement à l'équipe : l'adhérent tombait sur une page de connexion. Les liens légitimes vers le règlement HelloAsso (relances) sont conservés.
0.16.10.0 — 2026-06-08
Corrections
- Les liens « Finalisez votre paiement » des e-mails de relance HelloAsso fonctionnent à nouveau. Le lien encodait la référence du checkout HelloAsso, qui change à chaque nouvelle tentative de paiement : dès qu'un nouveau checkout était généré (premier clic du payeur, re-soumission), l'ancienne référence devenait orpheline et le payeur tombait sur la page « Le paiement n'a pas pu être finalisé », sans aucun recours. Le lien s'appuie désormais sur l'identité stable du panier (l'ensemble des inscriptions d'une même soumission), de sorte qu'il reste valide quel que soit le nombre de tentatives.
- Plus de page d'erreur muette au clic sur un lien de relance. Selon l'état réel, le payeur voit maintenant un message clair : « Paiement déjà réglé », « Cette inscription n'est plus active », « Lien expiré » ou une vraie erreur technique avec possibilité de recommencer. Un échec technique de création du checkout ne « brûle » plus la relance : l'inscription reste éligible à un rappel ultérieur.
Ajouts
- Notion de panier (
cart_id) sur les inscriptions. Les inscriptions issues d'une même soumission multi-membres partagent désormais un identifiant de panier stable, posé à la création et jamais réécrit. Il sert de socle au lien de relance fiable et prépare les évolutions à venir (récapitulatif du solde, gestion de commande). Les inscriptions existantes ont été rattachées à un panier par migration (regroupement par payeur et date pour les paiements tiers, panier individuel sinon).
Modifications
- Traçabilité renforcée du cycle de relance et de paiement HelloAsso. Chaque étape (clic du lien, résolution du panier, décision d'état, re-création du checkout, succès ou échec) est désormais journalisée avec un contexte structuré (préfixe
helloasso.*), pour diagnostiquer rapidement en production.
0.16.9.0 — 2026-06-05
Corrections
- Le formulaire public ne crée plus de « paiement en attente » fantôme pour les règlements hors ligne. Quand un adhérent s'inscrivait en choisissant un règlement par chèque, virement, espèces ou moyen personnalisé, l'application enregistrait aussitôt un paiement « en attente » alors qu'aucun argent n'avait circulé — le choix du moyen n'est qu'une intention, pas un paiement. Désormais seul HelloAsso génère un paiement à la soumission (support du tunnel de règlement). Pour les autres moyens, le choix de l'adhérent est conservé comme information sur l'inscription et affiché tel quel (email de confirmation, fiche back-office) ; l'équipe enregistre le paiement réel à la réception effective des fonds.
Technique
PublicRegistrationServicene crée unPayment(Pending) que lorsque le moyen résolu estHelloAsso(cas A acompte HA + paiement intégral HA). Les moyens hors ligne (chèque, virement, espèces, custom) ne matérialisent aucun paiement. Le gate porte sur la variable résolue (en cas A elle est forcée àHelloAssopour le checkout, même si l'adhérent a coché chèque).- Nouvelles colonnes
registrations.intended_payment_method(enum) +intended_custom_payment_method_id(FKtenant_payment_methods,nullOnDelete). Aucun backfill : les inscriptions antérieures restent ànull(libellé « — »). Registration::intendedPaymentMethodLabel()centralise la résolution du libellé (custom via relation, enum standard,null) ; l'email de confirmation et la fiche back-office la consomment (plus de lecture depuis le paiement supprimé).- Tests : flux offline = 0 paiement + intention stockée, HelloAsso = 1 paiement, cas A/B/C, méthode custom, rendu réel de l'email, libellé back-office, et résolution du libellé (null/standard/HelloAsso/custom/custom supprimé).
0.16.8.0 — 2026-06-05
Modifications
- Paiement manuel : avancement automatique d'une inscription en brouillon : lorsque l'équipe marque un paiement comme reçu sur une inscription en brouillon, celle-ci avance désormais automatiquement, à l'image du flux HelloAsso. Elle passe en Validée si le paiement solde le montant dû (ce qui génère la facture et l'email de validation), ou en En attente de validation s'il s'agit d'un paiement partiel. Auparavant l'inscription restait bloquée en brouillon malgré l'encaissement (place de cours retenue, dossier invisible des relances). Les inscriptions déjà validées, en attente ou annulées ne sont pas affectées : leur statut reste administratif.
Corrections
- Plus d'abandon d'une réservation dont le chèque a été déposé mais pas encore encaissé : le cron d'abandon (
registrations:abandon-expired-deposits) ne libère plus une réservation expirée si elle porte un engagement de paiement — un paiement déjà reçu, ou un paiement manuel (chèque, virement, espèces…) saisi par le back-office et encore en attente d'encaissement. Auparavant, un chèque déposé puis enregistré mais pas encore marqué « reçu » laissait la réservation en brouillon, qu'un délai dépassé pouvait faire abandonner à tort (place libérée alors que le chèque était en main). Le critère « saisie back-office » (paiement avec un auteur,created_by) exclut les paiementsPendingcréés par le formulaire public à la soumission : une inscription publique jamais réglée doit, elle, être libérée à l'échéance. Les tunnels HelloAsso abandonnés (paiement HelloAsso restéPending) et les chèques rejetés restent également abandonnables.
Technique
PaymentController::markAsReceivedenveloppe la mise à jour du paiement, la relecture verrouillée de l'inscription (lockForUpdate) et la transition de statut dans une transaction unique ; l'événementRegistrationValidatedest dispatché après commit pour que le listener de facture (CreateRegistrationInvoiceListener, idempotent) lise l'état persisté. La transition ne s'applique qu'aux inscriptions enDraft(re-test du statut sous verrou → pas de double-transition concurrente). Couverture étendue : transition pleine (Validated) / partielle (PendingValidation), statuts non-brouillon inchangés, etPaymentObserverTestmis à jour pour le nouveau contrat.AbandonExpiredDepositsCommand: le garde « ne pas abandonner si payé » devient un garde « engagement » —freshPayments->contains(Received || (Pending && method !== HelloAsso && created_by !== null)). Discriminants :method(chèque en attente d'encaissement vs checkout HelloAsso abandonné) etcreated_by(saisie back-office vsPaymentPendingcréé par le formulaire public, jamais réglé). 5 tests ajoutés (chèque manuel back-office protège, virement manuel back-office protège,Pendingpublic abandonné, HelloAssoPendingabandonné, chèqueRejectedabandonné).