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)
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())
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))
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)
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)
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)
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)