from datetime import datetime from typing import List, Optional, Protocol from abacus_common_logic.models.base import db from sqlalchemy import select from sqlalchemy.sql import literal_column, table class ReferencePaymentEntity(Protocol): """ReferencePaymentEntity readonly model.""" reference_payment_entity_id: int payment_entity_name: str country_of_tax_reporting: str created_by: str created_at: datetime last_modified_by: str last_modified: datetime @classmethod def _base_query(cls): rpe = table('reference_payment_entity').alias('rpe') columns = [ literal_column('rpe.reference_payment_entity_id').label( 'reference_payment_entity_id' ), literal_column('rpe.payment_entity_name').label('payment_entity_name'), literal_column('rpe.country_of_tax_reporting').label( 'country_of_tax_reporting' ), literal_column('rpe.created_by').label('created_by'), literal_column('rpe.created_at').label('created_at'), literal_column('rpe.last_modified_by').label('last_modified_by'), literal_column('rpe.last_modified').label('last_modified'), ] return select(columns).select_from(rpe) @classmethod def get_all(cls) -> List['ReferencePaymentEntity']: """Get all records.""" return db.session.execute(cls._base_query()).fetchall() @classmethod def get_by_id( cls, reference_payment_entity_id: int ) -> Optional['ReferencePaymentEntity']: """Get record by id.""" query = cls._base_query().where( literal_column('rpe.reference_payment_entity_id') == reference_payment_entity_id ) return db.session.execute(query).first()