def get(self):
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                           # try grabbing quarter/year from URL
        year        = self.request.get('year')

        if not quarter or not year:                                         # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')

            if not temp:                                                    # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')

            quarter,year = temp

        assignments = AssignmentModel.get_assigns_for_quarter(int(quarter), int(year))

        template        = JINJA_ENV.get_template('/templates/admin_assignment_view.html')
        template_values = {
            'assignments':  assignments.order(Assignment.number),
            'quarter_name': quarter_map[int(quarter)],
            'quarter':      int(quarter),
            'year':         int(year),
            'user':         users.get_current_user(),
            'sign_out':     users.create_logout_url('/'),
        }
        return self.response.write(template.render(template_values))
Example #2
0
    def get(self):
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter = self.request.get(
            'quarter')  # try grabbing quarter/year from URL
        year = self.request.get('year')

        if not quarter or not year:  # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')

            if not temp:  # if they don't exist there, redirect with error
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')

            quarter, year = temp

        assignments = AssignmentModel.get_assigns_for_quarter(
            int(quarter), int(year))

        template = JINJA_ENV.get_template(
            '/templates/admin_assignment_view.html')
        template_values = {
            'assignments': assignments.order(Assignment.number),
            'quarter_name': quarter_map[int(quarter)],
            'quarter': int(quarter),
            'year': int(year),
            'user': users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
        }
        return self.response.write(template.render(template_values))
    def get(self):
        quarter = self.request.get('quarter')                                  # try grabbing quarter/year from URL
        year    = self.request.get('year')

        if not quarter or not year:                                            # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')              # try grabbing quarter/year from session
            if not temp:                                                       # redirect with error if it doesn't exist
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp

        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarters = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}

        template_values = {                                                        
            'user':     users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'quarter':  int(quarter),
            'year':     int(year),
            'quarters': sorted(quarters.items()),
            'message':  self.request.get('message'),
        }
        template = JINJA_ENV.get_template('/templates/admin_upload.html')
        return self.response.write(template.render(template_values))            
Example #4
0
    def get(self):
        quarter = self.request.get(
            'quarter')  # try grabbing quarter/year from URL
        year = self.request.get('year')

        if not quarter or not year:  # if they don't exist, try grabbing from session
            temp = get_sess_vals(
                self.session, 'quarter',
                'year')  # try grabbing quarter/year from session
            if not temp:  # redirect with error if it doesn't exist
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp

        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarters = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}

        template_values = {
            'user': users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'quarter': int(quarter),
            'year': int(year),
            'quarters': sorted(quarters.items()),
            'message': self.request.get('message'),
        }
        template = JINJA_ENV.get_template('/templates/admin_upload.html')
        return self.response.write(template.render(template_values))
Example #5
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        quarter     = self.request.get('quarter')                           # try grabbing quarter/year from URL
        year        = self.request.get('year')

        if not quarter or not year:                                         # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                    # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp

        quarter,year = int(quarter), int(year)
        view         = self.request.get('view')                             # check URL for 'view by' options (lab vs class)
        view         = view if view else 'class'

        if view == 'class':
            students = StudentModel.get_students_by_active_status(quarter, year).fetch()
        else:
            students = StudentModel.get_students_by_lab(quarter, year, int(view)).fetch()

        current_assign = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year)
        current_num    = 1 if not current_assign else current_assign.number

        template        = JINJA_ENV.get_template('/templates/admin_add_solo_partnership.html')
        template_values = {
            'students':    sorted(students, key=lambda x: x.last_name),
            'view':        str(view),
            'quarter':     quarter,
            'year':        year,
            'user':        users.get_current_user(),
            'sign_out':    users.create_logout_url('/'),
            'current_num': current_num,
            'num_labs':    SettingModel.num_labs() if SettingModel.num_labs() else 1,
        }
        return self.response.write(template.render(template_values))
