from sqlalchemy import Column, Integer, Float, DateTime, ForeignKey, Text from sqlalchemy.orm import relationship from datetime import datetime, timezone from database import Base def _utcnow(): return datetime.now(timezone.utc) class WaiterShift(Base): __tablename__ = "waiter_shifts" id = Column(Integer, primary_key=True, index=True) waiter_id = Column(Integer, ForeignKey("users.id"), nullable=False) business_day_id = Column(Integer, ForeignKey("business_days.id"), nullable=False) started_at = Column(DateTime(timezone=True), default=_utcnow, nullable=False) ended_at = Column(DateTime(timezone=True), nullable=True) starting_cash = Column(Float, nullable=True) total_collected = Column(Float, nullable=True) # snapshot written at shift end notes = Column(Text, nullable=True) waiter = relationship("User", foreign_keys=[waiter_id]) business_day = relationship("BusinessDay", back_populates="shifts") breaks = relationship("ShiftBreak", back_populates="shift", cascade="all, delete-orphan") class ShiftBreak(Base): __tablename__ = "shift_breaks" id = Column(Integer, primary_key=True, index=True) shift_id = Column(Integer, ForeignKey("waiter_shifts.id"), nullable=False) started_at = Column(DateTime(timezone=True), default=_utcnow, nullable=False) ended_at = Column(DateTime(timezone=True), nullable=True) shift = relationship("WaiterShift", back_populates="breaks")