Example #1
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))
    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 #3
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))
    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))                
Example #6
0
    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))
Example #7
0
    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))