class Offerings(Base): __tablename__ = 'offerings' period_start = db.Column(db.Integer) period_length = db.Column(db.Integer) room_id = db.Column(db.Integer, db.ForeignKey('rooms.id'), nullable=False) instructor_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) current_count = db.Column(db.Integer) capacity = db.Column(db.Integer) elective_id = db.Column(db.Integer, db.ForeignKey('electives.id'), nullable=False) registrations = db.relationship('Registrations', backref='offering', lazy=True) start_time = db.Column(db.DateTime, nullable=False) end_time = db.Column(db.DateTime, nullable=False) def __repr__(self): return f'{self.elective.name} w/ {self.instructor} @ {self.room}' def jsEvent(self): obj = { 'id': self.id, 'title': self.elective.name + " @ " + str(self.room), 'start': self.start_time.strftime("%Y-%m-%d %H:%M:%S"), 'end': self.end_time.strftime("%Y-%m-%d %H:%M:%S"), 'html': render_template('offeringmodal.html', offering=self), 'url': '#' } return obj
class Completions(Base): __tablename__ = 'completions' user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) elective_id = db.Column(db.Integer, db.ForeignKey('electives.id'), nullable=False) date = db.Column(db.DateTime)
class CoreAttend(Base): __tablename__ = 'coreattends' student_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) status = db.Column(db.String(25)) date = db.Column(db.DateTime(), default=db.func.current_timestamp()) core_id = db.Column(db.Integer, db.ForeignKey('cores.id'), nullable=False)
class Cores(Base): __tablename__ = 'cores' name = db.Column(db.String(100)) description = db.Column(db.String(500)) building = db.Column(db.String(100)) room_id = db.Column(db.Integer, db.ForeignKey('rooms.id'), nullable=False) core_period = db.Column(db.Integer) core_difficulty = db.Column(db.String(100)) instructor_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) registrations = db.relationship('CoreRegistrations', backref='core', lazy=True) attendance = db.relationship('CoreAttend', backref='core') def start_time(self): return datetime.datetime( 2021, 6, 14, 8, 30) + datetime.timedelta(hours=1 * (self.core_period - 1)) def end_time(self): return datetime.datetime( 2021, 6, 14, 9, 30) + datetime.timedelta(hours=1 * (self.core_period - 1)) def jsEvents(self): # generate dates if not self.core_period: return [] d = datetime.datetime(2021, 6, 14, 8, 30) + datetime.timedelta(hours=1 * (self.core_period - 1)) out = [] while d < datetime.datetime(2021, 6, 18): obj = { 'id': self.id, 'title': self.name + " @ " + str(self.room), 'start': d.strftime("%Y-%m-%d %H:%M:%S"), 'end': (d + datetime.timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S"), 'url': url_for('editevent', id=self.id), 'html': render_template('coremodal.html', event=self) } out.append(obj) d += datetime.timedelta(days=1) return out def __repr__(self): return f'{self.name} w/ {self.instructor} @ {self.room}'
class Offerings(Base): __tablename__ = 'offerings' day = db.Column(db.Date) period_start = db.Column(db.Integer) period_length = db.Column(db.Integer) building = db.Column(db.String(100)) room = db.Column(db.String(100)) instructor = db.Column(db.String(100)) current_count = db.Column(db.Integer) capacity = db.Column(db.Integer) elective_id = db.Column(db.Integer, db.ForeignKey('electives.id'), nullable=False) registrations = db.relationship('Registrations', backref='offering', lazy=True)
class Room(Base): __tablename__ = 'rooms' name = db.Column(db.String(50), nullable=False) building_id = db.Column(db.Integer, db.ForeignKey('buildings.id')) events = db.relationship('Event', backref='room', lazy=True, cascade="all,delete") offerings = db.relationship('Offerings', backref='room', cascade="all,delete") cores = db.relationship('Cores', backref='room', cascade="all,delete") def __repr__(self): return self.building.name + " - " + self.name
class Event(Base): __tablename__ = 'events' start_time = db.Column(db.DateTime, nullable=False) end_time = db.Column(db.DateTime, nullable=False) title = db.Column(db.String(100), nullable=False) room_id = db.Column(db.Integer, db.ForeignKey('rooms.id'), nullable=False) description = db.Column(db.String(250), nullable=False) def jsEvent(self): obj = { 'id': self.id, 'title': self.title + " @ " + str(self.room), 'start': self.start_time.strftime("%Y-%m-%d %H:%M:%S"), 'end': self.end_time.strftime("%Y-%m-%d %H:%M:%S"), 'url': url_for('editevent', id=self.id), 'html': render_template('eventmodal.html', event=self) } return obj
class Prerequisites(Base): __tablename__ = 'prerequisites' elective_id = db.Column(db.Integer, db.ForeignKey('electives.id'), nullable=False) prerequisite_elective_id = db.Column(db.Integer, nullable=False)
class CoreRegistrations(Base): __tablesname__ = 'registrations' user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) core_id = db.Column(db.Integer, db.ForeignKey('cores.id'), nullable=False)
class Registrations(Base): __tablesname__ = 'registrations' user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) offering_id = db.Column(db.Integer, db.ForeignKey('offerings.id'), nullable=False)