fix layout

This commit is contained in:
Alejandro Vazquez
2026-04-17 18:14:59 -03:00
parent ffb383554a
commit ec977bf90b
7 changed files with 45 additions and 29 deletions
+16 -7
View File
@@ -15,18 +15,27 @@ class Reservation(db.Model):
id = db.Column(db.Integer, primary_key=True)
classroom_id = db.Column(db.Integer, db.ForeignKey('classrooms.id'), nullable=False)
commission_id = db.Column(db.Integer, db.ForeignKey('commissions.id'), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
user_id = db.Column('teacher_id', db.Integer, db.ForeignKey('users.id'), nullable=False) # Maps to teacher_id in DB
start_time = db.Column(db.DateTime, nullable=False)
end_time = db.Column(db.DateTime, nullable=False)
purpose = db.Column(db.String(500), nullable=False)
status = db.Column(db.Enum(ReservationStatus), default=ReservationStatus.PENDING, nullable=False)
status = db.Column(db.String(20), default='PENDING', nullable=False) # DB uses VARCHAR not ENUM
expected_attendees = db.Column(db.Integer, nullable=False)
notes = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Virtual property to convert status string to enum
@property
def status_enum(self):
"""Get status as enum"""
try:
return ReservationStatus(self.status)
except (ValueError, AttributeError):
return ReservationStatus.PENDING
# Relationships
classroom = db.relationship('Classroom', backref=db.backref('reservation_list', lazy=True, cascade='all, delete-orphan'))
commission = db.relationship('Commission', backref=db.backref('reservation_list', lazy=True, cascade='all, delete-orphan'))
@@ -42,7 +51,7 @@ class Reservation(db.Model):
'start_time': self.start_time.isoformat() if self.start_time else None,
'end_time': self.end_time.isoformat() if self.end_time else None,
'purpose': self.purpose,
'status': self.status.value if self.status else None,
'status': self.status, # Already a string in DB
'expected_attendees': self.expected_attendees,
'notes': self.notes,
'created_at': self.created_at.isoformat() if self.created_at else None,
@@ -54,7 +63,7 @@ class Reservation(db.Model):
def is_confirmed(self):
"""Check if reservation is confirmed"""
return self.status == ReservationStatus.CONFIRMED
return self.status == ReservationStatus.CONFIRMED.value
def can_be_cancelled(self):
"""Check if reservation can be cancelled (24 hours before start)"""
@@ -65,9 +74,9 @@ class Reservation(db.Model):
"""Check if this reservation conflicts with another"""
if self.classroom_id != other_reservation.classroom_id:
return False
if self.status != ReservationStatus.CONFIRMED:
if self.status != ReservationStatus.CONFIRMED.value:
return False
if other_reservation.status != ReservationStatus.CONFIRMED:
if other_reservation.status != ReservationStatus.CONFIRMED.value:
return False
# Check time overlap
@@ -79,7 +88,7 @@ class Reservation(db.Model):
"""Find conflicting reservations for a specific classroom and time slot"""
query = Reservation.query.filter(
Reservation.classroom_id == classroom_id,
Reservation.status == ReservationStatus.CONFIRMED,
Reservation.status == ReservationStatus.CONFIRMED.value,
Reservation.start_time < end_time,
Reservation.end_time > start_time
)