Esempio n. 1
0
def adminConsole_semesterDetails():
    date = Date()
    form = SemesterMetaDataForm()

    if form.validate_on_submit():
        semester = SemesterMetaData.query.filter_by(semester=date.season).filter_by(year=date.year).first()

        # Current Semester not an entry in the database, create a new semester entry
        if not semester:
            semester = SemesterMetaData(semester=date.season, year=date.year)
            db.session.add(semester)
            db.session.commit()

        # Update semester fields for number of points and time/date survey expiration
        if form.onePoint.data:
            semester.numEventsOnePoint = form.onePoint.data
        if form.twoPoints.data:
            semester.numEventsTwoPoints = form.twoPoints.data
        if form.expirationDate.data:
            semester.dateSurveyExpire = form.expirationDate.data.strftime("%m_%d_%Y")
        if form.expirationTime.data:
            semester.timeSurveyExpire = form.expirationTime.data.strftime("%H_%M_%S")

        # if a change has been made, commit the data
        if form.onePoint.data or form.twoPoints.data or form.expirationDate.data or form.expirationTime.data:
            db.session.commit()
            flash(f'{date.season}, {date.year} semester details have been updated!', 'success')

    return render_template('semester_metadata.html', title='edit-semester-details', form=form, date=date)
Esempio n. 2
0
def attendance():
    form = StudentSignInForm()
    if form.validate_on_submit():
        student = Student.query.filter_by(id=form.studentID.data).first()
        if student:
            date = Date()
            attendance = Attendance.query.filter_by(studentID=form.studentID.data).\
                                          filter_by(semester=date.season).\
                                          filter_by(year=date.year).all()
            events = Event.query.filter_by(semester=date.season).\
                                 filter_by(year=date.year).all()

            semester = SemesterMetaData.query.filter_by(semester=date.season).\
                                              filter_by(year=date.year).first()

            # Check to see if student qualifies for any points
            if (semester == None):
                pointsQualified = (None, None)
            elif (len(attendance) >= semester.numEventsTwoPoints):
                pointsQualified = (0,2)
            elif (len(attendance) >= semester.numEventsOnePoint):
                pointsQualified = (0,1)
            else:
                pointsQualified = (semester.numEventsOnePoint - len(attendance), 0)


            return render_template('student-console.html', title='Student Attendance', date=date, student=student,
                                    pointsQualified=pointsQualified, attendance=attendance, events=events)
        else:
            flash(f'The user \'{form.studentID.data}\' does not exist.\
                    Please contact your department administrator.', 'danger')
    return render_template('student-signin.html', title='Login', form=form)
Esempio n. 3
0
class SemesterMetaDataForm(FlaskForm):
    date = Date()
    onePoint = IntegerField('Number of events for one point', validators=[Optional()])
    twoPoints = IntegerField('Number of events for two points', validators=[Optional()])
    expirationDate = DateField('Survey expiration date', default=date.currentDay, validators=[Optional()])
    expirationTime = TimeField('Survey expiration time', default=date.currentTime, validators=[Optional()])
    updateSemester = SubmitField('Update Semester')
class Event(db.Model):
    __tablename__ = 'events'
    id = db.Column('event_id', db.Integer, primary_key=True, nullable=False)

    date = Date()
    eventDate = db.Column('event_date', db.String(10), default=date.stringDate)
    eventName = db.Column('event_name', db.String(50), nullable=False)
    attendanceTotal = db.Column('attendance_total',
                                db.Integer,
                                nullable=False,
                                default=0)
    newStudentTotal = db.Column('new_student_total',
                                db.Integer,
                                nullable=False,
                                default=0)
    semester = db.Column('semester',
                         db.String(6),
                         nullable=False,
                         default=date.season)
    year = db.Column('year', db.String(4), nullable=False, default=date.year)

    def __init__(self, eventName, attendanceTotal, newStudentTotal, semester,
                 year):
        self.eventName = eventName
        self.attendanceTotal = attendanceTotal
        self.newStudentTotal = newStudentTotal
        self.semester = semester
        self.year = year

    def __repr__(self):
        return f"Event('{self.id}', '{self.eventDate}', '{self.eventName}',"\
                        f"'{self.attendanceTotal}','{self.semester}', '{self.year}')"