Example #6
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter = self.request.get('quarter')
        year = self.request.get('year')

        if not quarter or not year:  # if quarter/year aren't in URL, get from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:  # if they don't exist there, redirect with error
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp

        quarter, year = int(quarter), int(year)
        studentid = int(
            self.request.get('studentid')
        )  # grab studentid from URL (guaranteed to be there, unless URL was tinkered with)

        student = StudentModel.get_student_by_student_id(
            quarter, year, studentid)
        # if the student wasn't found, he/she might be inactive
        student = student if student else StudentModel.get_student_by_student_id(
            quarter, year, studentid, active=False)

        template_values = {
            'user': users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'student': student,
            'quarter': quarter,
            'year': year,
        }
        template = JINJA_ENV.get_template('/templates/admin_student_edit.html')
        return self.response.write(template.render(template_values))
Example #7
0
    def post(self):
        quarter = self.request.get(
            'quarter')  # try grabbing quarter/year from URL
        year = self.request.get('year')

        if not quarter or not year:  # if they don't exist, try grabbing from session
            temp = get_sess_vals(
                self.session, 'quarter',
                'year')  # try grabbing quarter/year from session
            if not temp:  # redirect with error if it doesn't exist
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp
        try:
            students = []
            files = [(f.filename, f.file.read())
                     for f in self.request.POST.getall('picture_files')]
            for f in files:
                student = StudentModel.get_student_by_student_id(
                    quarter, year, f[0][:f[0].find(".")])
                if student != None:
                    student.avatar = images.resize(f[1], 320, 320)
                    students.append(student)
            # save student objects...
            ndb.put_multi(students)
            # ...and render the response
            return self.redirect('/admin/roster/view?message=' +
                                 'Successfully uploaded new pictures for ' +
                                 str(len(students)) + ' students')

        except Exception, e:
            return self.redirect(
                '/admin?message=' +
                'There was a problem uploading the pictures: ' + str(e))
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                                
        year        = self.request.get('year')

        if not quarter or not year:                                         # if quarter/year aren't in URL, get from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                    # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year = int(quarter), int(year)
        studentid    = int(self.request.get('studentid'))                   # grab studentid from URL (guaranteed to be there, unless URL was tinkered with)

        student = StudentModel.get_student_by_student_id(quarter, year, studentid)              
        # if the student wasn't found, he/she might be inactive
        student = student if student else StudentModel.get_student_by_student_id(quarter, year, studentid, active=False)

        template_values = {                                                    
            'user':     users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'student':  student,
            'quarter':  quarter,
            'year':     year,
        }
        template = JINJA_ENV.get_template('/templates/admin_student_edit.html')
        return self.response.write(template.render(template_values))        
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                              # try grabbing quarter/year from URL
        year        = self.request.get('year')

        if not quarter or not year:                                            # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                       # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year      = int(quarter), int(year)
        active_students   = StudentModel.get_students_by_active_status(quarter, year).fetch()    
        inactive_students = StudentModel.get_students_by_active_status(quarter, year, active=False).fetch()
        active_num        = len(active_students)                            
        inactive_num      = len(inactive_students)

        template        = JINJA_ENV.get_template('/templates/admin_view.html')
        template_values = {                            
            'students':     sorted(active_students + inactive_students, key=lambda x: (x.lab, x.last_name)),
            'quarter_name': quarter_map[int(quarter)],
            'quarter':      int(quarter),
            'year':         int(year),
            'student_num':  active_num + inactive_num,
            'active_num':   active_num,
            'inactive_num': inactive_num,
            'user':         users.get_current_user(),
            'sign_out':     users.create_logout_url('/'),
            'message':      self.request.get('message'),
        }
        return self.response.write(template.render(template_values))        
