"""TransferWise Batch Model.""" from datetime import datetime from decimal import Decimal from typing import Optional from sqlalchemy import Numeric from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql import func from collaborator.connectors import mysql class TransferwiseBatch(mysql.BaseModel): """Encapsulates TransferWise Batch data.""" __tablename__ = "transferwise_batch" transferwise_batch_id: Mapped[int] = mapped_column("id", primary_key=True) vendor_id: Mapped[int] profile_id: Mapped[int] batch_id: Mapped[str] version: Mapped[int] batch_name: Mapped[Optional[str]] amount: Mapped[Decimal] = mapped_column(Numeric(18, 6)) currency: Mapped[str] wire_fee: Mapped[Optional[Decimal]] = mapped_column(Numeric(18, 6)) transferwise_fee: Mapped[Optional[Decimal]] = mapped_column(Numeric(18, 6)) status: Mapped[Optional[str]] batch_type: Mapped[Optional[str]] = mapped_column("type") reference: Mapped[Optional[str]] payin_name: Mapped[Optional[str]] bank_code: Mapped[Optional[str]] account_number: Mapped[Optional[str]] iban: Mapped[Optional[str]] bban: Mapped[Optional[str]] account_type: Mapped[Optional[str]] bank_address_name: Mapped[Optional[str]] bank_address_branch_name: Mapped[Optional[str]] bank_address_first_line: Mapped[Optional[str]] bank_address_post_code: Mapped[Optional[str]] bank_address_city: Mapped[Optional[str]] bank_address_state_code: Mapped[Optional[str]] bank_address_country: Mapped[Optional[str]] tw_address_name: Mapped[Optional[str]] tw_address_first_line: Mapped[Optional[str]] tw_address_post_code: Mapped[Optional[str]] tw_address_city: Mapped[Optional[str]] tw_address_state_code: Mapped[Optional[str]] tw_address_country: Mapped[Optional[str]] created_date: Mapped[datetime] = mapped_column(default=func.now()) def to_dict(self) -> dict: """Get dictionary representation of model. Returns: dict """ wire_fee = ( float(self.wire_fee) if isinstance(self.wire_fee, Decimal) else self.wire_fee ) transferwise_fee = ( float(self.transferwise_fee) if isinstance(self.transferwise_fee, Decimal) else self.transferwise_fee ) return { "id": self.transferwise_batch_id, "vendor_id": self.vendor_id, "profile_id": self.profile_id, "batch_id": self.batch_id, "version": self.version, "batch_name": self.batch_name, "amount": float(self.amount), "currency": self.currency, "wire_fee": wire_fee, "transferwise_fee": transferwise_fee, "status": self.status, "type": self.batch_type, "reference": self.reference, "payin_name": self.payin_name, "bank_code": self.bank_code, "account_number": self.account_number, "iban": self.iban, "account_type": self.account_type, "bban": self.bban, "bank_address_name": self.bank_address_name, "bank_address_branch_name": self.bank_address_branch_name, "bank_address_first_line": self.bank_address_first_line, "bank_address_post_code": self.bank_address_post_code, "bank_address_city": self.bank_address_city, "bank_address_state_code": self.bank_address_state_code, "bank_address_country": self.bank_address_country, "tw_address_name": self.tw_address_name, "tw_address_first_line": self.tw_address_first_line, "tw_address_post_code": self.tw_address_post_code, "tw_address_city": self.tw_address_city, "tw_address_state_code": self.tw_address_state_code, "tw_address_country": self.tw_address_country, "created_date": self.created_date.isoformat(), }