class SemesterMetaData(db.Model):
    __tablename__ = 'semester_metadata'
    id = db.Column('semester_id', db.Integer, primary_key=True, nullable=False)
    date = Date()
    semester = db.Column('semester',
                         db.String(6),
                         nullable=False,
                         default=date.season)
    year = db.Column('year', db.String(4), nullable=False, default=date.year)
    numEventsOnePoint = db.Column('num_events_one_point',
                                  db.Integer,
                                  nullable=False,
                                  default=10)
    numEventsTwoPoints = db.Column('num_events_two_points',
                                   db.Integer,
                                   nullable=False,
                                   default=12)
    dateSurveyExpire = db.Column('survey_expiration_date',
                                 db.String(10),
                                 default='null')
    timeSurveyExpire = db.Column('survey_expiration_time',
                                 db.String(10),
                                 default='null')

    def __init__(self, semester, year):
        self.semester = semester
        self.year = year

    def __repr__(self):
        return f"Semester('{self.id}', '{self.semester}', '{self.year}',"\
                        f"'{self.numEventsOnePoint}', '{self.numEventsTwoPoints}',"\
                        f"'{self.dateSurveyExpire}', '{self.timeSurveyExpire}')"
class Attendance(db.Model):
    __tablename__ = 'attendance'
    id = db.Column('attendance_id',
                   db.Integer,
                   primary_key=True,
                   nullable=False)
    date = Date()
    eventID = db.Column('event_id', db.Integer, nullable=False)
    studentID = db.Column('student_id',
                          db.String(10),
                          db.ForeignKey('students.student_id'),
                          nullable=False)
    isNew = db.Column('is_new', db.Integer, nullable=False, default=0)
    semester = db.Column('semester',
                         db.String(6),
                         nullable=False,
                         default=date.season)
    year = db.Column('year', db.String(4), nullable=False, default=date.year)
    date = db.Column('date_added', db.String(10), default=date.stringDate)

    def __init__(self, eventID, studentID, isNew, semester, year):
        self.eventID = eventID
        self.studentID = studentID
        self.isNew = isNew
        self.semester = semester
        self.year = year

    def __repr__(self):
        return f"Attendance('{self.id}', '{self.eventID}', '{self.studentID}',"\
                        f"'{self.isNew}', '{self.semester}', '{self.year}', '{self.date}')"
Esempio n. 7
0
def adminConsole_eventSession(event_url):
    date = Date()
    event = Event.query.filter_by(id=event_url).first()
    attendance = Attendance.query.filter_by(eventID=event.id).all()

    if not event:
        flash(f'Cannot open event session for event id: {event_url}', 'danger')
        return redirect(url_for('adminConsole_startEvent'))

    form = IDReaderForm()
    if form.validate_on_submit():
        id = form.id.data

        # Trim scanned barcode ID to 00xxxxxx ID format
        if id.startswith('2000'):
            id = id[2:]
        elif id.startswith('200'):
            id = id[1:]

        student = Student.query.filter_by(id=id).first()

        # Check that the student hasn't already been registered for the event
        if (not Attendance.query.filter_by(eventID=event.id).filter_by(studentID=id).first()):
            event.attendanceTotal += 1

            # If a student is new, create an entry in the database and generate an attendance record
            # Otherwise just generate the attendance record
            if student == None:
                isNew = True
            else:
                isNew = False

            if isNew:
                newStudent = Student(id=id)
                attendanceEntry = Attendance(eventID=event.id, studentID=id, isNew=1, semester=date.season, year=date.year)
                db.session.add(newStudent)
            else:
                attendanceEntry = Attendance(eventID=event.id, studentID=id, isNew=0, semester=date.season, year=date.year)

            db.session.add(attendanceEntry)
            db.session.commit()

            if isNew:
                flash(f'Welcome New Student!', 'success')
            else:
                flash(f'Welcome {student.firstName} {student.lastName}!', 'success')

            return redirect(url_for('adminConsole_eventSession', event_url=event.id))
        else:
            if student.firstName == 'new_student':
                flash(f'New Student ({student.id}) has already checked in!', 'danger')
            else:
                flash(f'{student.firstName} {student.lastName} has already checked in!', 'danger')
            return redirect(url_for('adminConsole_eventSession', event_url=event.id))

    return render_template('event_session.html', title='event-session', form=form, event=event, attendance=attendance)
 def __init__(self):
     date = Date()
     self.attendance = Attendance.query.filter_by(semester=date.season,
                                                  year=date.year)
     self.events = Event.query.filter_by(semester=date.season,
                                         year=date.year)
     self.students = Student.query.all()
     self.filename = str(date.season) + str(
         date.year) + '__Master_Spreadsheet.csv'
     self.filepath = os.getcwd() + '/pmm_server/spreadsheets/master/'
     self.generateSpreadsheet()
Esempio n. 9
0
def adminConsole_openExistingEvent():
    date = Date()
    eventChoices = [(str(g.id), g.eventName) for g in Event.query.filter_by(semester=date.season).filter_by(year=date.year).all()]

    form = LoadEventForm()
    form.chooseEvent.choices = eventChoices

    if form.validate_on_submit():
        eventChosen = Event.query.filter_by(id=form.chooseEvent.data)\
                                 .filter_by(semester=date.season)\
                                 .filter_by(year=date.year).first()

        pageTitle = "event: " + str(eventChosen.eventName)
        return redirect(url_for('adminConsole_eventSession', event_url=eventChosen.id))

    return render_template('reload_event.html', title='Re-open existing event', form=form)