Example #10
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter = self.request.get('quarter')
        year = self.request.get('year')

        # try getting quarter/year from session
        if not quarter or not year:
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp

        quarter, year = int(quarter), int(year)
        student = ndb.Key(urlsafe=self.request.get('student')).get()
        assign_range = AssignmentModel.get_assign_range(quarter, year)

        partner_history = PartnershipModel.get_active_partner_history_for_student(
            student, quarter, year, fill_gaps=assign_range)
        all_partner_history = PartnershipModel.get_all_partner_history_for_student(
            student, quarter, year)

        evals = EvalModel.get_eval_history_by_evaluator(
            student, True, quarter, year).fetch()
        evals += EvalModel.get_eval_history_by_evaluator(
            student, False, quarter, year).fetch()
        evals = sorted(evals, key=lambda x: x.assignment_number)

        evals_for = EvalModel.get_eval_history_by_evaluatee(
            student, True, quarter, year).fetch()
        evals_for += EvalModel.get_eval_history_by_evaluatee(
            student, False, quarter, year).fetch()
        evals_for = sorted(evals_for, key=lambda x: x.assignment_number)

        log = LogModel.get_log_by_student(student, quarter, year).get()
        if log:
            log_arr = log.log
        else:
            log_arr = []

        template = JINJA_ENV.get_template('/templates/admin_student_view.html')
        template_values = {
            'student': student,
            'partners': partner_history,
            'all_partners': all_partner_history,
            'assign_range': assign_range,
            'evals': evals,
            'evals_for': evals_for,
            'user': users.get_current_user(),
            'log': log_arr,
            'sign_out': users.create_logout_url('/'),
        }
        return self.response.write(template.render(template_values))
Example #11
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter = self.request.get(
            'quarter')  # try grabbing quarter/year from URL
        year = self.request.get('year')
        assign_num = self.request.get(
            'assign_num')  # try grabbing assignment number from URL

        if not quarter or not year:  # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:  # if they don't exist there, redirect with error
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp

        quarter, year = int(quarter), int(year)
        current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date(
            quarter, year)

        if current_assignment and not assign_num:
            assign_num = current_assignment.number

        assign_num = int(
            assign_num
        ) if assign_num else 1  # (to avoid errors if there are no assignments in the DB
        last_num = AssignmentModel.get_assign_n(quarter, year, -1)
        last_num = last_num.number if last_num else assign_num  # (to avoid errors if there are no assignments in the DB)
        first_assign = AssignmentModel.get_assign_n(quarter, year, 0)
        first_num = 0 if not first_assign else first_assign.number
        evals = EvalModel.get_all_evals_for_assign(
            quarter, year, assign_num)  # grab evals for assignment...
        solo_partners = PartnershipModel.get_solo_partnerships_by_assign(
            quarter, year, assign_num
        )  # ...and grab endorsed solos (they're exempt from evals)

        template_values = {
            'user': users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'quarter': quarter,
            'quarter_name': quarter_map[quarter],
            'year': year,
            'assign_num': assign_num,
            'message': self.request.get('message'),
            'evals': evals,
            'solos': solo_partners,
            'first_num': first_num,
            'last_num': last_num,
        }
        template = JINJA_ENV.get_template('/templates/admin_evals_view.html')
        return self.response.write(template.render(template_values))
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        #    rethink logic
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                                   # try grabbing quarter/year from URL
        year        = self.request.get('year')

        if not quarter or not year:                                                 # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                            # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year = int(quarter), int(year)
        view_by      = self.request.get('view_by')                                  # check URL for 'view by' options (lab vs class)
        view_by      = view_by if view_by else 1

        if view_by == 'class':                                                      # if user wants to view by class, or the view by option wasn't specified...
            students = StudentModel.get_students_by_active_status(quarter, year).fetch()              
        else:
            students = StudentModel.get_students_by_lab(quarter, year, int(view_by)).fetch()    

        all_partners = PartnershipModel.get_all_partnerships(quarter, year).fetch()                        
        last_assign  = AssignmentModel.get_assign_n(quarter, year, -1)                            
        last_num     = 1 if not last_assign else last_assign.number                      
        first_assign = AssignmentModel.get_assign_n(quarter, year, 0)                          
        first_num    = 0 if not first_assign else first_assign.number                 

        keys_to_students     = dict(map(lambda x: (x.key,x), students))            # map student objects to keys for easy, fast access from partnership objects
        keys_to_partnerships = keys_to_partners(all_partners)                      # map student keys to partnerships for easy, fast access

        # create mapping of student info to partnership info that the partnership template expects
        partnership_dict = student_info_to_partner_list(last_num, first_num, keys_to_partnerships, keys_to_students, students)
        partnership_dict = sorted(partnership_dict.items(), key=lambda x: (x[0][4], x[0][2]))
        num_labs         = SettingModel.num_labs()                                                    

        template_values = {                                                            
            'partnerships': partnership_dict,
            'view_by':      str(view_by),
            'year':         year,
            'quarter':      quarter,
            'num_labs':     num_labs if num_labs else 0,
            'last_num':     last_num,
            'first_num':    first_num,
            'user':         users.get_current_user(),
            'sign_out':     users.create_logout_url('/'),
        }
        template = JINJA_ENV.get_template('/templates/admin_partnerships.html')
        return self.response.write(template.render(template_values))                
