import datetime from typing import TYPE_CHECKING from sqlalchemy import ForeignKey, Double from sqlalchemy.orm import mapped_column, Mapped, relationship from models.base import BaseModel if TYPE_CHECKING: from models.auth import User class PayrollScheme(BaseModel): __tablename__ = 'payroll_schemas' key: Mapped[str] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(nullable=False) class PayRate(BaseModel): __tablename__ = 'pay_rates' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(nullable=False) payroll_scheme_key: Mapped[int] = mapped_column(ForeignKey("payroll_schemas.key"), nullable=False) payroll_scheme: Mapped["PayrollScheme"] = relationship(lazy="joined") base_rate: Mapped[float] = mapped_column(Double, nullable=False) overtime_rate: Mapped[float] = mapped_column(Double, nullable=True) overtime_threshold: Mapped[int] = mapped_column(nullable=True) class PaymentRecord(BaseModel): __tablename__ = 'payment_records' id: Mapped[int] = mapped_column(primary_key=True) user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), nullable=False) user: Mapped["User"] = relationship(back_populates="payment_records", foreign_keys=[user_id]) created_by_user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), nullable=False) created_by_user: Mapped["User"] = relationship(foreign_keys=[created_by_user_id]) start_date: Mapped[datetime.date] = mapped_column(nullable=False) end_date: Mapped[datetime.date] = mapped_column(nullable=False) created_at: Mapped[datetime.datetime] = mapped_column(nullable=False) payroll_scheme_key: Mapped[int] = mapped_column(ForeignKey("payroll_schemas.key"), nullable=False) payroll_scheme: Mapped["PayrollScheme"] = relationship() work_units: Mapped[float] = mapped_column(nullable=False) amount: Mapped[float] = mapped_column(Double, nullable=False)