From ea20491e9cdf6286849ad6deaa76b53fe8618615 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Thu, 2 Jul 2026 16:50:33 +0200 Subject: [PATCH] =?UTF-8?q?Changements=20r=C3=A9dactionnels=20:=20abonneme?= =?UTF-8?q?nt=20par=20virement,=20avantage=20abonnements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/a_propos/abonnement.py | 92 ++++++++++++------------ src/pages/compte/abonnement.py | 16 +++-- src/pages/compte/abonnement_mes_infos.py | 66 ++--------------- 3 files changed, 64 insertions(+), 110 deletions(-) diff --git a/src/pages/a_propos/abonnement.py b/src/pages/a_propos/abonnement.py index 8af556b..5b707bd 100644 --- a/src/pages/a_propos/abonnement.py +++ b/src/pages/a_propos/abonnement.py @@ -13,34 +13,33 @@ register_page( abonnement_features = dcc.Markdown(""" - sauvegarde de vues dans la page Tableau - - vote pour les fonctionnalités à développer en priorité (une fois la période d'essai terminée) + - vote pour les [fonctionnalités à développer](/a-propos/roadmap) en priorité (une fois la période d'essai terminée) """) -def layout(**_): - contenu = html.Div( - [ - html.H2("Abonnement"), - dcc.Markdown( - """ +subscription_terms = html.Div( + [ + html.H2("Abonnement"), + dcc.Markdown( + """ L'accès aux fonctionnalités de base de colibre est gratuit et sans inscription. Il est également possible de créer un compte gratuitement via le menu [Connexion](/connexion). Une fois le compte créé, il est possible de souscrire à un abonnement mensuel qui donne accès à des fonctionnalités supplémentaires. Cet abonnement s'adresse tant aux professionnel·les qu'aux particuliers. """ - ), - html.H4("Fonctionnalités incluses"), - dcc.Markdown( - """ + ), + html.H4("Fonctionnalités incluses"), + dcc.Markdown( + """ Les fonctionnalités accessibles aux abonné·es évoluent au fil du développement du service. Fonctionnalités réservées aux abonné·es : """ - ), - abonnement_features, - dcc.Markdown(""" + ), + abonnement_features, + dcc.Markdown(""" Les fonctionnalités en cours de développement et soumises au vote sont visibles dans la section [Roadmap](/a-propos/roadmap)."""), - html.H4("Tarifs"), - dcc.Markdown( - """ + html.H4("Tarifs"), + dcc.Markdown( + """ Deux formules sont proposées : - **Abonnement** — 20 € HT / mois (soit 24 € TTC) @@ -48,43 +47,43 @@ Deux formules sont proposées : La TVA applicable en France est de 20 %. """ - ), - html.H4("Modes de paiement"), - dcc.Markdown( - """ + ), + html.H4("Modes de paiement"), + dcc.Markdown( + """ Les cartes bancaires des réseaux Visa et Mastercard sont acceptées. Il est également possible de payer par virement bancaire à condition de payer un an d'abonnement. """ - ), - html.H4("Période d'essai"), - dcc.Markdown( - """ + ), + html.H4("Période d'essai"), + dcc.Markdown( + """ Une période d'essai gratuite est proposée lors de la souscription. Sa durée est indiquée avant validation. Aucun prélèvement n'est effectué pendant cette période. À son terme, l'abonnement est activé et facturé automatiquement. La période d'essai est accordée une seule fois par compte. """ - ), - html.H4("Facturation et paiement"), - dcc.Markdown( - """ + ), + html.H4("Facturation et paiement"), + dcc.Markdown( + """ L'abonnement est facturé mensuellement, à la date anniversaire de la souscription, et donne lieu à l'émission d'une facture visible sur le compte de l'abonné·e. Le paiement est traité par [Frisbii](https://www.frisbii.com), prestataire européen de paiement en ligne. Les coordonnées bancaires sont conservées exclusivement par Frisbii et ne sont pas transmises à colibre. """ - ), - html.H4("Résiliation"), - dcc.Markdown( - """ + ), + html.H4("Résiliation"), + dcc.Markdown( + """ L'abonnement peut être résilié à tout moment depuis l'espace [Mon compte](/compte/abonnement). La résiliation prend effet à la fin de la période mensuelle en cours : l'accès aux fonctionnalités payantes est maintenu jusqu'à cette date, sans remboursement au prorata. """ - ), - html.H4("Données recueillies"), - dcc.Markdown( - """ + ), + html.H4("Données recueillies"), + dcc.Markdown( + """ La gestion de l'abonnement implique le traitement de données, réparties entre colibre et Frisbii (prestataire de paiement). Conformément au RGPD, colibre ne receuille que les données strictement nécessaire au bon fonctionnement du site et de la facturation. @@ -102,11 +101,14 @@ au bon fonctionnement du site et de la facturation. Ces données sont utilisées uniquement pour la gestion de votre abonnement et ne sont pas transmises à des tiers à des fins commerciales. Conformément au RGPD, vous pouvez demander l'accès, la rectification ou la suppression de vos données en [me contactant](/a-propos/contact). """ - ), - html.H4("Contact"), - dcc.Markdown( - "Pour toute question relative à votre abonnement : [page de contact](/a-propos/contact)." - ), - ] - ) - return apropos_shell("abonnement", contenu) + ), + html.H4("Contact"), + dcc.Markdown( + "Pour toute question relative à votre abonnement : [page de contact](/a-propos/contact)." + ), + ] +) + + +def layout(**_): + return apropos_shell("abonnement", subscription_terms) diff --git a/src/pages/compte/abonnement.py b/src/pages/compte/abonnement.py index 5bbf0b7..deab188 100644 --- a/src/pages/compte/abonnement.py +++ b/src/pages/compte/abonnement.py @@ -40,7 +40,10 @@ def _plan_card(meta: dict, trial: int | None, trial_used: bool): dbc.CardBody( [ html.H4(meta["label"], className="mb-1"), - html.P(f"{meta['prix_ht']} € HT / mois", className="text-muted mb-3"), + html.P( + f"{meta['prix_ht']} € HT / mois ({str(int(meta['prix_ht']) * 1.2).replace('.0', '')} € TTC)", + className="text-muted mb-3", + ), html.P(meta["description"], className="mb-3"), badge, html.A( @@ -75,7 +78,7 @@ def _plan_cards(trial_used=False, trial_for=plans.trial_days): def _explainer(): col_left = dbc.Col( - [html.H4("Fonctionnalités réservées aux abonné•es :"), abonnement_features], + [html.H4("Fonctionnalités réservées aux abonné·es :"), abonnement_features], md=6, style={ "borderRight": "1px solid var(--bs-border-color)", @@ -84,16 +87,19 @@ def _explainer(): ) col_right = dbc.Col( [ - html.H4("Ce que les abonnements de soutien permettent"), + html.H4("Ce que les abonnements permettent"), html.Ul( [ html.Li( - "Rédaction d'études à partir des données, par exemple sur les " + "passer plus de temps à développer colibre et moins de temps à chercher des missions" + ), + html.Li( + "rédaction d'études à partir des données, par exemple sur les " "acheteurs dont les données sont introuvables et les raisons de " "cette non-publication." ), html.Li( - "Fédération des bonnes volontés souhaitant militer pour une " + "fédération des bonnes volontés souhaitant militer pour une " "législation plus ambitieuse sur la transparence de la commande " "publique." ), diff --git a/src/pages/compte/abonnement_mes_infos.py b/src/pages/compte/abonnement_mes_infos.py index c733fb4..b4606d2 100644 --- a/src/pages/compte/abonnement_mes_infos.py +++ b/src/pages/compte/abonnement_mes_infos.py @@ -4,6 +4,7 @@ from flask_login import current_user from src.auth import db as auth_db from src.pages._compte_shell import account_guard, account_shell +from src.pages.a_propos.abonnement import subscription_terms from src.subscriptions import client as frisbii_client from src.utils.data import get_annuaire_data @@ -15,65 +16,7 @@ register_page( description="Informations de facturation pour votre abonnement colibre.", ) -_CGU_MARKDOWN = """ -L'accès aux fonctionnalités de base de colibre est gratuit et sans inscription. -Un abonnement payant donne accès à des fonctionnalités supplémentaires qui nécessitent la création d'un compte. - -#### Fonctionnalités incluses - -Les fonctionnalités accessibles aux abonnés évoluent au fil du développement du service. -La liste à jour est visible depuis la [page d'abonnement](/compte/abonnement). - -#### Tarifs - -Deux formules sont proposées : - -- **Abonnement** — 20 € HT / mois (soit 24 € TTC) -- **Abonnement de soutien** — 50 € HT / mois (soit 60 € TTC) — mêmes fonctionnalités, contribution renforcée au projet - -La TVA applicable est de 20 %. Les prix TTC sont affichés lors de la souscription. - -#### Période d'essai - -Une période d'essai gratuite peut être proposée lors de la souscription. -Sa durée est indiquée avant validation. Aucun prélèvement n'est effectué pendant cette période. -À son terme, l'abonnement est activé et facturé automatiquement. - -La période d'essai est accordée une seule fois par utilisateur. - -#### Facturation et paiement - -L'abonnement est facturé mensuellement, à la date anniversaire de la souscription. -Le paiement est traité par [Frisbii](https://www.frisbii.com), prestataire européen de paiement en ligne. -Les coordonnées bancaires sont conservées exclusivement par Frisbii et ne sont pas transmises à colibre. - -#### Résiliation - -L'abonnement peut être résilié à tout moment depuis l'espace [Mon compte](/compte/abonnement). -La résiliation prend effet à la fin de la période mensuelle en cours : l'accès aux fonctionnalités payantes est maintenu jusqu'à cette date, sans remboursement au prorata. - -#### Données stockées - -La gestion de l'abonnement implique le traitement de données personnelles, réparties entre colibre et Frisbii (prestataire de paiement). - -**Données stockées par colibre :** - -- Adresse e-mail (identification du compte) -- Numéro SIRET (si renseigné, conservé pour pré-remplir les futures souscriptions et alimenter des fonctionnalités) - -**Données stockées par Frisbii :** - -- Informations de facturation : prénom, nom, adresse postale, code postal, ville, pays, nom de l'entreprise -- Informations de paiement : coordonnées bancaires (accessibles uniquement par Frisbii, jamais transmises à colibre) -- Historique des factures - -Ces données sont utilisées uniquement pour la gestion de votre abonnement et ne sont pas transmises à des tiers à des fins commerciales. -Conformément au RGPD, vous pouvez demander l'accès, la rectification ou la suppression de vos données en [me contactant](/a-propos/contact). - -#### Contact - -Pour toute question relative à votre abonnement : [page de contact](/a-propos/contact). -""" +_CGU_MARKDOWN = subscription_terms def _csrf_input(): @@ -244,6 +187,9 @@ def layout(**query): checkboxes = html.Div( [ + dcc.Markdown( + "Si vous préférez régler par virement bancaire et une facturation annuelle plutôt qu'un réglement mensuel automatique par carte bancaire, [contactez-moi](/a-propos/contact)." + ), dcc.Checklist( id="inf-cb-retractation", options=[ @@ -287,7 +233,7 @@ def layout(**query): dbc.Row([col1, col2], className="g-4 mb-4"), checkboxes, html.Button( - "Suivant", + "Ajout d'une carte de paiement", id="inf-submit", type="submit", className="btn btn-primary",