Example #13
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        #    rethink logic
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                                   # try grabbing quarter/year from URL
        year        = self.request.get('year')

        if not quarter or not year:                                                 # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                            # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp

        quarter,year = int(quarter), int(year)
        view_by      = self.request.get('view_by')                                  # check URL for 'view by' options (lab vs class)
        view_by      = view_by if view_by else 1

        if view_by == 'class':                                                      # if user wants to view by class, or the view by option wasn't specified...
            students = StudentModel.get_students_by_active_status(quarter, year).fetch()
        else:
            students = StudentModel.get_students_by_lab(quarter, year, int(view_by)).fetch()

        all_partners = PartnershipModel.get_all_partnerships(quarter, year).fetch()
        last_assign  = AssignmentModel.get_assign_n(quarter, year, -1)
        last_num     = 1 if not last_assign else last_assign.number
        first_assign = AssignmentModel.get_assign_n(quarter, year, 0)
        first_num    = 0 if not first_assign else first_assign.number

        keys_to_students     = dict(map(lambda x: (x.key,x), students))            # map student objects to keys for easy, fast access from partnership objects
        keys_to_partnerships = keys_to_partners(all_partners)                      # map student keys to partnerships for easy, fast access

        # create mapping of student info to partnership info that the partnership template expects
        partnership_dict = student_info_to_partner_list(last_num, first_num, keys_to_partnerships, keys_to_students, students)
        partnership_dict = sorted(partnership_dict.items(), key=lambda x: (x[0][4], x[0][2]))
        num_labs         = SettingModel.num_labs()

        template_values = {
            'partnerships': partnership_dict,
            'view_by':      str(view_by),
            'year':         year,
            'quarter':      quarter,
            'num_labs':     num_labs if num_labs else 0,
            'last_num':     last_num,
            'first_num':    first_num,
            'user':         users.get_current_user(),
            'sign_out':     users.create_logout_url('/'),
        }
        template = JINJA_ENV.get_template('/templates/admin_partnerships.html')
        return self.response.write(template.render(template_values))
Example #14
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter = self.request.get(
            'quarter')  # try grabbing quarter/year from URL
        year = self.request.get('year')

        if not quarter or not year:  # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:  # if they don't exist there, redirect with error
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp

        quarter, year = int(quarter), int(year)
        active_students = StudentModel.get_students_by_active_status(
            quarter, year).fetch()
        inactive_students = StudentModel.get_students_by_active_status(
            quarter, year, active=False).fetch()
        active_num = len(active_students)
        inactive_num = len(inactive_students)

        template = JINJA_ENV.get_template('/templates/admin_view.html')
        template_values = {
            'students':
            sorted(active_students + inactive_students,
                   key=lambda x: (x.lab, x.last_name)),
            'quarter_name':
            quarter_map[int(quarter)],
            'quarter':
            int(quarter),
            'year':
            int(year),
            'student_num':
            active_num + inactive_num,
            'active_num':
            active_num,
            'inactive_num':
            inactive_num,
            'user':
            users.get_current_user(),
            'sign_out':
            users.create_logout_url('/'),
            'message':
            self.request.get('message'),
        }
        return self.response.write(template.render(template_values))
