Changements rédactionnels : abonnement par virement, avantage abonnements
This commit is contained in:
@@ -13,12 +13,11 @@ register_page(
|
|||||||
|
|
||||||
abonnement_features = dcc.Markdown("""
|
abonnement_features = dcc.Markdown("""
|
||||||
- sauvegarde de vues dans la page Tableau
|
- 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(**_):
|
subscription_terms = html.Div(
|
||||||
contenu = html.Div(
|
|
||||||
[
|
[
|
||||||
html.H2("Abonnement"),
|
html.H2("Abonnement"),
|
||||||
dcc.Markdown(
|
dcc.Markdown(
|
||||||
@@ -108,5 +107,8 @@ Conformément au RGPD, vous pouvez demander l'accès, la rectification ou la sup
|
|||||||
"Pour toute question relative à votre abonnement : [page de contact](/a-propos/contact)."
|
"Pour toute question relative à votre abonnement : [page de contact](/a-propos/contact)."
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
return apropos_shell("abonnement", contenu)
|
|
||||||
|
|
||||||
|
def layout(**_):
|
||||||
|
return apropos_shell("abonnement", subscription_terms)
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ def _plan_card(meta: dict, trial: int | None, trial_used: bool):
|
|||||||
dbc.CardBody(
|
dbc.CardBody(
|
||||||
[
|
[
|
||||||
html.H4(meta["label"], className="mb-1"),
|
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"),
|
html.P(meta["description"], className="mb-3"),
|
||||||
badge,
|
badge,
|
||||||
html.A(
|
html.A(
|
||||||
@@ -75,7 +78,7 @@ def _plan_cards(trial_used=False, trial_for=plans.trial_days):
|
|||||||
|
|
||||||
def _explainer():
|
def _explainer():
|
||||||
col_left = dbc.Col(
|
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,
|
md=6,
|
||||||
style={
|
style={
|
||||||
"borderRight": "1px solid var(--bs-border-color)",
|
"borderRight": "1px solid var(--bs-border-color)",
|
||||||
@@ -84,16 +87,19 @@ def _explainer():
|
|||||||
)
|
)
|
||||||
col_right = dbc.Col(
|
col_right = dbc.Col(
|
||||||
[
|
[
|
||||||
html.H4("Ce que les abonnements de soutien permettent"),
|
html.H4("Ce que les abonnements permettent"),
|
||||||
html.Ul(
|
html.Ul(
|
||||||
[
|
[
|
||||||
html.Li(
|
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 "
|
"acheteurs dont les données sont introuvables et les raisons de "
|
||||||
"cette non-publication."
|
"cette non-publication."
|
||||||
),
|
),
|
||||||
html.Li(
|
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 "
|
"législation plus ambitieuse sur la transparence de la commande "
|
||||||
"publique."
|
"publique."
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from flask_login import current_user
|
|||||||
|
|
||||||
from src.auth import db as auth_db
|
from src.auth import db as auth_db
|
||||||
from src.pages._compte_shell import account_guard, account_shell
|
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.subscriptions import client as frisbii_client
|
||||||
from src.utils.data import get_annuaire_data
|
from src.utils.data import get_annuaire_data
|
||||||
|
|
||||||
@@ -15,65 +16,7 @@ register_page(
|
|||||||
description="Informations de facturation pour votre abonnement colibre.",
|
description="Informations de facturation pour votre abonnement colibre.",
|
||||||
)
|
)
|
||||||
|
|
||||||
_CGU_MARKDOWN = """
|
_CGU_MARKDOWN = subscription_terms
|
||||||
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).
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def _csrf_input():
|
def _csrf_input():
|
||||||
@@ -244,6 +187,9 @@ def layout(**query):
|
|||||||
|
|
||||||
checkboxes = html.Div(
|
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(
|
dcc.Checklist(
|
||||||
id="inf-cb-retractation",
|
id="inf-cb-retractation",
|
||||||
options=[
|
options=[
|
||||||
@@ -287,7 +233,7 @@ def layout(**query):
|
|||||||
dbc.Row([col1, col2], className="g-4 mb-4"),
|
dbc.Row([col1, col2], className="g-4 mb-4"),
|
||||||
checkboxes,
|
checkboxes,
|
||||||
html.Button(
|
html.Button(
|
||||||
"Suivant",
|
"Ajout d'une carte de paiement",
|
||||||
id="inf-submit",
|
id="inf-submit",
|
||||||
type="submit",
|
type="submit",
|
||||||
className="btn btn-primary",
|
className="btn btn-primary",
|
||||||
|
|||||||
Reference in New Issue
Block a user