def barcodecheckin(self, request, tl, one, two, module, extra, prog): context = {} attended_verb = GetNode('V/Flags/Registration/Attended') prog_anchor = prog.anchor if request.method == 'POST': results = { 'not_found': [], 'existing': [], 'new': [], 'not_student': [] } form = OnsiteBarcodeCheckinForm(request.POST) if form.is_valid(): codes = form.cleaned_data['uids'].split() for code in codes: try: result = ESPUser.objects.filter(id=code) except ValueError: results['not_found'].append(code) if len(result) > 1: raise ESPError( False ), "Something weird happened, there are two students with ID %s." % code elif len(result) == 0: results['not_found'].append(code) else: student = result[0] if student.isStudent(): existing = UserBit.valid_objects().filter( user=student, qsc=prog_anchor, verb=attended_verb) if existing: results['existing'].append(code) else: new = UserBit(user=student, qsc=prog_anchor, verb=attended_verb) new.save() results['new'].append(code) else: results['not_student'].append(code) else: results = {} form = OnsiteBarcodeCheckinForm() context['module'] = self context['form'] = form context['results'] = results return render_to_response(self.baseDir() + 'barcodecheckin.html', request, (prog, tl), context)
def subscribe_user(self, user): verb = GetNode('V/Subscribe') from esp.users.models import ESPUser, User if type(user) != User and type(user) != ESPUser: assert False, 'EXPECTED USER, received %s' \ % str(type(user)) ub = UserBit.objects.filter(verb=verb, qsc=self.anchor, user=user) if ub.count() > 0: return False ub = UserBit(verb=verb, qsc=self.anchor, user=user) ub.save() return True
def createBit(self, extension): verb = GetNode('V/Flags/Registration/' + extension) ub = UserBit.objects.filter(user=self.student, verb=verb, qsc=self.program_anchor_cached()) if len(ub) > 0: return False ub = UserBit() ub.verb = verb ub.qsc = self.program_anchor_cached() ub.user = self.student ub.recursive = False ub.save() return True
def gen_userbit(tup): new_ub = UserBit() new_ub.verb = DataTree.get_by_uri(tup[0], create=True) new_ub.qsc = prog.anchor new_ub.recursive = True if tup[2]: new_ub.startdate = tup[2] if tup[3]: new_ub.enddate = tup[3] if (tup[1] is None) or (tup[1] == 0): new_ub.user = None elif type(tup[1]) in (User, ESPUser): new_ub.user = tup[1] else: new_ub.user = ESPUser.objects.get(id=tup[1]) new_ub.save() return new_ub
def satprep_create(self, request, tl, one, two, module, extra, prog): if request.method == 'POST': form = OnSiteSATPrepRegForm(request.POST) if form.is_valid(): new_data = form.cleaned_data username = base_uname = (new_data['first_name'][0]+ \ new_data['last_name']).lower() if ESPUser.objects.filter(username=username).count() > 0: i = 2 username = base_uname + str(i) while ESPUser.objects.filter( username=username).count() > 0: i += 1 username = base_uname + str(i) new_user = ESPUser(username=username, first_name=new_data['first_name'], last_name=new_data['last_name'], email=new_data['email'], is_staff=False, is_superuser=False) new_user.save() self.student = new_user new_user.recoverPassword() #update satprep information satprep = SATPrepRegInfo.getLastForProgram( new_user, self.program) satprep.old_math_score = new_data['old_math_score'] satprep.old_verb_score = new_data['old_verb_score'] satprep.old_writ_score = new_data['old_writ_score'] satprep.save() if new_data['paid']: self.createBit('Paid') self.createBit('Attended') if new_data['medical']: self.createBit('MedicalFiled') if new_data['liability']: self.createBit('LiabilityFiled') self.createBit('OnSite') v = GetNode('V/Flags/UserRole/Student') ub = UserBit() ub.user = new_user ub.recursive = False ub.qsc = GetNode('Q') ub.verb = v ub.save() new_user = ESPUser(new_user) return render_to_response(self.baseDir() + 'reg_success.html', request, (prog, tl), {'user': new_user}) else: form = OnSiteSATPrepRegForm() return render_to_response(self.baseDir() + 'reg_info.html', request, (prog, tl), {'form': form})
def survey_view(request, tl, program, instance): try: prog = Program.by_prog_inst(program, instance) except Program.DoesNotExist: raise Http404 user = ESPUser(request.user) if (tl == 'teach' and not user.isTeacher()) or (tl == 'learn' and not user.isStudent()): raise ESPError( False ), 'You need to be a program participant (i.e. student or teacher, not parent or educator) to participate in this survey. Please contact the directors directly if you have additional feedback.' if request.GET.has_key('done'): return render_to_response('survey/completed_survey.html', request, prog.anchor, {'prog': prog}) if tl == 'learn': sv = GetNode('V/Flags/Survey/Filed') else: sv = GetNode('V/Flags/TeacherSurvey/Filed') if UserBit.UserHasPerms(request.user, prog.anchor, sv): raise ESPError( False ), "You've already filled out the survey. Thanks for responding!" surveys = prog.getSurveys().filter(category=tl).select_related() if request.REQUEST.has_key('survey_id'): try: s_id = int(request.REQUEST['survey_id']) surveys = surveys.filter( id=s_id ) # We want to filter, not get: ID could point to a survey that doesn't exist for this program, or at all except ValueError: pass if len(surveys) < 1: raise ESPError(False), "Sorry, no such survey exists for this program!" if len(surveys) > 1: return render_to_response( 'survey/choose_survey.html', request, prog.anchor, { 'surveys': surveys, 'error': request.POST } ) # if request.POST, then we shouldn't have more than one survey any more... survey = surveys[0] if request.POST: response = SurveyResponse() response.survey = survey response.save() ub = UserBit(user=request.user, verb=sv, qsc=prog.anchor) ub.save() response.set_answers(request.POST, save=True) return HttpResponseRedirect(request.path + "?done") else: questions = survey.questions.filter(anchor=prog.anchor).order_by('seq') perclass_questions = survey.questions.filter( anchor__name="Classes", anchor__parent=prog.anchor) classes = sections = timeslots = [] if tl == 'learn': classes = user.getEnrolledClasses(prog, request) timeslots = prog.getTimeSlots().order_by('start') for ts in timeslots: # The order by string really means "title" ts.classsections = prog.sections().filter( meeting_times=ts).exclude( meeting_times__start__lt=ts.start).order_by( 'parent_class__anchor__friendly_name').distinct() for sec in ts.classsections: if user in sec.students(): sec.selected = True elif tl == 'teach': classes = user.getTaughtClasses(prog) sections = user.getTaughtSections(prog).order_by( 'parent_class__anchor__friendly_name') context = { 'survey': survey, 'questions': questions, 'perclass_questions': perclass_questions, 'program': prog, 'classes': classes, 'sections': sections, 'timeslots': timeslots, } return render_to_response('survey/survey.html', request, prog.anchor, context)
def onsite_create(self, request, tl, one, two, module, extra, prog): if request.method == 'POST': form = OnSiteRegForm(request.POST) if form.is_valid(): new_data = form.cleaned_data username = ESPUser.get_unused_username(new_data['first_name'], new_data['last_name']) new_user = ESPUser(username = username, first_name = new_data['first_name'], last_name = new_data['last_name'], email = new_data['email'], is_staff = False, is_superuser = False) new_user.save() self.student = new_user regProf = RegistrationProfile.getLastForProgram(new_user, self.program) contact_user = ContactInfo(first_name = new_user.first_name, last_name = new_user.last_name, e_mail = new_user.email, user = new_user) contact_user.save() regProf.contact_user = contact_user student_info = StudentInfo(user = new_user, graduation_year = ESPUser.YOGFromGrade(new_data['grade'])) student_info.save() regProf.student_info = student_info regProf.save() if new_data['paid']: self.createBit('Paid') self.updatePaid(True) else: self.updatePaid(False) self.createBit('Attended') if new_data['medical']: self.createBit('MedicalFiled') if new_data['liability']: self.createBit('LiabilityFiled') self.createBit('OnSite') v = GetNode( 'V/Flags/UserRole/Student') ub = UserBit() ub.user = new_user ub.recursive = False ub.qsc = GetNode('Q') ub.verb = v ub.save() new_user.recoverPassword() return render_to_response(self.baseDir()+'reg_success.html', request, (prog, tl), { 'student': new_user, 'retUrl': '/onsite/%s/classchange_grid?student_id=%s' % (self.program.getUrlBase(), new_user.id) }) else: form = OnSiteRegForm() return render_to_response(self.baseDir()+'reg_info.html', request, (prog, tl), {'form':form, 'current_year':ESPUser.current_schoolyear()})