Beispiel #1
0
    def get(self):
        quarter = SettingModel.quarter()
        year = SettingModel.year()
        user = users.get_current_user()

        invitation = ndb.Key(urlsafe=self.request.get('confirmed')).get()
        confirming = StudentModel.get_student_by_email(quarter, year,
                                                       user.email())
        being_confirmed = invitation.invitor.get()
        for_assign = invitation.assignment_number

        partnership = None
        if not confirming and PartnershipModel.student_has_partner_for_assign(
                being_confirmed, for_assign):
            message = MessageModel.already_has_partner(False)
        elif PartnershipModel.student_has_partner_for_assign(
                being_confirmed, for_assign):
            message = MessageModel.already_has_partner(False)
        elif PartnershipModel.student_has_partner_for_assign(
                confirming, for_assign):
            message = MessageModel.already_has_partner(False)
        else:
            message = MessageModel.confirm_partnership(
                [being_confirmed, confirming], False, being_confirmed)
            partnership = PartnershipModel.create_partnership(
                [being_confirmed, confirming], for_assign)

        # set invitations between invitor and invitee (for current assignment) to inactive
        if partnership:
            InvitationModel.deactivate_invitations_for_students_and_assign(
                confirming, being_confirmed, for_assign)
            # SendMail(partnership, 'partner_confirm')
        time.sleep(0.1)
        return self.redirect('/partner?message=' + message)
Beispiel #2
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())
        assgn_num = 0

        cancel = int(self.request.get('cancel'))
        partnership = ndb.Key(urlsafe=self.request.get('p')).get()

        if cancel:
            assgn_num = partnership.assignment_number

        if cancel:
            # refine implementation of cancellation eventually
            for s in partnership.members:
                partnership = PartnershipModel.cancel_partnership(
                    s, partnership)
            if not partnership.active:
                EvalModel.cancel_evals_for_partnership(partnership)
            time.sleep(0.1)
            return self.redirect('/partner?message=' +
                                 MessageModel.partnership_cancelled(assgn_num))
        else:
            PartnershipModel.uncancel_partnership(student, partnership)
            time.sleep(0.1)
            return self.redirect('/partner?message=' +
                                 MessageModel.partnership_uncancelled())
Beispiel #3
0
    def get(self):
        # delcare page template
        template = JINJA_ENV.get_template('/templates/partners_main.html')
        # get current user
        user = users.get_current_user()
        student = None

        try:
            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')
            # get error message, if any
            e = self.request.get('error')

            # get own email to query partner information.
            assgn_num = int(self.request.get('assgn'))

            # get list of all partners for student (roundabout solution)
            all_assigns = sorted(AssignmentModel.get_all_assign(quarter, year), key = lambda x: x.number)
            partner_history = PartnershipModel.get_all_partner_history_for_student(selector, quarter, year)
            all_partners = dict([(x.number,PartnershipModel.get_partner_from_partner_history_by_assign(selector, partner_history, x.number)) for x in all_assigns])

            # get queried partnership
            partnership = None
            for p in partner_history:
                if p.assignment_number == assgn_num:
                    partnership = p

            # Redirect to landing if query for that assignment's partnership turns up empty
            if not len(all_partners[assgn_num]):
                message = MessageModel.page_not_found()
                return self.redirect('/partner?message=' + message)

        except (AttributeError, IndexError):
            template_values = {
                'user': user,
                'student': student,
                'sign_out': users.create_logout_url('/'),
                'email': user.email()
            }
            return self.response.write(template.render(template_values))
        # pass template values...
        template_values = {
            'error':            e,
            'selector':         selector,
            'partner':          all_partners[assgn_num][0],
            'assgn_num':        assgn_num,
            'partnership':      partnership,
            'user':             user,
            'sign_out':         users.create_logout_url('/'),
        }
        template = JINJA_ENV.get_template('/templates/partner_more_info.html')
        self.response.write(template.render(template_values))
