FormPaymentOption.free_amount (migration 0021) : case « Montant libre » sur l'écran Inscriptions ; le montant configuré devient le minimum et le bénévole saisit le sien sur le formulaire public (payment_amount, virgule ou point, 2 décimales max, plafond 10 000 € contre une faute de frappe — 422 form.invalid_free_amount sinon). Validé côté client avant l'envoi, le serveur restant seul juge. Le montant choisi est celui du checkout SumUp, recopié sur la fiche, l'email de confirmation et le cerfa. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
33 lines
927 B
Python
33 lines
927 B
Python
"""Type de paiement à montant libre
|
|
|
|
Revision ID: 0021_payment_option_free_amount
|
|
Revises: 0020_mecenat_receipt_number
|
|
Create Date: 2026-10-03
|
|
|
|
`form_payment_option.free_amount` : le bénévole saisit lui-même son montant
|
|
sur le formulaire public, `amount` en devient le minimum — voir
|
|
`app/api/forms.py:_free_amount`. Les types de paiement existants restent à
|
|
montant fixe.
|
|
"""
|
|
|
|
from collections.abc import Sequence
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision: str = "0021_payment_option_free_amount"
|
|
down_revision: str | None = "0020_mecenat_receipt_number"
|
|
branch_labels: str | Sequence[str] | None = None
|
|
depends_on: str | Sequence[str] | None = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"form_payment_option",
|
|
sa.Column("free_amount", sa.Boolean(), nullable=False, server_default="false"),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_column("form_payment_option", "free_amount")
|