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)
 |