Beispiel #4
0
    def post(self):
        quarter = SettingModel.quarter()
        year = SettingModel.year()

        user = users.get_current_user()
        selector = StudentModel.get_student_by_email(quarter, year,
                                                     user.email())
        selected = StudentModel.get_student_by_student_id(
            quarter, year, self.request.get('selected_partner'))
        try:
            selected_assign = int(self.request.get('selected_assign'))
            time.sleep(0.1)
        except ValueError:
            return self.redirect(
                '/partner/selection?error=You must choose an assignment number'
            )

        # redirect with errors...
        if PartnershipModel.were_partners_previously(
            [selector, selected]) and not SettingModel.repeat_partners():
            return self.redirect('/partner?message=' +
                                 MessageModel.worked_previously(selected))
        elif InvitationModel.have_open_invitations(selector, selected,
                                                   selected_assign):
            return self.redirect('/partner?message=' +
                                 MessageModel.have_open_invitations(selected))
        elif PartnershipModel.student_has_partner_for_assign(
                selector, selected_assign):
            return self.redirect(
                '/partner?message=' +
                MessageModel.already_has_partner(False, False))
        else:
            InvitationModel.create_invitation(selector, selected,
                                              selected_assign)
            return self.redirect('/partner?message=' +
                                 MessageModel.sent_invitation(selected))
    def post(self):
        # URL will contain 'edit' argument if this request is coming from an assignment edit form
        edit    = self.request.get('edit')
        year    = int(self.request.get('year'))
        quarter = int(self.request.get('quarter'))
        number  = int(self.request.get('assign_num'))

        # if this request didn't come from the edit form...
        if not edit:
            # ...create new assignment and set PK values
            assignment = AssignmentModel.make_assignment_with_pk_vals(quarter, year, number)
        else:
            # ...else get assignment
            assignment = AssignmentModel.get_assign_by_number(quarter, year, number)

        # if an assignment with the same PK values exist, redirect with error; assignment isn't created
        if AssignmentModel.get_assign_by_number(assignment.quarter, assignment.year, assignment.number) and not edit:
            message = 'That assignment is already in the database'
            return self.redirect('/admin/assignment/add?message=' + message)
        else:
            # set dates/times
            kwargs = {
                'assignment'  :   assignment,
                'fade_in_date':   str(self.request.get('fade_in_date')).split('-'),
                'fade_in_time':   str(self.request.get('fade_in_time')).split(':'),
                'due_date':       str(self.request.get('due_date')).split('-'),
                'due_time':       str(self.request.get('due_time')).split(':'),
                'close_date':     str(self.request.get('close_date')).split('-'),
                'close_time':     str(self.request.get('close_time')).split(':'),
                'eval_date':      str(self.request.get('eval_date')).split('-'),
                'eval_time':      str(self.request.get('eval_time')).split(':'),
                'eval_open_date': str(self.request.get('eval_open_date')).split('-'),
                'eval_open_time': str(self.request.get('eval_open_time')).split(':'),
                'fade_out_date':  str(self.request.get('fade_out_date')).split('-'),
                'fade_out_time':  str(self.request.get('fade_out_time')).split(':'),
            }
            AssignmentModel.save_assignment_with_dates(**kwargs)
            # redirct according to action (add vs edit)
            redirect_link = '/admin/assignment/' + ('view' if edit else 'add')
            message       = MessageModel.assignment_edited_or_added(quarter, year, number, edit)
            return self.redirect(redirect_link + '?message=' + message)
Beispiel #6
0
 def get(self):
     invitation = ndb.Key(urlsafe=self.request.get('confirmed')).get()
     InvitationModel.update_invitation_status(invitation.key, active=False)
     message = MessageModel.invitation_declined()
     time.sleep(0.1)
     return self.redirect('/partner?message=' + message)
Beispiel #7
0
    def post(self):
        quarter = SettingModel.quarter()
        year = SettingModel.year()
        user = users.get_current_user()

        # these will only have values if this request is coming from an admin
        confirming_key = self.request.get('admin_confirming')
        being_confirmed_key = self.request.get('admin_being_confirmed')

        if confirming_key == '':
            confirming_key = 'None'

        # if not admin...
        if not confirming_key or not being_confirmed_key:
            invitation = ndb.Key(urlsafe=self.request.get('confirmed')).get()
            confirming = StudentModel.get_student_by_email(
                quarter, year, user.email())
            being_confirmed = invitation.invitor.get()
            for_assign = invitation.assignment_number
            admin = False
        else:
            for_assign = int(self.request.get('assign_num'))
            being_confirmed = ndb.Key(urlsafe=being_confirmed_key).get()
            confirming = ndb.Key(urlsafe=confirming_key).get(
            ) if confirming_key != 'None' else None
            admin = True

        partnership = None
        if not confirming and PartnershipModel.student_has_partner_for_assign(
                being_confirmed, for_assign):
            message = MessageModel.already_has_partner(admin)
        elif not confirming:
            message = MessageModel.confirm_solo_partnership(being_confirmed)
            partnership = PartnershipModel.create_partnership(
                [being_confirmed], for_assign)
        elif PartnershipModel.student_has_partner_for_assign(
                being_confirmed, for_assign):
            message = MessageModel.already_has_partner(admin)