class CourseData(db.Model):
    __tablename__ = 'course_data'
    date = Date()
    id = db.Column('course_id', db.Integer, primary_key=True, nullable=False)
    semester = db.Column('semester',
                         db.String(6),
                         nullable=False,
                         default=date.season)
    year = db.Column('year', db.String(4), nullable=False, default=date.year)
    crn = db.Column('crn', db.Integer, nullable=False)
    course = db.Column('course', db.String(10), nullable=False)
    section = db.Column('section', db.String(5), nullable=False)
    title = db.Column('title', db.String(100), nullable=False)
    hours = db.Column('hours', db.String(3), nullable=False)
    llc = db.Column('area_of_llc', db.String(10))
    type = db.Column('type', db.String(3), nullable=False)
    days = db.Column('days', db.String(3))
    time = db.Column('time', db.String(9))
    location = db.Column('location', db.String(15), nullable=False)
    instructor = db.Column('instructor', db.String(50), nullable=False)
    seats = db.Column('seats_still_available', db.Integer, nullable=False)
    status = db.Column('status', db.String(6), nullable=False)

    def __init__(self, crn, course, section, title, hours, llc, type, days,
                 time, location, instructor, seats, status):
        self.crn = crn
        self.course = course
        self.section = section
        self.title = title
        self.hours = hours
        self.llc = llc
        self.type = type
        self.days = days
        self.time = time
        self.location = location
        self.instructor = instructor
        self.seats = seats
        self.status = status

    def __repr__(self):
        return f"Course('{self.id}', '{self.semester}', '{self.year}', '{self.crn}',"\
                      f"'{self.course}', '{self.title}', '{self.hours}', '{self.llc}',"\
                      f"'{self.type}', '{self.days}', '{self.time}', '{self.location}',"\
                      f"'{self.instructor}', '{self.seats}', '{self.status}')"
Esempio n. 11
0
def adminConsole():
    date = Date()
    events = Event.query.filter_by(semester=date.season).filter_by(year=date.year).all()

    generateMasterSpreadsheet = MasterSpreadsheet()
    masterSpreadsheet = ('master', generateMasterSpreadsheet.filename)

    # Attendance Total is used to generate percentage style chart on admin-console page
    allSemesterAttendance = 0
    eventsWithFilePath = []
    for event in events:
        allSemesterAttendance += int(event.attendanceTotal)
        spreadsheet = EventSpreadsheet(event.id)

        eventWithFilePath = (event, ('event',spreadsheet.filename))
        eventsWithFilePath.append(eventWithFilePath)



    return render_template('admin.html', title='Admin Console', events=eventsWithFilePath, date=date,
                            attendTotal=allSemesterAttendance, masterSpreadsheet=masterSpreadsheet)
Esempio n. 12
0
def adminConsole_startEvent():
    date = Date()
    eventChoices = [(str(g.id), g.eventName) for g in Event.query.filter_by(semester=date.season).filter_by(year=date.year).all()]
    eventChoices.insert(0,('none', 'none (new event session)'))

    form = NewEventForm()
    form.attendance.choices = eventChoices

    if form.validate_on_submit():
        # Check to see if user chose to create a new pmm event with preexisting attendance data
        if form.attendance.data != 'none':
            eventAttendance = Event.query.filter_by(id=form.attendance.data)\
                                         .filter_by(semester=date.season)\
                                         .filter_by(year=date.year).first()
            attendanceEntries = Attendance.query.filter_by(eventID=eventAttendance.id).all()
            event = Event(eventName=form.eventName.data, attendanceTotal=eventAttendance.attendanceTotal,
                          newStudentTotal=0, semester=date.season, year=date.year)
            db.session.add(event)
            db.session.commit()

            for entry in attendanceEntries:
                newEntry = Attendance(event.id, entry.studentID, 0, entry.semester, entry.year)
                db.session.add(newEntry)

            db.session.commit()

        # Create new pmm event with blank attendance record
        else:
            event = Event(eventName=form.eventName.data, attendanceTotal=0,
                          newStudentTotal=0, semester=date.season, year=date.year)
            db.session.add(event)
            db.session.commit()

        pageTitle = "event: " + str(event.eventName)
        return redirect(url_for('adminConsole_eventSession', event_url=event.id))

    return render_template('create_event.html', title='start new event', form=form)
Esempio n. 13
0
class NewEventForm(FlaskForm):
    date = Date()
    eventName = StringField('Event Name', validators=[DataRequired()])
    attendance = SelectField('Use Attendance From', validators=[DataRequired()])
    startNew = SubmitField('Start Event')