52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
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)
|