Example #15
0
    def post(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter = self.request.get('quarter')
        year = self.request.get('year')

        if not quarter or not year:  # if quarter/year aren't in URL, check sessions
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:  # if they don't exist there, redirect with error
                return self.redirect(
                    '/admin?message=Please set a current quarter and year')
            quarter, year = temp

        quarter, year = int(quarter), int(year)
        studentid = int(
            self.request.get('studentid')
        )  # grab studentid from URL (guaranteed to be there, unless URL was tinkered with)

        student = StudentModel.get_student_by_student_id(
            quarter, year, studentid)
        # if the student wasn't found, he/she might be inactive
        student = student if student else StudentModel.get_student_by_student_id(
            quarter, year, studentid, active=False)
        message = ''

        if student:
            if self.request.get('to_delete') == 'yes':
                message += 'Student ' + student.first_name + ', ' + student.last_name
                message += ' (' + str(
                    student.studentid) + ') successfully deleted'
                student.key.delete()
            else:
                student.ucinetid = self.request.get('ucinetid').strip()
                student.first_name = self.request.get('first_name').strip()
                student.last_name = self.request.get('last_name').strip()
                student.email = self.request.get('email').strip()
                student.lab = int(self.request.get('lab').strip())
                student.active = eval(self.request.get('active'))

                student.put()

                message += 'Student ' + student.first_name + ', ' + student.last_name
                message += ' (' + str(
                    student.studentid) + ') successfully updated'

        self.redirect('/admin/roster/view?message=' + message)
Example #16
0
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                                   # try grabbing quarter/year from URL
        year        = self.request.get('year')
        assign_num  = self.request.get('assign_num')                                # try grabbing assignment number from URL

        if not quarter or not year:                                                 # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                            # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year       = int(quarter), int(year)
        current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year)                     

        if current_assignment and not assign_num:
            assign_num = current_assignment.number                                    

        assign_num    = int(assign_num) if assign_num else 1                          # (to avoid errors if there are no assignments in the DB
        last_num      = AssignmentModel.get_assign_n(quarter, year, -1)                              
        last_num      = last_num.number if last_num else assign_num                   # (to avoid errors if there are no assignments in the DB)
        first_assign  = AssignmentModel.get_assign_n(quarter, year, 0)                            
        first_num     = 0 if not first_assign else first_assign.number                   
        evals         = EvalModel.get_all_evals_for_assign(quarter, year, assign_num)                # grab evals for assignment...
        solo_partners = PartnershipModel.get_solo_partnerships_by_assign(quarter, year, assign_num)  # ...and grab endorsed solos (they're exempt from evals)

        template_values = {                                                         
            'user':         users.get_current_user(),
            'sign_out':     users.create_logout_url('/'),
            'quarter':      quarter,
            'quarter_name': quarter_map[quarter],
            'year':         year,
            'assign_num':   assign_num,
            'message':      self.request.get('message'),
            'evals':        evals,
            'solos':        solo_partners,
            'first_num':    first_num,
            'last_num':     last_num,
        }
        template = JINJA_ENV.get_template('/templates/admin_evals_view.html')
        return self.response.write(template.render(template_values))            
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                        
        year        = self.request.get('year')

        # try getting quarter/year from session
        if not quarter or not year:                                
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year = int(quarter), int(year)
        student      = ndb.Key(urlsafe=self.request.get('student')).get()
        assign_range = AssignmentModel.get_assign_range(quarter, year)

        partner_history     = PartnershipModel.get_active_partner_history_for_student(student, quarter, year, fill_gaps=assign_range)
        all_partner_history = PartnershipModel.get_all_partner_history_for_student(student, quarter, year)

        evals  = EvalModel.get_eval_history_by_evaluator(student, True, quarter, year).fetch()
        evals += EvalModel.get_eval_history_by_evaluator(student, False, quarter, year).fetch()
        evals  = sorted(evals, key=lambda x: x.assignment_number)

        evals_for  = EvalModel.get_eval_history_by_evaluatee(student, True, quarter, year).fetch()
        evals_for += EvalModel.get_eval_history_by_evaluatee(student, False, quarter, year).fetch()
        evals_for  = sorted(evals_for, key=lambda x: x.assignment_number)

        template = JINJA_ENV.get_template('/templates/admin_student_view.html')
        template_values = {
            'student':      student,
            'partners':     partner_history,
            'all_partners': all_partner_history,
            'assign_range': assign_range,
            'evals':        evals,
            'evals_for':    evals_for,
            'user':         users.get_current_user(),
            'sign_out':     users.create_logout_url('/'),
        }
        return self.response.write(template.render(template_values))
    def post(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                                
        year        = self.request.get('year')

        if not quarter or not year:                                         # if quarter/year aren't in URL, check sessions
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                    # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year = int(quarter), int(year)
        studentid    = int(self.request.get('studentid'))                   # grab studentid from URL (guaranteed to be there, unless URL was tinkered with)

        student = StudentModel.get_student_by_student_id(quarter, year, studentid)                
        # if the student wasn't found, he/she might be inactive
        student = student if student else StudentModel.get_student_by_student_id(quarter, year, studentid, active=False)
        message = ''

        if student:
            if self.request.get('to_delete') == 'yes':
                message += 'Student ' + student.first_name + ', ' + student.last_name
                message += ' (' + str(student.studentid) + ') successfully deleted'
                student.key.delete()
            else:
                student.ucinetid   = self.request.get('ucinetid').strip()
                student.first_name = self.request.get('first_name').strip()
                student.last_name  = self.request.get('last_name').strip()
                student.email      = self.request.get('email').strip()
                student.lab        = int(self.request.get('lab').strip())
                student.active     = eval(self.request.get('active'))

                student.put()

                message += 'Student ' + student.first_name + ', ' + student.last_name
                message += ' (' + str(student.studentid) + ') successfully updated'

        self.redirect('/admin/roster/view?message=' + message) 
    def get(self):
        template = JINJA_ENV.get_template('/templates/admin_add_assignment.html')

        temp = get_sess_vals(self.session, 'quarter', 'year')                   # try grabbing quarter/year from session
        if not temp:                                                            # redirect with error if it doesn't exist
            return self.redirect('/admin?message=Please set a current quarter and year')
        quarter,year = temp

        last_assign = AssignmentModel.get_assign_n(quarter, year, -1)
        last_num    = 0 if not last_assign else last_assign.number
        today       = datetime.date.today().strftime("%Y-%m-%d")

        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarters        = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        template_values = {
            'year':     year,
            'quarter':  quarter,
            'quarters': sorted(quarters.items()),
            'last_num': last_num,
            'today':    today,
            'user':     users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'fid':      (last_assign.fade_in_date + td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'fit':      last_assign.fade_in_date.strftime('%H:%M') if last_assign else '00:00',
            'dd':       (last_assign.due_date + td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'dt':       last_assign.due_date.strftime('%H:%M') if last_assign else '00:00',
            'cd':       (last_assign.close_date + td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'ct':       last_assign.close_date.strftime('%H:%M') if last_assign else '00:00',
            'eod':      (last_assign.eval_open_date + td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'eot':      last_assign.eval_open_date.strftime('%H:%M') if last_assign else '00:00',
            'ecd':      (last_assign.eval_date + td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'ect':      last_assign.eval_date.strftime('%H:%M') if last_assign else '00:00',
            'fod':      (last_assign.fade_out_date + td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'fot':      last_assign.fade_out_date.strftime('%H:%M') if last_assign else '00:00',
        }
        return self.response.write(template.render(template_values))
    def get(self):
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded 
        quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        quarter     = self.request.get('quarter')                           # try grabbing quarter/year from URL
        year        = self.request.get('year')

        if not quarter or not year:                                         # if they don't exist, try grabbing from session
            temp = get_sess_vals(self.session, 'quarter', 'year')
            if not temp:                                                    # if they don't exist there, redirect with error
                return self.redirect('/admin?message=Please set a current quarter and year')
            quarter,year = temp                                                    

        quarter,year = int(quarter), int(year)
        view         = self.request.get('view')                             # check URL for 'view by' options (lab vs class)
        view         = view if view else 'class'

        if view == 'class':                                                            
            students = StudentModel.get_students_by_active_status(quarter, year).fetch()                
        else:
            students = StudentModel.get_students_by_lab(quarter, year, int(view)).fetch()        

        current_assign = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year)                         
        current_num    = 1 if not current_assign else current_assign.number           

        template        = JINJA_ENV.get_template('/templates/admin_add_partnership.html')
        template_values = {                                                            
            'students':    sorted(students, key=lambda x: x.last_name),
            'view':        str(view),
            'quarter':     quarter,
            'year':        year,
            'user':        users.get_current_user(),
            'sign_out':    users.create_logout_url('/'),
            'current_num': current_num,
            'num_labs':    SettingModel.num_labs() if SettingModel.num_labs() else 1,
        }
        return self.response.write(template.render(template_values))                
    def get(self):
        quarter    = int(self.request.get('quarter'))                   # grab quarter, year, and assign num from URL
        year       = int(self.request.get('year'))
        number     = int(self.request.get('number'))
        assignment = AssignmentModel.get_assign_by_number(quarter, year, number)

        temp = get_sess_vals(self.session, 'quarter', 'year')           # try to grab current quarter/year from session
        if not temp:                                                    # redirect with error if it doesn't exist
            return self.redirect('/admin?message=Please set a current quarter and year')
        quarter,year = temp
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarters        = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        template_values = {
            'a':        assignment,
            'fid':      assignment.fade_in_date.strftime('%Y-%m-%d'),
            'fit':      assignment.fade_in_date.strftime('%H:%M'),
            'dd':       assignment.due_date.strftime('%Y-%m-%d'),
            'dt':       assignment.due_date.strftime('%H:%M'),
            'cd':       assignment.close_date.strftime('%Y-%m-%d'),
            'ct':       assignment.close_date.strftime('%H:%M'),
            'eod':      assignment.eval_open_date.strftime('%Y-%m-%d') if assignment.eval_open_date else '00-00-0000',
            'eot':      assignment.eval_open_date.strftime('%H:%M') if assignment.eval_open_date else '00:00',
            'ecd':      assignment.eval_date.strftime('%Y-%m-%d'),
            'ect':      assignment.eval_date.strftime('%H:%M'),
            'fod':      assignment.fade_out_date.strftime('%Y-%m-%d'),
            'fot':      assignment.fade_out_date.strftime('%H:%M'),
            'user':     users.get_current_user(),
            'sign_out': users.create_logout_url('/'),
            'quarter':  quarter,
            'quarters': sorted(quarters.items()),
            'year':     year,
            'number':   number,
        }
        template = JINJA_ENV.get_template('/templates/admin_assignment_edit.html')
        return self.response.write(template.render(template_values))
Example #22
0
    def get(self):
        template = JINJA_ENV.get_template(
            '/templates/admin_add_assignment.html')

        temp = get_sess_vals(self.session, 'quarter',
                             'year')  # try grabbing quarter/year from session
        if not temp:  # redirect with error if it doesn't exist
            return self.redirect(
                '/admin?message=Please set a current quarter and year')
        quarter, year = temp

        last_assign = AssignmentModel.get_assign_n(quarter, year, -1)
        last_num = 0 if not last_assign else last_assign.number
        today = datetime.date.today().strftime("%Y-%m-%d")

        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarters = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        template_values = {
            'year':
            year,
            'quarter':
            quarter,
            'quarters':
            sorted(quarters.items()),
            'last_num':
            last_num,
            'today':
            today,
            'user':
            users.get_current_user(),
            'sign_out':
            users.create_logout_url('/'),
            'fid': (last_assign.fade_in_date +
                    td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'fit':
            last_assign.fade_in_date.strftime('%H:%M')
            if last_assign else '07:00',
            'dd': (last_assign.due_date +
                   td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'dt':
            last_assign.due_date.strftime('%H:%M') if last_assign else '07:00',
            'cd': (last_assign.close_date +
                   td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'ct':
            last_assign.close_date.strftime('%H:%M')
            if last_assign else '07:00',
            'eod': (last_assign.eval_open_date +
                    td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'eot':
            last_assign.eval_open_date.strftime('%H:%M')
            if last_assign else '07:00',
            'ecd': (last_assign.eval_date +
                    td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'ect':
            last_assign.eval_date.strftime('%H:%M')
            if last_assign else '07:00',
            'fod': (last_assign.fade_out_date +
                    td(days=7)).strftime('%Y-%m-%d') if last_assign else today,
            'fot':
            last_assign.fade_out_date.strftime('%H:%M')
            if last_assign else '07:00',
        }
        return self.response.write(template.render(template_values))
Example #23
0
    def get(self):
        quarter = int(self.request.get(
            'quarter'))  # grab quarter, year, and assign num from URL
        year = int(self.request.get('year'))
        number = int(self.request.get('number'))
        assignment = AssignmentModel.get_assign_by_number(
            quarter, year, number)

        temp = get_sess_vals(
            self.session, 'quarter',
            'year')  # try to grab current quarter/year from session
        if not temp:  # redirect with error if it doesn't exist
            return self.redirect(
                '/admin?message=Please set a current quarter and year')
        quarter, year = temp
        # pass map of quarter DB representations (ints) to string representation
        # TODO:
        #    quarters should not be hardcoded
        quarters = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'}
        template_values = {
            'a':
            assignment,
            'fid':
            assignment.fade_in_date.strftime('%Y-%m-%d'),
            'fit':
            assignment.fade_in_date.strftime('%H:%M'),
            'dd':
            assignment.due_date.strftime('%Y-%m-%d'),
            'dt':
            assignment.due_date.strftime('%H:%M'),
            'cd':
            assignment.close_date.strftime('%Y-%m-%d'),
            'ct':
            assignment.close_date.strftime('%H:%M'),
            'eod':
            assignment.eval_open_date.strftime('%Y-%m-%d')
            if assignment.eval_open_date else '00-00-0000',
            'eot':
            assignment.eval_open_date.strftime('%H:%M')
            if assignment.eval_open_date else '00:00',
            'ecd':
            assignment.eval_date.strftime('%Y-%m-%d'),
            'ect':
            assignment.eval_date.strftime('%H:%M'),
            'fod':
            assignment.fade_out_date.strftime('%Y-%m-%d'),
            'fot':
            assignment.fade_out_date.strftime('%H:%M'),
            'user':
            users.get_current_user(),
            'sign_out':
            users.create_logout_url('/'),
            'quarter':
            quarter,
            'quarters':
            sorted(quarters.items()),
            'year':
            year,
            'number':
            number,
        }
        template = JINJA_ENV.get_template(
            '/templates/admin_assignment_edit.html')
        return self.response.write(template.render(template_values))