98 lines
2.8 KiB
Python
98 lines
2.8 KiB
Python
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"},
|
|
)
|