"""Statement Period Model.""" from datetime import datetime from typing import Optional from sqlalchemy import Enum from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql import func from collaborator.connectors import mysql from collaborator.constants.statement_period import StatementPeriodStatus class StatementPeriod(mysql.BaseModel): """A statement period.""" __tablename__ = "statement_period" statement_period_id: Mapped[int] = mapped_column("id", primary_key=True) name: Mapped[Optional[str]] vendor_id: Mapped[int] created_date: Mapped[datetime] = mapped_column(default=func.now()) updated_date: Mapped[Optional[datetime]] = mapped_column(default=func.now()) status: Mapped[StatementPeriodStatus] = mapped_column( Enum(StatementPeriodStatus), default=StatementPeriodStatus.OPEN ) abacus_statement_period_id: Mapped[Optional[int]] def to_dict(self) -> dict: """Convert the statement period to a dictionary.""" created_date_iso_format = ( self.created_date.isoformat() if isinstance(self.created_date, datetime) else self.created_date ) updated_date_iso_format = ( self.updated_date.isoformat() if isinstance(self.updated_date, datetime) else self.updated_date ) return { "id": self.statement_period_id, "name": self.name, "vendor_id": self.vendor_id, "created_date": created_date_iso_format, "updated_date": updated_date_iso_format, "status": self.status, "abacus_statement_period_id": self.abacus_statement_period_id, }