Formulaire public : encart de paiement de la cotisation via Yapla

FormTemplate.yapla_url (lien vers la page de cotisation Yapla, doit
commencer par http(s)://, PATCH .../form comme description/is_open)
fait apparaître un encart « Payer ma cotisation » sous la case
WILLING_TO_PAY_FEE, sur le formulaire public. Configurable depuis le
panneau « Personnalisation » de l'écran /inscriptions. La case reste
une simple déclaration : rien ne vérifie que le paiement a eu lieu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-09-23 21:10:38 +02:00
co-authored by Claude Sonnet 5
parent 8f8350aa1b
commit 5f80f167c8
14 changed files with 181 additions and 17 deletions
+9 -1
View File
@@ -102,6 +102,7 @@ def _template_read(template: FormTemplate, fields: list[FormFieldType]) -> FormT
fields=fields,
has_logo=template.logo is not None,
description=template.description,
yapla_url=template.yapla_url,
)
@@ -138,7 +139,13 @@ def update_form(
session: Session = Depends(get_session),
) -> FormTemplateRead:
template = _get_or_create_template(session, edition.id)
for field, value in payload.model_dump(exclude_unset=True).items():
changes = payload.model_dump(exclude_unset=True)
if changes.get("yapla_url"):
if not changes["yapla_url"].startswith(("http://", "https://")):
raise HTTPException(
status_code=422, detail={"code": "form.invalid_yapla_url"}
)
for field, value in changes.items():
setattr(template, field, value)
session.add(template)
session.commit()
@@ -233,6 +240,7 @@ def get_public_form(
artists=artists,
has_logo=template.logo is not None,
description=template.description,
yapla_url=template.yapla_url,
)
+4 -1
View File
@@ -493,14 +493,16 @@ class FormTemplateRead(ApiModel):
fields: list[FormFieldType]
has_logo: bool
description: str | None
yapla_url: str | None
class FormTemplateUpdate(ApiModel):
"""`None`/absent = inchangé pour chaque champ (`exclude_unset`) — permet
de changer `is_open` sans toucher `description`, et inversement."""
de changer `is_open` sans toucher `description`/`yapla_url`, etc."""
is_open: bool | None = None
description: str | None = None
yapla_url: str | None = None
class PublicPositionOption(ApiModel):
@@ -525,6 +527,7 @@ class PublicFormConfig(ApiModel):
artists: list[PublicArtistOption]
has_logo: bool
description: str | None
yapla_url: str | None
class FormSubmissionResult(ApiModel):