Пример #1
0
 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)
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
 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
Пример #5
0
    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})
Пример #6
0
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)
Пример #7
0
    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()})