Files
Fulfillment-Backend/models/payroll.py

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)