#            message = ''
#            partnership = PartnershipModel.get_partnerships_for_students_by_assign([being_confirmed], for_assign)
#            partnership = PartnershipModel.add_members_to_partnership([confirming], partnership[0])
        elif PartnershipModel.student_has_partner_for_assign(
                confirming, for_assign):
            message = MessageModel.already_has_partner(admin)
        else:
            message = MessageModel.confirm_partnership(
                [being_confirmed, confirming], admin, confirming)
            partnership = PartnershipModel.create_partnership(
                [being_confirmed, confirming], for_assign)

        # set invitations between invitor and invitee (for current assignment) to inactive
        if partnership:
            InvitationModel.deactivate_invitations_for_students_and_assign(
                confirming, being_confirmed, for_assign)
            # SendMail(partnership, 'partner_confirm')

        if not admin:
            time.sleep(0.1)
            return self.redirect('/partner?message=' + message)
        else:
            time.sleep(0.1)
            return self.redirect('/admin/partners/add?message=' + message)
Beispiel #8
0
    def post(self):
        # URL will contain 'edit' argument if this request is coming from an assignment edit form
        edit = self.request.get('edit')
        year = int(self.request.get('year'))
        quarter = int(self.request.get('quarter'))
        number = int(self.request.get('assign_num'))

        # if this request didn't come from the edit form...
        if not edit:
            # ...create new assignment and set PK values
            assignment = AssignmentModel.make_assignment_with_pk_vals(
                quarter, year, number)
        else:
            # delete button pressed
            if self.request.get('deleteButton', None):
                AssignmentModel.delete_assign_by_number(quarter, year, number)
                redirect_link = '/admin/assignment/view'
                message = MessageModel.assignment_deleted(
                    quarter, year, number)
                return self.redirect(redirect_link + '?message=' + message)
            # ...else get assignment
            assignment = AssignmentModel.get_assign_by_number(
                quarter, year, number)
        # if an assignment with the same PK values exist, redirect with error; assignment isn't created
        if AssignmentModel.get_assign_by_number(
                assignment.quarter, assignment.year,
                assignment.number) and not edit:
            message = 'That assignment is already in the database'
            return self.redirect('/admin/assignment/add?message=' + message)
        else:
            # set dates/times
            kwargs = {
                'assignment':
                assignment,
                'fade_in_date':
                str(self.request.get('fade_in_date')).split('-'),
                'fade_in_time':
                str(self.request.get('fade_in_time')).split(':'),
                'due_date':
                str(self.request.get('due_date')).split('-'),
                'due_time':
                str(self.request.get('due_time')).split(':'),
                'close_date':
                str(self.request.get('close_date')).split('-'),
                'close_time':
                str(self.request.get('close_time')).split(':'),
                'eval_date':
                str(self.request.get('eval_date')).split('-'),
                'eval_time':
                str(self.request.get('eval_time')).split(':'),
                'eval_open_date':
                str(self.request.get('eval_open_date')).split('-'),
                'eval_open_time':
                str(self.request.get('eval_open_time')).split(':'),
                'fade_out_date':
                str(self.request.get('fade_out_date')).split('-'),
                'fade_out_time':
                str(self.request.get('fade_out_time')).split(':'),
            }
            AssignmentModel.save_assignment_with_dates(**kwargs)
            # redirct according to action (add vs edit)
            redirect_link = '/admin/assignment/' + ('view' if edit else 'add')
            message = MessageModel.assignment_edited_or_added(
                quarter, year, number, edit)
            return self.redirect(redirect_link + '?message=' + message)