from sqlalchemy import ( String, ForeignKey, Index, Numeric, ) from sqlalchemy.orm import mapped_column, Mapped from Controllers.Postgres.mixin import CrudCollection class Staff(CrudCollection): __tablename__ = "staff" __exclude__fields__ = [] staff_description: Mapped[str] = mapped_column(String, server_default="", comment="Staff Description") staff_name: Mapped[str] = mapped_column(String, nullable=False, comment="Staff Name") staff_code: Mapped[str] = mapped_column(String, nullable=False, comment="Staff Code") duties_id: Mapped[int] = mapped_column(ForeignKey("duties.id"), nullable=False) duties_uu_id: Mapped[str] = mapped_column(String, nullable=False, comment="Duty UUID") __table_args__ = ({"comment": "Staff Information"},) class Employees(CrudCollection): __tablename__ = "employees" __exclude__fields__ = [] staff_id: Mapped[int] = mapped_column(ForeignKey("staff.id")) staff_uu_id: Mapped[str] = mapped_column(String, nullable=False, comment="Staff UUID") people_id: Mapped[int] = mapped_column(ForeignKey("people.id"), nullable=True) people_uu_id: Mapped[str] = mapped_column(String, nullable=True, comment="People UUID") __table_args__ = ( Index("employees_ndx_00", people_id, staff_id, unique=True), {"comment": "Employee Person Information"}, ) class EmployeeHistory(CrudCollection): __tablename__ = "employee_history" __exclude__fields__ = [] staff_id: Mapped[int] = mapped_column(ForeignKey("staff.id"), nullable=False, comment="Staff ID") staff_uu_id: Mapped[str] = mapped_column(String, nullable=False, comment="Staff UUID") people_id: Mapped[int] = mapped_column(ForeignKey("people.id"), nullable=False, comment="People ID") people_uu_id: Mapped[str] = mapped_column(String, nullable=False, comment="People UUID") __table_args__ = ( Index("_employee_history_ndx_00", people_id, staff_id), {"comment": "Employee History Information"}, ) class EmployeesSalaries(CrudCollection): __tablename__ = "employee_salaries" __exclude__fields__ = [] gross_salary: Mapped[float] = mapped_column( Numeric(20, 6), nullable=False, comment="Gross Salary" ) net_salary: Mapped[float] = mapped_column( Numeric(20, 6), nullable=False, comment="Net Salary" ) people_id: Mapped[int] = mapped_column(ForeignKey("people.id"), nullable=False) people_uu_id: Mapped[str] = mapped_column(String, nullable=False, comment="People UUID") __table_args__ = ( Index("_employee_salaries_ndx_00", people_id, "expiry_starts"), {"comment": "Employee Salaries Information"}, )