import uuid from datetime import date from decimal import Decimal from typing import TYPE_CHECKING from sqlalchemy import Date, ForeignKey, Numeric, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from app.core.database import Base if TYPE_CHECKING: from app.models.company import Company class WorkSchedule(Base): __tablename__ = "work_schedules" id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) company_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("companies.id", ondelete="CASCADE"), nullable=False ) name: Mapped[str] = mapped_column(String(255), nullable=False) mon_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("8.00")) tue_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("8.00")) wed_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("8.00")) thu_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("8.00")) fri_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("8.00")) sat_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("0.00")) sun_h: Mapped[Decimal] = mapped_column(Numeric(4, 2), default=Decimal("0.00")) valid_from: Mapped[date] = mapped_column(Date, nullable=False) company: Mapped["Company"] = relationship("Company", lazy="noload") @property def weekly_hours(self) -> Decimal: return self.mon_h + self.tue_h + self.wed_h + self.thu_h + self.fri_h + self.sat_h + self.sun_h def hours_for_weekday(self, weekday: int) -> Decimal: """weekday: 0=Mon, 1=Tue, ..., 6=Sun""" mapping = [self.mon_h, self.tue_h, self.wed_h, self.thu_h, self.fri_h, self.sat_h, self.sun_h] return mapping[weekday] def __repr__(self) -> str: return f""