"""Plusieurs types de paiement de la cotisation (SumUp) Revision ID: 0017_form_payment_options Revises: 0016_sumup_payment Create Date: 2026-09-29 `form_template.sumup_fee_amount` (un montant unique) est remplacé par une liste libre de types de paiement (`form_payment_option` : libellé + montant, configurés par la coordination, comme les créneaux types `DayPart`). Le bénévole en choisit au plus un à l'inscription ; le libellé et le montant choisis sont recopiés sur `volunteer` (`fee_payment_label`/`fee_amount`) au moment de la création du checkout — voir `app/api/forms.py`. """ from collections.abc import Sequence import sqlalchemy as sa from alembic import op revision: str = "0017_form_payment_options" down_revision: str | None = "0016_sumup_payment" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: op.create_table( "form_payment_option", sa.Column("id", sa.Uuid(), nullable=False), sa.Column("edition_id", sa.Uuid(), nullable=False), sa.Column("label", sa.String(), nullable=False), sa.Column("amount", sa.Float(), nullable=False), sa.Column("order", sa.Integer(), server_default="0", nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.ForeignKeyConstraint(["edition_id"], ["edition.id"], ondelete="CASCADE"), sa.PrimaryKeyConstraint("id"), sa.UniqueConstraint( "edition_id", "label", name="uq_form_payment_option_edition_label" ), ) op.create_index( "ix_form_payment_option_edition_id", "form_payment_option", ["edition_id"] ) op.drop_column("form_template", "sumup_fee_amount") op.add_column( "volunteer", sa.Column("fee_payment_label", sa.String(), nullable=True) ) op.add_column("volunteer", sa.Column("fee_amount", sa.Float(), nullable=True)) def downgrade() -> None: op.drop_column("volunteer", "fee_amount") op.drop_column("volunteer", "fee_payment_label") op.add_column( "form_template", sa.Column("sumup_fee_amount", sa.Float(), nullable=True) ) op.drop_index( "ix_form_payment_option_edition_id", table_name="form_payment_option" ) op.drop_table("form_payment_option")