58 lines
2.6 KiB
Python
58 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import date, datetime
|
|
|
|
from sqlalchemy import Boolean, CheckConstraint, Date, DateTime, ForeignKey, Integer, Numeric, String, Text, UniqueConstraint, func
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from src.db.base import Base
|
|
|
|
|
|
class Vsp(Base):
|
|
__tablename__ = "vsp"
|
|
__table_args__ = (
|
|
UniqueConstraint(
|
|
"reg_number", name="vsp_reg_number_unique",
|
|
),
|
|
CheckConstraint(
|
|
"closed_at IS NULL OR opened_at IS NULL OR closed_at >= opened_at",
|
|
name="chk_closed_after_opened",
|
|
),
|
|
|
|
{"schema": "v3"},
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
branch_id: Mapped[int] = mapped_column(Integer, ForeignKey("v3.org_unit.id"))
|
|
reg_number: Mapped[str | None] = mapped_column(String)
|
|
address: Mapped[str | None] = mapped_column(String)
|
|
format: Mapped[str | None] = mapped_column(String)
|
|
opened_at: Mapped[date | None] = mapped_column(Date)
|
|
placement_type: Mapped[str | None] = mapped_column(String)
|
|
staff_count: Mapped[int | None] = mapped_column(Integer)
|
|
total_area: Mapped[float | None] = mapped_column(Numeric)
|
|
closed_at: Mapped[date | None] = mapped_column(Date)
|
|
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
system_code: Mapped[str | None] = mapped_column(String(100), nullable=True)
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), server_default=func.now()
|
|
)
|
|
updated_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
|
|
created_by: Mapped[int | None] = mapped_column(Integer, ForeignKey("v3.app_user.id"))
|
|
updated_by: Mapped[int | None] = mapped_column(
|
|
Integer, ForeignKey("v3.app_user.id"), nullable=True,
|
|
)
|
|
vsp_type: Mapped[str | None] = mapped_column(String(100), nullable=True)
|
|
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
|
|
rent_contract_num: Mapped[str | None] = mapped_column(String, nullable=True)
|
|
rent_end_date : Mapped[date | None]= mapped_column(Date, nullable=True)
|
|
|
|
|
|
|
|
org_unit = relationship("OrgUnit", back_populates="vsps")
|
|
# budget_lines: Mapped[list["BudgetLine"]] = relationship("BudgetLine", back_populates="vsp") # type: ignore
|
|
# rent_details: Mapped[list["RentDetail"]] = relationship("RentDetail", back_populates="vsp")
|
|
# security_details: Mapped[list["SecurityDetail"]] = relationship("SecurityDetail", back_populates="vsp")
|
|
# utility_details: Mapped[list["UtilityDetail"]] = relationship("UtilityDetail", back_populates="vsp")
|