Skip to content

Model brokers

components.payment_gateway.subcomponents.banking_documents.models.brokers.sepa_mandate

SepaMandateModelBroker

Bases: BaseModelBroker

autoload class-attribute instance-attribute

autoload = {'current_status_log': True}

create_sepa_mandate classmethod

create_sepa_mandate(
    session,
    /,
    *,
    provider,
    external_id,
    sepa_creditor_identifier,
    debtor_name,
    debtor_iban,
    debtor_country,
    unique_mandate_reference,
    issued_at,
    account_holder_id=None,
    status,
)
Source code in components/payment_gateway/subcomponents/banking_documents/models/brokers/sepa_mandate.py
@classmethod
def create_sepa_mandate(
    cls,
    session: Session,
    /,
    *,
    provider: PaymentServiceProvider,
    external_id: str,
    sepa_creditor_identifier: str,
    debtor_name: str,
    debtor_iban: str,
    debtor_country: str,
    unique_mandate_reference: str,
    issued_at: datetime,
    account_holder_id: UUID | None = None,
    status: SepaMandateStatus,
) -> SepaMandate:
    sepa_mandate = cls.model(
        provider=provider,
        external_id=external_id,
        sepa_creditor_identifier=sepa_creditor_identifier,
        debtor_name=debtor_name,
        debtor_iban=debtor_iban,
        debtor_country=debtor_country,
        unique_mandate_reference=unique_mandate_reference,
        issued_at=issued_at,
        account_holder_id=account_holder_id,
    )
    session.add(sepa_mandate)

    status_log = SepaMandateStatusLog(
        sepa_mandate=sepa_mandate,
        status=status,
    )
    session.add(status_log)

    session.flush()

    return sepa_mandate

get_sepa_mandate classmethod

get_sepa_mandate(session, /, id, with_status_history=True)
Source code in components/payment_gateway/subcomponents/banking_documents/models/brokers/sepa_mandate.py
@classmethod
def get_sepa_mandate(
    cls,
    session: Session,
    /,
    id: UUID,
    with_status_history: bool = True,  # TODO @frederic.bonnet 2025-11-01: default to False but need to update tests
) -> SepaMandate:
    if with_status_history:
        query = cls.select(custom_autoload=cls.autoload | {"status_history": True})
    else:
        query = cls.select()
    sepa_mandate: SepaMandate = session.execute(
        query.filter(SepaMandate.id == id)
    ).scalar_one()
    return sepa_mandate

get_sepa_mandate_by_external_id classmethod

get_sepa_mandate_by_external_id(
    session, /, provider, external_id
)
Source code in components/payment_gateway/subcomponents/banking_documents/models/brokers/sepa_mandate.py
@classmethod
def get_sepa_mandate_by_external_id(
    cls,
    session: Session,
    /,
    provider: PaymentServiceProvider,
    external_id: str,
) -> SepaMandate:
    sepa_mandate: SepaMandate = session.execute(
        cls.select().filter(
            SepaMandate.provider == provider, SepaMandate.external_id == external_id
        )
    ).scalar_one()
    return sepa_mandate

model class-attribute instance-attribute

model = SepaMandate

set_sepa_mandate_status classmethod

set_sepa_mandate_status(session, /, id, status)
Source code in components/payment_gateway/subcomponents/banking_documents/models/brokers/sepa_mandate.py
@classmethod
def set_sepa_mandate_status(
    cls,
    session: Session,
    /,
    id: UUID,
    status: SepaMandateStatus,
) -> None:
    sepa_mandate = cls.get_sepa_mandate(session, id)
    if sepa_mandate.status == status:
        return

    status_log = SepaMandateStatusLog(
        sepa_mandate=sepa_mandate,
        status=status,
    )
    session.add(status_log)

    session.refresh(
        sepa_mandate, attribute_names=["status_history", "current_status_log"]
    )