144 lines
4.5 KiB
Python
144 lines
4.5 KiB
Python
from sqlalchemy import (
|
|
String,
|
|
ForeignKey,
|
|
Index,
|
|
Numeric,
|
|
)
|
|
from sqlalchemy.orm import mapped_column, Mapped
|
|
|
|
from Services.PostgresService.controllers.mixin_controllers import CrudCollection
|
|
|
|
# from ApiLayers.ApiValidations.Request import InsertCompanyEmployees
|
|
|
|
|
|
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"
|
|
)
|
|
|
|
# people: Mapped["People"] = relationship(
|
|
# "People", back_populates="employees", foreign_keys=[people_id], uselist=True
|
|
# )
|
|
# duty: Mapped["CompanyDuty"] = relationship(
|
|
# "CompanyDuty", back_populates="employees", foreign_keys=[duty_id]
|
|
# )
|
|
#
|
|
# @classmethod
|
|
# def create_action(cls, data: InsertCompanyEmployees):
|
|
# from Schemas import Duties
|
|
#
|
|
# data_dict = data.model_dump()
|
|
# if duty := Duties.find_one(uu_id=data.duty_uu_id):
|
|
# data_dict["duty_id"] = duty.id
|
|
# # if person := People.find_one(uu_id=data.person_uu_id):
|
|
# # data_dict["people_id"] = person.id
|
|
# if data.start_date:
|
|
# data_dict["expiry_starts"] = data.start_date
|
|
# if data.stop_date:
|
|
# data_dict["expiry_ends"] = data.stop_date
|
|
# # del data_dict["duty_uu_id"], data_dict["person_uu_id"]
|
|
# del data_dict["start_date"], data_dict["stop_date"], data_dict["duty_uu_id"]
|
|
# return cls.find_or_create(**data_dict)
|
|
#
|
|
# __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"
|
|
)
|
|
|
|
# people: Mapped["People"] = relationship(
|
|
# "People", back_populates="employee_salaries", foreign_keys=[people_id]
|
|
# )
|
|
|
|
__table_args__ = (
|
|
Index("_employee_salaries_ndx_00", people_id, "expiry_starts"),
|
|
{"comment": "Employee Salaries Information"},
|
|
)
|
|
|
|
|
|
# class Events2Employees(CrudCollection):
|
|
#
|
|
# __tablename__ = "events2employees"
|
|
# __exclude__fields__ = []
|
|
#
|
|
# event_id = mapped_column(ForeignKey("events.id"), nullable=False)
|
|
# employees_id = mapped_column(ForeignKey("employees.id"), nullable=False)
|
|
#
|
|
# __table_args__ = (
|
|
# Index("_events2employees_ndx_00", event_id, employees_id),
|
|
# {"comment": "Events2Employees Information"},
|
|
# )
|