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))
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))
def get(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() selector = StudentModel.get_student_by_email(quarter, year, user.email()) if not selector: return self.redirect('/partner') # use selector info to find students in same lab section selectees = StudentModel.get_students_by_lab(quarter, year, selector.lab) current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) # if there are no assignments for this quarter, redirect to avoid errors if not current_assignment: return self.redirect('/partner?message=There are no assignments open for partner selection.') # get error message, if any e = self.request.get('error') # check to see if partner selection period has closed selection_closed = (datetime.now() - timedelta(hours=7) > current_assignment.close_date) # get all current_partnerships for partnership status partnerships = PartnershipModel.get_all_partnerships_for_assign(quarter, year, current_assignment.number) members = [] for p in partnerships: members += p.members partnership = members # build dict to store information about partnership status selectees = sorted({s.ucinetid: (s.key in partnerships,s) for s in selectees}.items(), key=lambda x: x[1][1].last_name) # pass template values... template_values = { 'error': e, 'selector': selector, 'selectees': selectees, 'selection_closed': selection_closed, 'current': current_assignment, 'user': user, 'sign_out': users.create_logout_url('/'), } template = JINJA_ENV.get_template('/templates/partner_browse.html') 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 = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() student = StudentModel.get_student_by_email(quarter, year, user.email()) selector = StudentModel.get_student_by_email(quarter, year, user.email()) selectees = StudentModel.get_students_by_lab(quarter, year, selector.lab) active_assigns = AssignmentModel.get_active_assigns(quarter, year) # get course config repeat = SettingModel.repeat_partners() cross_section = SettingModel.cross_section_partners() # get default parameter default_assgn = int(self.request.get("assgn")) if self.request.get( "assgn") is not "" else -1 # get all current_partnerships for partnership status partnerships = PartnershipModel.get_all_partnerships_for_assign( quarter, year, default_assgn) partner_history = PartnershipModel.get_all_partner_history_for_student( student, quarter, year) members = [] for p in partner_history: if p.active: members += p.members for p in partnerships: if p.members not in members: members += p.members # build dict to store information about partnership status available = [] for s in selectees: if (s.key not in members) or repeat: available.append((s.ucinetid, (s.key in partnerships, s))) available = sorted(available, key=get_result_priority) av_list = [] for av in available: av_list.append((av[0], get_shared_hours(selector.availability, av[1][1].availability))) # get error message, if any e = self.request.get('error') # check to see if partner selection period has closed selection_closed = len(active_assigns) == 0 template_values = { 'error': e, 'selector': selector, 'selectees': available, 'selection_closed': selection_closed, 'assgn': default_assgn, 'active': active_assigns, 'default_assgn': default_assgn, 'repeat': repeat, 'cross_section': cross_section, 'availability_list': av_list, } template = JINJA_ENV.get_template('/templates/partner_selection.html') self.response.write(template.render(template_values))
def get(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() selector = StudentModel.get_student_by_email(quarter, year, user.email()) student = StudentModel.get_student_by_email(quarter, year, user.email()) repeat = SettingModel.repeat_partners() if not selector: return self.redirect('/partner') # use selector info to find students in same lab section selectees = StudentModel.get_students_by_lab(quarter, year, selector.lab) current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date( quarter, year) # if there are no assignments for this quarter, redirect to avoid errors if not current_assignment: return self.redirect( '/partner?message=There are no assignments open for partner selection.' ) # get error message, if any e = self.request.get('error') # check to see if partner selection period has closed selection_closed = (datetime.now() - timedelta(hours=7) > current_assignment.close_date) # get all current_partnerships for partnership status partnerships = PartnershipModel.get_all_partnerships_for_assign( quarter, year, current_assignment.number) partner_history = PartnershipModel.get_all_partner_history_for_student( student, quarter, year) members = [] for p in partner_history: if p.active: members += p.members for p in partnerships: if p.members not in members: members += p.members # build dict to store information about partnership status available = [] for s in selectees: if (s.key not in members) or repeat: available.append((s.ucinetid, (s.key in partnerships, s))) available = sorted(available, key=get_result_priority) # pass template values... template_values = { 'error': e, 'student': student, 'selector': selector, 'selectees': available, 'selection_closed': selection_closed, 'current': current_assignment, 'user': user, 'sign_out': users.create_logout_url('/'), } template = JINJA_ENV.get_template('/templates/partner_browse.html') self.response.write(template.render(template_values))