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