front_ponto_eletronico/models/shifts.py

42 lines
1.6 KiB
Python

from datetime import datetime
from sqlalchemy import Column, Integer, String, ForeignKey, Time
from sqlalchemy.orm import relationship
from extensions import db
from models.time_schedule import TimeSchedule # Certo!
# 🔗 Tabela de associação many-to-many
shift_time_schedule = db.Table(
'shift_time_schedule',
db.Column('shift_id', db.Integer, db.ForeignKey('shift.id'), primary_key=True),
db.Column('time_schedule_id', db.Integer, db.ForeignKey('time_schedules.id'), primary_key=True)
)
class Shift(db.Model):
__tablename__ = 'shift'
id = db.Column(db.Integer, primary_key=True)
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
name = db.Column(db.String(50), nullable=False)
start_time = db.Column(db.Time, nullable=False)
end_time = db.Column(db.Time, nullable=False)
interval_start = db.Column(db.Time, nullable=True)
interval_end = db.Column(db.Time, nullable=True)
type_interval = db.Column(db.String(50), nullable=False)
description = db.Column(db.String(255), nullable=True) # Descrição do turno
tolerance = db.Column(db.Integer, nullable=True) # Tolerância em minutos
# 🗓️ Relacionamento com os dias (TimeSchedule usados como dias da semana)
time_schedules = db.relationship(
'TimeSchedule',
secondary=shift_time_schedule,
backref='shifts',
lazy='subquery'
)
# Relacionamento com records
records = db.relationship("Record", back_populates="shifts", lazy=True)
def __repr__(self):
return f'<Shift {self.name} ({self.start_time} - {self.end_time})>'