Пример #1
0
    def view_app(self, request, tl, one, two, module, extra, prog):
        scrmi = prog.getModuleExtension('StudentClassRegModuleInfo')
        reg_nodes = scrmi.reg_verbs()
        
        try:
            cls = ClassSubject.objects.get(id = extra)
            section = cls.default_section()
        except ClassSubject.DoesNotExist:
            raise ESPError(False), 'Cannot find class.'
        
        student = request.GET.get('student',None)
        if not student:
            student = request.POST.get('student','')

        try:
            student = ESPUser(User.objects.get(id = student))
        except ESPUser.DoesNotExist:
            raise ESPError(False), 'Cannot find student, %s' % student

        if student.userbit_set.filter(qsc__parent=cls.anchor, verb__in=reg_nodes).count() == 0:
            raise ESPError(False), 'Student not a student of this class.'
        
        try:
            student.app = student.studentapplication_set.get(program = self.program)
        except:
            student.app = None
            assert False, student.studentapplication_set.all()[0].__dict__
            raise ESPError(False), 'Error: Student did not apply. Student is automatically rejected.'
        
        return render_to_response(self.baseDir()+'app_popup.html', request, (prog, tl), {'class': cls, 'student': student})
Пример #2
0
    def review_student(self, request, tl, one, two, module, extra, prog):
        scrmi = prog.getModuleExtension('StudentClassRegModuleInfo')
        reg_nodes = scrmi.reg_verbs()

        try:
            cls = ClassSubject.objects.get(id=extra)
        except ClassSubject.DoesNotExist:
            raise ESPError(False), 'Cannot find class.'

        if not request.user.canEdit(cls):
            raise ESPError(False), 'You cannot edit class "%s"' % cls

        student = request.GET.get('student', None)
        if not student:
            student = request.POST.get('student', '')

        try:
            student = ESPUser(User.objects.get(id=int(student)))
        except ESPUser.DoesNotExist:
            raise ESPError(False), 'Cannot find student, %s' % student

        not_registered = not StudentRegistration.valid_objects().filter(
            section__parent_class=cls, user=student).exists()
        if not_registered:
            raise ESPError(False), 'Student not a student of this class.'

        try:
            student.app = student.studentapplication_set.get(
                program=self.program)
        except:
            student.app = None
            raise ESPError(
                False), 'Error: Student did not start an application.'

        student.added_class = StudentRegistration.valid_objects().filter(
            section__parent_class=cls, user=student)[0].start_date

        teacher_reviews = student.app.reviews.all().filter(
            reviewer=request.user)
        if teacher_reviews.count() > 0:
            this_review = teacher_reviews.order_by('id')[0]
        else:
            this_review = StudentAppReview(reviewer=request.user)
            this_review.save()
            student.app.reviews.add(this_review)

        if request.method == 'POST':
            form = this_review.get_form(request.POST)
            if form.is_valid():
                form.target.update(form)
                if 'submit_next' in request.POST or 'submit_return' in request.POST:
                    url = '/%s/%s/%s/review_students/%s/' % (tl, one, two,
                                                             extra)
                    if 'submit_next' in request.POST:
                        url += '?prev=%s' % student.id
                    from django.shortcuts import redirect
                    return redirect(
                        url
                    )  # self.review_students(request, tl, one, two, module, extra, prog)

        else:
            form = this_review.get_form()

        return render_to_response(
            self.baseDir() + 'review.html', request, (prog, tl), {
                'class': cls,
                'reviews': teacher_reviews,
                'program': prog,
                'student': student,
                'form': form
            })
Пример #3
0
    def select_students(self, request, tl, one, two, module, extra, prog):
        #   Get preregistered and enrolled students
        try:
            sec = ClassSection.objects.filter(id=extra)[0]
        except:
            raise ESPError(
                False
            ), 'Class section not found.  If you came from a link on our site, please notify the webmasters.'

        students_list = sec.students_prereg()

        if request.method == 'POST':
            #   Handle form submission
            #   result_strs = []
            data = request.POST.copy()
            sections_dict = {}
            for key in data:
                key_dir = key.split('_')
                if key_dir[0] == 'regstatus' and len(key_dir) == 3:
                    student_id = int(key_dir[1])
                    sec_id = int(key_dir[2])
                    if sec_id not in sections_dict:
                        sections_dict[sec_id] = [{
                            'id': student_id,
                            'status': data[key]
                        }]
                    else:
                        sections_dict[sec_id].append({
                            'id': student_id,
                            'status': data[key]
                        })

            for sec_id in sections_dict:
                sec = ClassSection.objects.get(id=sec_id)
                sec.cache['students'] = None
                sec.cache['num_students'] = None
                for item in sections_dict[sec_id]:
                    student = ESPUser(User.objects.get(id=item['id']))
                    ignore = False
                    value = item['status']
                    if value == 'enroll':
                        verb_name = 'Enrolled'
                    elif value == 'reject':
                        verb_name = 'Rejected'
                    else:
                        ignore = True

                    if not ignore:
                        rel = RegistrationType.get_map(
                            include=['Enrolled', 'Rejected'],
                            category='student')[verb_name]
                        other_regs = sec.getRegistrations(student).filter(
                            relationship__name__in=['Enrolled', 'Rejected'])
                        found = False
                        for reg in other_regs:
                            if not found and reg.relationship == rel:
                                found = True
                            else:
                                reg.expire()
                            #   result_strs.append('Expired: %s' % bit)
                        if not found:
                            new_reg = StudentRegistration(user=student,
                                                          relationship=rel,
                                                          section=sec)
                            new_reg.save()

        #   Jazz up this information a little
        for student in students_list:
            student.bits = sec.getRegVerbs(student)
            student.app = student.getApplication(self.program, False)
            student.other_classes = [
                (sec2, sec2.getRegVerbs(student))
                for sec2 in student.getSections(self.program).exclude(
                    id=sec.id)
            ]
            preregs = sec.getRegistrations(student).exclude(
                relationship__name__in=['Enrolled', 'Rejected'])
            if preregs.count() != 0:
                student.added_class = preregs[0].start_date
            if 'Enrolled' in student.bits:
                student.enrolled = True
            elif 'Rejected' in student.bits:
                student.rejected = True

        #   Detect if there is an application module
        from esp.program.modules.handlers.studentjunctionappmodule import StudentJunctionAppModule
        has_app_module = False
        for module in prog.getModules():
            if isinstance(module, StudentJunctionAppModule):
                has_app_module = True

        return render_to_response(
            self.baseDir() + 'select_students.html', request, {
                'has_app_module': has_app_module,
                'prog': prog,
                'sec': sec,
                'students_list': students_list
            })