def post_exit_survey(request, student_id): #if the student hasn't had an exit survey performed alert the user try: exit = ExitSurvey.objects.get(student_id=student_id) except ObjectDoesNotExist: return render(request, 'mande/errors/noexitsurvey.html', {'student_id': student_id}) #get students current info for pre-filling the survey try: survey = IntakeSurvey.objects.get(pk=student_id) most_recent = survey.getRecentFields() except ObjectDoesNotExist: survey = None most_recent = None if request.method == 'POST': form = PostExitSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = 'Did a post exit survey for ' + unicode( instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-heart') log.save() #then return return HttpResponseRedirect(reverse('post_exit_survey')) else: form = PostExitSurveyForm(most_recent) context = {'form': form, 'student_id': student_id} return render(request, 'mande/postexitsurvey.html', context)
def exit_survey(request,student_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name,request.user): if request.method == 'POST': form = ExitSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = 'Did an exit survey for '+unicode(instance.student_id.name) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-user-times') log.save() # drop student from classroom enrollment ClassroomEnrollment.objects.filter(student_id=instance.student_id,drop_date=None).update(drop_date=instance.exit_date) #then return return HttpResponseRedirect(reverse('student_detail', kwargs= {'student_id':instance.student_id.student_id})) else: if student_id > 0: form = ExitSurveyForm({'student_id':student_id}) else: form = ExitSurveyForm() context = {'form': form,'student_id':student_id} return render(request, 'mande/exitsurvey.html', context) else: raise PermissionDenied
def intake_update(request, student_id=0): next_url = request.GET.get('next') next_tab = request.GET.get('tab') try: survey = IntakeSurvey.objects.get(pk=student_id) most_recent = survey.getRecentFields() except ObjectDoesNotExist: survey = None most_recent = {} if request.method == 'POST': form = IntakeUpdateForm(request.POST) if form.is_valid(): instance = form.save() message = 'Updated ' + unicode( instance.student_id.name) + '\'s record' log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-upload') log.save() #then return return HttpResponseRedirect(next_url + '#' + next_tab) else: #change the date today, for convenience most_recent['date'] = TODAY form = IntakeUpdateForm(most_recent) context = { 'form': form, 'survey': survey, 'student_id': student_id, 'next': next_url, 'tab': next_tab } return render(request, 'mande/intakeupdate.html', context)
def intake_internal(request, student_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): if request.method == 'POST': form = IntakeInternalForm(request.POST) if form.is_valid(): instance = form.save() message = ('Enrolled ' + unicode(instance.student_id.name) + ' in ' + instance.get_starting_grade_display()) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-user-plus') log.save() #then return return HttpResponseRedirect( reverse( 'student_detail', kwargs={'student_id': instance.student_id.student_id})) else: if student_id > 0: form = IntakeInternalForm({'student_id': student_id}) else: form = IntakeInternalForm() context = { 'form': form, } return render(request, 'mande/intakeinternal.html', context) else: raise PermissionDenied
def classroomenrollment_individual(request, student_id=0, classroom_id=0): if request.method == 'POST': next_url = request.GET.get('next') #get_or_create returns a tuple with the object and its status instance = ClassroomEnrollment.objects.get(classroom_id=classroom_id, student_id=student_id) instance.drop_date = request.POST.get('drop_date') instance.save() message = ('Dropped ' + unicode(instance.student_id.name) + ' from ' + unicode(instance.classroom_id)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-bell-slash') log.save() #then return return HttpResponseRedirect(next_url) else: if student_id > 0: instance = ClassroomEnrollment.objects.get( classroom_id=classroom_id, student_id=student_id) form = IndividualClassroomEnrollmentForm(instance=instance) else: form = IndividualClassroomEnrollmentForm() context = { 'form': form, 'student_id': student_id, 'classroom_id': classroom_id } return render(request, 'mande/classroomenrollmentindividual.html', context)
def teacher_form(request, teacher_id=0): current_teachers = Teacher.objects.all() action = None if int(teacher_id) > 0: instance = Teacher.objects.get(pk=teacher_id) action = 'editing ' + str(instance) else: instance = Teacher() action = None if request.method == 'POST': form = TeacherForm(request.POST, instance=instance) if form.is_valid(): instance = form.save() stem = 'Added a new teacher:' if action is None else 'Updated teachers name:' message = stem + unicode(instance.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-street-view') log.save() #then return return HttpResponseRedirect(reverse('teacher_form')) else: form = TeacherForm(instance=instance) context = { 'form': form, 'teacher_id': teacher_id, 'current_teachers': current_teachers, 'action': action } return render(request, 'mande/teacherform.html', context)
def intake_survey(request, student_id=None): next_url = request.GET.get('next') #where we're going next limit = request.GET.get('limit') #limit to a single field instance = IntakeSurvey.objects.get(pk=student_id) if student_id else None form = IntakeSurveyForm(request.POST or None, instance=instance) if request.method == 'POST': if form.is_valid(): instance = form.save() icon = 'fa-female' if instance.gender == 'F' else 'fa-male' if student_id: action = 'Updated' if limit: action = action + ' ' + limit + 'on' #Updated dob on intake... else: action = 'Performed' message = action + ' intake survey for ' + unicode(instance.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon=icon) log.save() #then return, defaulting to an intake internal if next_url is None: next_url = reverse('intake_internal', kwargs={'student_id': instance.student_id}) return HttpResponseRedirect(next_url) context = { 'form': form, 'student': instance, 'next_url': next_url, 'limit': limit } return render(request, 'mande/intakesurvey.html', context)
def academic_form_single(request, student_id=0): if request.method == 'POST': form = AcademicForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Recorded semester test for ' + instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() #then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id': instance.student_id.student_id})) else: if student_id > 0: form = AcademicForm({ 'student_id': student_id, 'test_date': TODAY, 'test_level': getStudentGradebyID(student_id) }) else: form = AcademicForm() context = {'form': form, 'student_id': student_id} return render(request, 'mande/academicformsingle.html', context)
def discipline_form(request, student_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): if request.method == 'POST': form = DisciplineForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Logged discipline for ' + unicode( instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-meh-o') log.save() #then return return HttpResponseRedirect( reverse( 'student_detail', kwargs={'student_id': instance.student_id.student_id})) else: if student_id > 0: form = DisciplineForm({'student_id': student_id}) else: form = DisciplineForm() context = {'form': form, 'student_id': student_id} return render(request, 'mande/disciplineform.html', context) else: raise PermissionDenied
def exit_survey(request, student_id=0): if request.method == 'POST': form = ExitSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = 'Did an exit survey for ' + unicode( instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-user-times') log.save() #then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id': instance.student_id.student_id})) else: if student_id > 0: form = ExitSurveyForm({'student_id': student_id}) else: form = ExitSurveyForm() context = {'form': form, 'student_id': student_id} return render(request, 'mande/exitsurvey.html', context)
def classroomteacher_form(request, teacher_id=0): current_assignments = ClassroomTeacher.objects.all() classrooms_with_teachers = [] for classroom in current_assignments: classrooms_with_teachers.append(int(classroom.classroom_id.classroom_id)) unassigned_classrooms = Classroom.objects.all().exclude( classroom_id__in=classrooms_with_teachers) if int(teacher_id)>0: current_assignments = current_assignments.filter(teacher_id=teacher_id) if request.method == 'POST': form = ClassroomTeacherForm(request.POST) if form.is_valid(): instance = form.save() message = ('Made '+unicode(instance.teacher_id)+ ' teacher of '+unicode(instance.classroom_id)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-pencil') log.save() #then return return HttpResponseRedirect(reverse(classroomteacher_form, kwargs= {'teacher_id':teacher_id})) else: form = ClassroomTeacherForm() context = { 'form': form, 'teacher_id':teacher_id, 'current_assignments':current_assignments, 'unassigned_classrooms':unassigned_classrooms} return render(request, 'mande/classroomteacherform.html', context)
def classroomenrollment_individual(request,student_id=0,classroom_id=0): if request.method == 'POST': next_url = request.GET.get('next') #get_or_create returns a tuple with the object and its status instance = ClassroomEnrollment.objects.get(classroom_id=classroom_id, student_id=student_id) instance.drop_date = request.POST.get('drop_date') instance.save() message = ( 'Dropped '+unicode(instance.student_id.name)+ ' from '+unicode(instance.classroom_id)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-bell-slash') log.save() #then return return HttpResponseRedirect(next_url) else: if student_id > 0: instance = ClassroomEnrollment.objects.get( classroom_id=classroom_id, student_id=student_id) form = IndividualClassroomEnrollmentForm(instance=instance) else: form = IndividualClassroomEnrollmentForm() context = {'form': form,'student_id':student_id, 'classroom_id':classroom_id} return render(request, 'mande/classroomenrollmentindividual.html', context)
def intake_update(request, student_id=0): next_url = request.GET.get("next") next_tab = request.GET.get("tab") try: survey = IntakeSurvey.objects.get(pk=student_id) most_recent = survey.getRecentFields() except ObjectDoesNotExist: survey = None most_recent = {} if request.method == "POST": form = IntakeUpdateForm(request.POST) if form.is_valid(): instance = form.save() message = "Updated " + unicode(instance.student_id.name) + "'s record" log = NotificationLog(user=request.user, text=message, font_awesome_icon="fa-upload") log.save() # then return return HttpResponseRedirect(next_url + "#" + next_tab) else: # change the date today, for convenience most_recent["date"] = date.today().isoformat() form = IntakeUpdateForm(most_recent) context = {"form": form, "survey": survey, "student_id": student_id, "next": next_url, "tab": next_tab} return render(request, "mande/intakeupdate.html", context)
def academic_making_period(request): method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): marking_periods = AcademicMarkingPeriod.objects.all() form = AcademicMarkingPeriodForm() form_message = { 'status': '' } if request.method == 'POST': form = AcademicMarkingPeriodForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Added an Academics Marking Period (' + instance.description + ')' log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calendar') log.save() form_message = { 'status': 'success', 'sms': 'Successfully added an Academic Marking Period' } else: form_message = { 'status': 'error', 'sms': form.errors.as_text() } context = { 'form': form, 'marking_periods': marking_periods, 'form_message': form_message } return render(request, 'mande/academicmarkingperiodform.html', context) else: raise PermissionDenied
def post_exit_survey(request,student_id): #if the student hasn't had an exit survey performed alert the user try: exit = ExitSurvey.objects.get(student_id=student_id) except ObjectDoesNotExist: return render( request,'mande/errors/noexitsurvey.html', {'student_id':student_id}) #get students current info for pre-filling the survey try: survey = IntakeSurvey.objects.get(pk=student_id) most_recent = survey.getRecentFields() except ObjectDoesNotExist: survey = None most_recent = None if request.method == 'POST': form = PostExitSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = 'Did a post exit survey for '+unicode(instance.student_id.name) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-heart') log.save() #then return return HttpResponseRedirect(reverse('post_exit_survey')) else: form = PostExitSurveyForm(most_recent) context = {'form': form,'student_id':student_id } return render(request, 'mande/postexitsurvey.html', context)
def academic_form_single(request, student_id=0): if request.method == 'POST': form = AcademicForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Recorded semester test for '+instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() #then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id':instance.student_id.student_id})) else: if student_id > 0: form = AcademicForm({ 'student_id':student_id, 'test_date':TODAY, 'test_level':getStudentGradebyID(student_id)}) else: form = AcademicForm() context = {'form': form,'student_id':student_id} return render(request, 'mande/academicformsingle.html',context)
def intake_update(request,student_id=0): next_url = request.GET.get('next') next_tab = request.GET.get('tab') try: survey = IntakeSurvey.objects.get(pk=student_id) most_recent = survey.getRecentFields() except ObjectDoesNotExist: survey = None most_recent = {} if request.method == 'POST': form = IntakeUpdateForm(request.POST) if form.is_valid(): instance = form.save() message = 'Updated '+unicode(instance.student_id.name)+'\'s record' log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-upload') log.save() #then return return HttpResponseRedirect(next_url+'#'+next_tab) else: #change the date today, for convenience most_recent['date'] = TODAY form = IntakeUpdateForm(most_recent) context = {'form': form, 'survey':survey, 'student_id':student_id, 'next':next_url, 'tab':next_tab} return render(request, 'mande/intakeupdate.html', context)
def studentevaluation_form(request, school_id, date=TODAY, grade_id=None): school = School.objects.get(pk=school_id) warning = '' message = '' students = getEnrolledStudents(int(grade_id)) #pre instantiate data for this form so that we can update the whole queryset later students_at_school_id = [] for student in students: if student.site == school: StudentEvaluation.objects.get_or_create( student_id=student,date=date) students_at_school_id.append(student.student_id) #lets only work with the students at the specified school_id students = students_at_school_id student_evaluations = StudentEvaluation.objects.filter(student_id__in=students, date=date) StudentEvaluationFormSet = modelformset_factory(StudentEvaluation, form=StudentEvaluationForm, extra=0) if request.method == 'POST': formset = StudentEvaluationFormSet(request.POST) print "Is formset valid?" if formset.is_valid(): print "yes!s" formset.save() message = "Saved." #clean up the mess we created making blank rows to update. StudentEvaluation.objects.filter( Q(academic_score=None)& Q(study_score=None)& Q(personal_score=None)& Q(hygiene_score=None)& Q(faith_score=None) ).delete() if grade_id is None: message = 'Recorded student evaluations for '+str(school) else: message = ('Recorded student evaluations for '+ str(dict(GRADES)[int(grade_id)])+ ' at '+str(school)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: formset = StudentEvaluationFormSet(queryset = student_evaluations) context= { 'school':school, 'grade_id': grade_id, 'students':students, 'date':date, 'formset':formset, 'warning': mark_safe(warning), 'message': message, 'grades': dict(GRADES) } return render(request, 'mande/studentevaluationform.html', context)
def intake_survey(request, student_id=None): next_url = request.GET.get("next") # where we're going next limit = request.GET.get("limit") # limit to a single field instance = IntakeSurvey.objects.get(pk=student_id) if student_id else None form = IntakeSurveyForm(request.POST or None, instance=instance) if request.method == "POST": if form.is_valid(): instance = form.save() icon = "fa-female" if instance.gender == "F" else "fa-male" if student_id: action = "Updated" if limit: action = action + " " + limit + "on" # Updated dob on intake... else: action = "Performed" message = action + " intake survey for " + unicode(instance.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon=icon) log.save() # then return, defaulting to an intake internal if next_url is None: next_url = reverse("intake_internal", kwargs={"student_id": instance.student_id}) return HttpResponseRedirect(next_url) context = {"form": form, "student": instance, "next_url": next_url, "limit": limit} return render(request, "mande/intakesurvey.html", context)
def studentevaluation_form_single(request, student_id=0): form = StudentEvaluationForm() date = request.POST.get('date') if request.method=='POST' else TODAY if student_id > 0: try: instance = StudentEvaluation.objects.get(student_id=IntakeSurvey.objects.get(pk=student_id), date=date) form = StudentEvaluationForm(instance=instance) except ObjectDoesNotExist: form = StudentEvaluationForm({ 'student_id':student_id, 'date':TODAY}) if request.method == 'POST': form = StudentEvaluationForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Recorded student evaluation for '+instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() #then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id':instance.student_id.student_id})) context = {'form': form,'student_id':student_id} return render(request, 'mande/studentevaluationformsingle.html',context)
def studentevaluation_form_single(request, student_id=0): form = StudentEvaluationForm() date = request.POST.get('date') if request.method == 'POST' else TODAY if student_id > 0: try: instance = StudentEvaluation.objects.get( student_id=IntakeSurvey.objects.get(pk=student_id), date=date) form = StudentEvaluationForm(instance=instance) except ObjectDoesNotExist: form = StudentEvaluationForm({ 'student_id': student_id, 'date': TODAY }) if request.method == 'POST': form = StudentEvaluationForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Recorded student evaluation for ' + instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() #then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id': instance.student_id.student_id})) context = {'form': form, 'student_id': student_id} return render(request, 'mande/studentevaluationformsingle.html', context)
def teacher_form(request, teacher_id=0): current_teachers = Teacher.objects.all() action = None if int(teacher_id)>0: instance = Teacher.objects.get(pk=teacher_id) action = 'editing '+str(instance) else: instance = Teacher() action = None if request.method == 'POST': form = TeacherForm(request.POST, instance=instance) if form.is_valid(): instance = form.save() stem = 'Added a new teacher:' if action is None else 'Updated teachers name:' message = stem+unicode(instance.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-street-view') log.save() #then return return HttpResponseRedirect(reverse('teacher_form')) else: form = TeacherForm(instance=instance) context = { 'form': form, 'teacher_id':teacher_id, 'current_teachers':current_teachers, 'action':action} return render(request, 'mande/teacherform.html', context)
def intake_survey(request,student_id=None): next_url = request.GET.get('next') #where we're going next limit = request.GET.get('limit') #limit to a single field instance = IntakeSurvey.objects.get(pk=student_id) if student_id else None form = IntakeSurveyForm(request.POST or None, instance=instance) if request.method == 'POST': if form.is_valid(): instance = form.save() icon = 'fa-female' if instance.gender == 'F' else 'fa-male' if student_id: action = 'Updated' if limit: action = action+' '+limit+ 'on' #Updated dob on intake... else: action='Performed' message = action+' intake survey for '+unicode(instance.name) log = NotificationLog( user=request.user, text=message, font_awesome_icon=icon) log.save() #then return, defaulting to an intake internal if next_url is None: next_url = reverse('intake_internal',kwargs={'student_id':instance.student_id}) return HttpResponseRedirect(next_url) context = {'form': form, 'student':instance, 'next_url':next_url, 'limit':limit} return render(request, 'mande/intakesurvey.html', context)
def studentevaluation_form(request, school_id, date=TODAY, grade_id=None): school = School.objects.get(pk=school_id) warning = '' message = '' students = getEnrolledStudents(int(grade_id)) #pre instantiate data for this form so that we can update the whole queryset later students_at_school_id = [] for student in students: if student.site == school: StudentEvaluation.objects.get_or_create(student_id=student, date=date) students_at_school_id.append(student.student_id) #lets only work with the students at the specified school_id students = students_at_school_id student_evaluations = StudentEvaluation.objects.filter( student_id__in=students, date=date) StudentEvaluationFormSet = modelformset_factory(StudentEvaluation, form=StudentEvaluationForm, extra=0) if request.method == 'POST': formset = StudentEvaluationFormSet(request.POST) print "Is formset valid?" if formset.is_valid(): print "yes!s" formset.save() message = "Saved." #clean up the mess we created making blank rows to update. StudentEvaluation.objects.filter( Q(academic_score=None) & Q(study_score=None) & Q(personal_score=None) & Q(hygiene_score=None) & Q(faith_score=None)).delete() if grade_id is None: message = 'Recorded student evaluations for ' + str(school) else: message = ('Recorded student evaluations for ' + str(dict(GRADES)[int(grade_id)]) + ' at ' + str(school)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: formset = StudentEvaluationFormSet(queryset=student_evaluations) context = { 'school': school, 'grade_id': grade_id, 'students': students, 'date': date, 'formset': formset, 'warning': mark_safe(warning), 'message': message, 'grades': dict(GRADES) } return render(request, 'mande/studentevaluationform.html', context)
def spiritualactivities_survey(request,student_id=0,survey_id=None): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name,request.user): next_url = request.GET.get('next') data_church_names = list(SpiritualActivitiesSurvey.objects.all().values_list('church_name',flat=True).distinct()) # sort khmer data_church_names = [x.encode('utf-8').strip() for x in data_church_names] data_church_names = sorted(set(data_church_names),key=collator.getSortKey) if int(student_id)>0: if survey_id != None: try: #editing instance = SpiritualActivitiesSurvey.objects.get(pk=survey_id) form = SpiritualActivitiesSurveyForm(instance=instance) action = "Editing" except ObjectDoesNotExist: #adding form instance = None form = SpiritualActivitiesSurveyForm(initial={'student_id': student_id,'date':date.today().isoformat()}) action = 'Adding' else: instance = None form = SpiritualActivitiesSurveyForm(initial={'student_id':student_id,'date':date.today().isoformat()}) action = "Adding" else: instance = None form = SpiritualActivitiesSurveyForm() action = "Performing" if request.method == 'POST': if instance != None: form = SpiritualActivitiesSurveyForm(request.POST,instance=instance) else: form = SpiritualActivitiesSurveyForm(request.POST) if form.is_valid(): instance = form.save() sms = action.replace('ing', 'ed') message = (sms+' spiritual activities survey for '+ unicode(instance.student_id.name)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-fire') log.save() #then return if (next_url != None) & (next_url !='None'): return HttpResponseRedirect(next_url+'#spiritual_activities') return HttpResponseRedirect(reverse('success')) context = { 'form': form, 'student_id':student_id, 'survey_id':survey_id, 'next_url':next_url, 'action':action, 'data_church_names' :json.dumps(data_church_names), } return render(request, 'mande/spiritualactivitiessurvey.html', context) else: raise PermissionDenied
def classroomenrollment_form(request, classroom_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): if int(classroom_id) > 0: instance = Classroom.objects.get(pk=classroom_id) #select students who have not dropped the class, or have not dropped it yet. enrolled_students = instance.classroomenrollment_set.all().filter( Q(student_id__date__lte=date.today().isoformat()) & Q( Q(drop_date__gte=date.today().isoformat()) | Q(drop_date=None))) else: instance = None enrolled_students = None if request.method == 'POST': #can't rely on classroom_id set by url - it may have been changed by the user. classroom_id = Classroom.objects.get( pk=request.POST.get('classroom_id')) enrollment_date = request.POST.get('enrollment_date') #this seems janky to me - surely there is a better way? for student in request.POST.getlist('student_id'): student_id = IntakeSurvey.objects.get(pk=student) e_date, enrollment = ClassroomEnrollment.objects.get_or_create( classroom_id=classroom_id, student_id=student_id) e_date.enrollment_date = enrollment_date e_date.save() num = len(request.POST.getlist('student_id')) plural = 's' if num > 1 else '' message = 'Added ' + str( num) + ' student' + plural + ' to ' + unicode(classroom_id) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-level-up') log.save() return HttpResponseRedirect( reverse('classroomenrollment_form', kwargs={'classroom_id': classroom_id.classroom_id})) else: if classroom_id > 0: form = ClassroomEnrollmentForm({ 'classroom_id': classroom_id, 'enrollment_date': date.today().isoformat() }) else: form = ClassroomEnrollmentForm() context = { 'form': form, 'classroom': instance, 'enrolled_students': enrolled_students } return render(request, 'mande/classroomenrollmentform.html', context) else: raise PermissionDenied
def academic_form(request, school_id, test_date=date.today().isoformat(), classroom_id=None): classroom = Classroom.objects.get(pk=classroom_id) warning = '' message = '' #find only currently enrolled students exit_surveys = ExitSurvey.objects.all().filter(exit_date__lte=date.today().isoformat()).values_list('student_id',flat=True) students = ClassroomEnrollment.objects.exclude(student_id__in=exit_surveys).exclude(drop_date__lt=date.today().isoformat()).filter(classroom_id=classroom_id) # find out if any student acadmics have been recorded student_academics = Academic.objects.filter(student_id=students, test_date=test_date) #pre instantiate data for this form so that we can update the whole queryset later for student in students: Academic.objects.get_or_create( student_id=student.student_id, test_date=test_date, test_level=student.classroom_id.cohort) student_academics = Academic.objects.filter(student_id=students, test_date=test_date, test_level=student.classroom_id.cohort) AcademicFormSet = modelformset_factory(Academic, form=AcademicForm, extra=0) if request.method == 'POST': formset = AcademicFormSet(request.POST) if formset.is_valid(): formset.save() message = "Saved." #clean up the mess we created making blank rows to update. Academic.objects.filter( Q(test_grade_khmer=None)& Q(test_grade_math=None) ).delete() message = ('Recorded semester tests for '+ str(classroom.get_cohort_display())+' - ' +str(classroom.classroom_number)+ ' at '+str(classroom.school_id)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: formset = AcademicFormSet(queryset = student_academics) context= { 'classroom':classroom, 'classrooms_by_school':Classroom.objects.filter(school_id=school_id,cohort__lt=50), 'students':students, 'test_date':test_date, 'formset':formset, 'warning': mark_safe(warning), 'message': message } return render(request, 'mande/academicform.html', context)
def academic_form_single(request, student_id=0,test_id=None): form_error_message= {} if request.method == 'POST': if test_id == None: form = AcademicForm(request.POST) instance,created = Academic.objects.get_or_create(student_id=IntakeSurvey.objects.get(pk=form.data['student_id']), test_date=form.data['test_date'], test_level=form.data['test_level']) form = AcademicForm(request.POST,instance=instance) else: created =None instance = Academic.objects.get(id=test_id) form = AcademicForm(request.POST,instance=instance) if form.is_valid(): #process instance = form.save() action = 'Recorded ' if created else 'Updated ' message = (action+'semester test for '+instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() # then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id':instance.student_id.student_id})) else: action = 'Adding ' if created else 'Editing ' form_error_message= form.errors.as_text() else: if student_id and test_id: instance = Academic.objects.get(id=test_id) form = AcademicForm(instance=instance) action ="Editing" else: form = AcademicForm() if student_id >0: try: action = 'Editing' instance = Academic.objects.get(student_id=IntakeSurvey.objects.get(pk=student_id), test_date=date.today().isoformat(), test_level=getStudentGradebyID(student_id)) form = AcademicForm(instance=instance) except ObjectDoesNotExist: action = 'Adding' form = AcademicForm({'student_id':student_id, 'test_date':date.today().isoformat(), 'test_level':getStudentGradebyID(student_id)}) else: action = 'Adding' form = AcademicForm() context = {'form': form,'student_id':student_id,'test_id':test_id,'action':action,'form_error_message':form_error_message} return render(request, 'mande/academicformsingle.html',context)
def health_form(request, student_id=0, appointment_date=TODAY, appointment_type=None): next_url = request.GET.get('next') if request.method == 'POST': form = HealthForm(request.POST) instance, created = Health.objects.get_or_create( student_id=IntakeSurvey.objects.get(pk=form.data['student_id']), appointment_date=form.data['appointment_date'], appointment_type=form.data['appointment_type']) form = HealthForm(request.POST, instance=instance) if form.is_valid(): #process instance = form.save() action = 'Input ' if created else 'Updated ' message = (action + instance.appointment_type + ' for ' + instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-medkit') log.save() #then return return HttpResponseRedirect(next_url + '#health') else: if student_id > 0 and appointment_type: try: instance = Health.objects.get( student_id=IntakeSurvey.objects.get(pk=student_id), appointment_date=appointment_date, appointment_type=appointment_type) if appointment_type == 'DENTAL': form = HealthDentalForm(instance=instance) else: form = HealthCheckupForm(instance=instance) except ObjectDoesNotExist: form = HealthForm({ 'student_id': student_id, 'appointment_date': appointment_date, 'appointment_type': appointment_type }) else: if student_id > 0: form = HealthForm({ 'student_id': student_id, 'appointment_date': appointment_date }) else: form = HealthForm() context = {'form': form, 'student_id': student_id, 'next_url': next_url} return render(request, 'mande/healthform.html', context)
def health_form(request, student_id=0, appointment_date=date.today().isoformat(), appointment_type=None): next_url = request.GET.get("next") if request.method == "POST": form = HealthForm(request.POST) instance, created = Health.objects.get_or_create( student_id=IntakeSurvey.objects.get(pk=form.data["student_id"]), appointment_date=form.data["appointment_date"], appointment_type=form.data["appointment_type"], ) form = HealthForm(request.POST, instance=instance) if form.is_valid(): # process instance = form.save() action = "Input " if created else "Updated " message = action + instance.appointment_type + " for " + instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon="fa-medkit") log.save() # then return return HttpResponseRedirect(next_url + "#health") else: if student_id > 0 and appointment_type: try: instance = Health.objects.get( student_id=IntakeSurvey.objects.get(pk=student_id), appointment_date=appointment_date, appointment_type=appointment_type, ) if appointment_type == "DENTAL": form = HealthDentalForm(instance=instance) else: form = HealthCheckupForm(instance=instance) except ObjectDoesNotExist: form = HealthForm( { "student_id": student_id, "appointment_date": appointment_date, "appointment_type": appointment_type, } ) else: if student_id > 0: form = HealthForm({"student_id": student_id, "appointment_date": appointment_date}) else: form = HealthForm() context = {"form": form, "student_id": student_id, "next_url": next_url} return render(request, "mande/healthform.html", context)
def studentevaluation_form_single(request, student_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): form = StudentEvaluationForm() get_date = request.POST.get( 'date') if request.method == 'POST' else date.today().isoformat() if student_id > 0: try: instance = StudentEvaluation.objects.get( student_id=IntakeSurvey.objects.get(pk=student_id), date=get_date) form = StudentEvaluationForm(instance=instance) except ObjectDoesNotExist: form = StudentEvaluationForm({ 'student_id': student_id, 'date': date.today().isoformat() }) if request.method == 'POST': # delete StudentEvaluation where academic_score, study_score... is None so we can add a new StudentEvaluation StudentEvaluation.objects.filter( Q(academic_score=None) & Q(study_score=None) & Q(personal_score=None) & Q(hygiene_score=None) & Q(faith_score=None)).delete() form = StudentEvaluationForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Recorded student evaluation for ' + instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() #then return return HttpResponseRedirect( reverse( 'student_detail', kwargs={'student_id': instance.student_id.student_id})) context = {'form': form, 'student_id': student_id} return render(request, 'mande/studentevaluationformsingle.html', context) else: raise PermissionDenied
def classroomenrollment_form(request,classroom_id=0): if int(classroom_id)>0: instance = Classroom.objects.get(pk=classroom_id) #select students who have not dropped the class, or have not dropped it yet. enrolled_students = instance.classroomenrollment_set.all().filter( Q(drop_date__gte=TODAY) | Q(drop_date=None)) else: instance = None; enrolled_students = None if request.method == 'POST': #can't rely on classroom_id set by url - it may have been changed by the user. classroom_id = Classroom.objects.get(pk=request.POST.get('classroom_id')) enrollment_date = request.POST.get('enrollment_date') #this seems janky to me - surely there is a better way? for student in request.POST.getlist('student_id'): student_id = IntakeSurvey.objects.get(pk=student) e_date, enrollment = ClassroomEnrollment.objects.get_or_create( classroom_id=classroom_id, student_id=student_id) e_date.enrollment_date = enrollment_date e_date.save() num = len(request.POST.getlist('student_id')) plural = 's' if num>1 else '' message = 'Added '+str(num)+' student'+plural+' to '+unicode(classroom_id) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-level-up') log.save() return HttpResponseRedirect(reverse('classroomenrollment_form', kwargs= {'classroom_id':classroom_id.classroom_id})) else: if classroom_id > 0: form = ClassroomEnrollmentForm({'classroom_id':classroom_id, 'enrollment_date':TODAY}) else: form = ClassroomEnrollmentForm() context = { 'form': form, 'classroom':instance, 'enrolled_students':enrolled_students} return render(request, 'mande/classroomenrollmentform.html', context)
def health_form(request, student_id=0, appointment_date=TODAY, appointment_type=None): next_url = request.GET.get('next') if request.method == 'POST': form = HealthForm(request.POST) instance,created = Health.objects.get_or_create(student_id=IntakeSurvey.objects.get(pk=form.data['student_id']), appointment_date=form.data['appointment_date'], appointment_type=form.data['appointment_type']) form = HealthForm(request.POST,instance=instance) if form.is_valid(): #process instance = form.save() action = 'Input ' if created else 'Updated ' message = ( action+instance.appointment_type+ ' for '+instance.student_id.name) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-medkit') log.save() #then return return HttpResponseRedirect(next_url+'#health') else: if student_id > 0 and appointment_type: try: instance = Health.objects.get(student_id=IntakeSurvey.objects.get(pk=student_id), appointment_date=appointment_date, appointment_type=appointment_type) if appointment_type=='DENTAL': form = HealthDentalForm(instance=instance) else: form = HealthCheckupForm(instance=instance) except ObjectDoesNotExist: form = HealthForm({ 'student_id':student_id, 'appointment_date':appointment_date, 'appointment_type':appointment_type}) else: if student_id >0: form = HealthForm({'student_id':student_id, 'appointment_date':appointment_date}) else: form = HealthForm() context = {'form': form,'student_id':student_id,'next_url':next_url} return render(request, 'mande/healthform.html',context)
def teacher_form(request, status='active', teacher_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): if status == 'active': current_teachers = Teacher.objects.filter(active=True) else: current_teachers = Teacher.objects.filter(active=False) action = None if int(teacher_id) > 0: instance = Teacher.objects.get(pk=teacher_id) action = 'editing ' + str(instance) else: instance = Teacher() action = None if request.method == 'POST': form = TeacherForm(request.POST, instance=instance) if form.is_valid(): instance = form.save() stem = 'Added a new teacher:' if action is None else 'Updated teachers name:' message = stem + unicode(instance.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-street-view') log.save() #then return print reverse('teacher_form') return HttpResponseRedirect(reverse('teacher_form') + status) else: form = TeacherForm(instance=instance) context = { 'form': form, 'teacher_id': teacher_id, 'current_teachers': current_teachers, 'action': action, 'status': status } return render(request, 'mande/teacherform.html', context) else: raise PermissionDenied
def classroomteacher_form(request, teacher_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): current_assignments = ClassroomTeacher.objects.all() classrooms_with_teachers = [] for classroom in current_assignments: classrooms_with_teachers.append( int(classroom.classroom_id.classroom_id)) unassigned_classrooms = Classroom.objects.all().filter( active=True).exclude(classroom_id__in=classrooms_with_teachers) if int(teacher_id) > 0: current_assignments = current_assignments.filter( teacher_id=teacher_id) if request.method == 'POST': form = ClassroomTeacherForm(request.POST) if form.is_valid(): instance = form.save() message = ('Made ' + unicode(instance.teacher_id) + ' teacher of ' + unicode(instance.classroom_id)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-pencil') log.save() #then return return HttpResponseRedirect( reverse(classroomteacher_form, kwargs={'teacher_id': teacher_id})) else: form = ClassroomTeacherForm() context = { 'form': form, 'teacher_id': teacher_id, 'current_assignments': current_assignments, 'unassigned_classrooms': unassigned_classrooms } return render(request, 'mande/classroomteacherform.html', context) else: raise PermissionDenied
def classroom_form(request, classroom_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): current_classrooms = Classroom.objects.all() if int(classroom_id) > 0: instance = Classroom.objects.get(pk=classroom_id) #select students who have not dropped the class, or have not dropped it yet. enrollments = instance.classroomenrollment_set.all().filter( Q(drop_date__gte=date.today().isoformat()) | Q(drop_date=None)) else: instance = Classroom() enrollments = None if request.method == 'POST': form = ClassroomForm(request.POST, instance=instance) if form.is_valid(): instance = form.save() stem = 'Added classroom ' if int( classroom_id) == 0 else 'Edited classroom ' message = stem + unicode(instance) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-university') log.save() #then return return HttpResponseRedirect( reverse('classroom_form', kwargs={'classroom_id': instance.classroom_id})) else: form = ClassroomForm(instance=instance) context = { 'form': form, 'classroom_id': classroom_id, 'selected_classroom': instance, 'current_classrooms': current_classrooms, 'enrollments': enrollments } return render(request, 'mande/classroomform.html', context) else: raise PermissionDenied
def spiritualactivities_survey(request, student_id=0): if request.method == "POST": form = SpiritualActivitiesSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = "Performed spiritual activities survey for " + unicode(instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon="fa-fire") log.save() # then return return HttpResponseRedirect(reverse("success")) else: if student_id > 0: form = SpiritualActivitiesSurveyForm({"student_id": student_id}) else: form = SpiritualActivitiesSurveyForm() context = {"form": form, "student_id": student_id} return render(request, "mande/spiritualactivitiessurvey.html", context)
def intake_internal(request, student_id=0): if request.method == "POST": form = IntakeInternalForm(request.POST) if form.is_valid(): instance = form.save() message = "Enrolled " + unicode(instance.student_id.name) + " in " + instance.get_starting_grade_display() log = NotificationLog(user=request.user, text=message, font_awesome_icon="fa-user-plus") log.save() # then return return HttpResponseRedirect( reverse("student_detail", kwargs={"student_id": instance.student_id.student_id}) ) else: if student_id > 0: form = IntakeInternalForm({"student_id": student_id}) else: form = IntakeInternalForm() context = {"form": form} return render(request, "mande/intakeinternal.html", context)
def exit_survey(request, student_id=0): if request.method == "POST": form = ExitSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = "Did an exit survey for " + unicode(instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon="fa-user-times") log.save() # then return return HttpResponseRedirect( reverse("student_detail", kwargs={"student_id": instance.student_id.student_id}) ) else: if student_id > 0: form = ExitSurveyForm({"student_id": student_id}) else: form = ExitSurveyForm() context = {"form": form, "student_id": student_id} return render(request, "mande/exitsurvey.html", context)
def spiritualactivities_survey(request, student_id=0): if request.method == 'POST': form = SpiritualActivitiesSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = ('Performed spiritual activities survey for ' + unicode(instance.student_id.name)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-fire') log.save() #then return return HttpResponseRedirect(reverse('success')) else: if student_id > 0: form = SpiritualActivitiesSurveyForm({'student_id': student_id}) else: form = SpiritualActivitiesSurveyForm() context = {'form': form, 'student_id': student_id} return render(request, 'mande/spiritualactivitiessurvey.html', context)
def intake_internal(request, student_id=0): if request.method == 'POST': form = IntakeInternalForm(request.POST) if form.is_valid(): instance = form.save() message = ( 'Enrolled '+unicode(instance.student_id.name)+ ' in '+instance.get_starting_grade_display()) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-user-plus') log.save() #then return return HttpResponseRedirect(reverse('student_detail',kwargs= {'student_id':instance.student_id.student_id})) else: if student_id > 0: form = IntakeInternalForm({'student_id':student_id}) else: form = IntakeInternalForm() context = {'form': form,} return render(request, 'mande/intakeinternal.html', context)
def exit_survey(request,student_id=0): if request.method == 'POST': form = ExitSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = 'Did an exit survey for '+unicode(instance.student_id.name) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-user-times') log.save() #then return return HttpResponseRedirect(reverse('student_detail', kwargs= {'student_id':instance.student_id.student_id})) else: if student_id > 0: form = ExitSurveyForm({'student_id':student_id}) else: form = ExitSurveyForm() context = {'form': form,'student_id':student_id} return render(request, 'mande/exitsurvey.html', context)
def spiritualactivities_survey(request,student_id=0): if request.method == 'POST': form = SpiritualActivitiesSurveyForm(request.POST) if form.is_valid(): instance = form.save() message = ('Performed spiritual activities survey for '+ unicode(instance.student_id.name)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-fire') log.save() #then return return HttpResponseRedirect(reverse('success')) else: if student_id > 0: form = SpiritualActivitiesSurveyForm({'student_id':student_id}) else: form = SpiritualActivitiesSurveyForm() context = {'form': form,'student_id':student_id} return render(request, 'mande/spiritualactivitiessurvey.html', context)
def studentevaluation_form_single(request, student_id=0): form = StudentEvaluationForm() get_date = request.POST.get('date') if request.method=='POST' else date.today().isoformat() if student_id > 0: try: instance = StudentEvaluation.objects.get(student_id=IntakeSurvey.objects.get(pk=student_id), date=get_date) form = StudentEvaluationForm(instance=instance) except ObjectDoesNotExist: form = StudentEvaluationForm({ 'student_id':student_id, 'date':date.today().isoformat()}) if request.method == 'POST': # delete StudentEvaluation where academic_score, study_score... is None so we can add a new StudentEvaluation StudentEvaluation.objects.filter( Q(academic_score=None) & Q(study_score=None) & Q(personal_score=None) & Q(hygiene_score=None) & Q(faith_score=None) ).delete() form = StudentEvaluationForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Recorded student evaluation for '+instance.student_id.name log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() #then return return HttpResponseRedirect( reverse('student_detail', kwargs={'student_id':instance.student_id.student_id})) context = {'form': form,'student_id':student_id} return render(request, 'mande/studentevaluationformsingle.html',context)
def discipline_form(request,student_id=0): if request.method == 'POST': form = DisciplineForm(request.POST) if form.is_valid(): #process instance = form.save() message = 'Logged discipline for '+unicode(instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-meh-o') log.save() #then return return HttpResponseRedirect(reverse('student_detail',kwargs= {'student_id':instance.student_id.student_id})) else: if student_id > 0: form = DisciplineForm({'student_id':student_id}) else: form = DisciplineForm() context = {'form': form,'student_id':student_id} return render(request, 'mande/disciplineform.html', context)
def classroom_form(request, classroom_id=0): current_classrooms = Classroom.objects.all() if int(classroom_id)>0: instance = Classroom.objects.get(pk=classroom_id) #select students who have not dropped the class, or have not dropped it yet. enrollments = instance.classroomenrollment_set.all().filter( Q(drop_date__gte=TODAY) | Q(drop_date=None)) else: instance = Classroom() enrollments = None if request.method == 'POST': form = ClassroomForm(request.POST, instance=instance) if form.is_valid(): instance = form.save() stem = 'Added classroom ' if int(classroom_id)==0 else 'Edited classroom ' message = stem+unicode(instance) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-university') log.save() #then return return HttpResponseRedirect(reverse('classroom_form', kwargs= {'classroom_id':instance.classroom_id})) else: form = ClassroomForm(instance=instance) context = { 'form': form, 'classroom_id': classroom_id, 'selected_classroom':instance, 'current_classrooms':current_classrooms, 'enrollments':enrollments} return render(request, 'mande/classroomform.html', context)
def intake_survey(request, student_id=None): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): next_url = request.GET.get('next') #where we're going next limit = request.GET.get('limit') #limit to a single field intake_surveys = IntakeSurvey.objects.all() intake_update = IntakeUpdate.objects.all() data_guardian_profession = [] intake_surveys_guardian1 = list( intake_surveys.values_list('guardian1_profession', flat=True)) intake_surveys_guardian2 = list( intake_surveys.values_list('guardian2_profession', flat=True)) intake_update_guardian1 = list( intake_update.values_list('guardian1_profession', flat=True)) intake_update_guardian2 = list( intake_update.values_list('guardian2_profession', flat=True)) data_guardian_profession.extend(intake_surveys_guardian1) data_guardian_profession.extend(intake_surveys_guardian2) data_guardian_profession.extend(intake_update_guardian1) data_guardian_profession.extend(intake_update_guardian2) # sort khmer data_guardian_profession = [ x.encode('utf-8').strip() for x in set(data_guardian_profession) if x is not None ] data_guardian_profession = sorted(set(data_guardian_profession), key=collator.getSortKey) instance = IntakeSurvey.objects.get( pk=student_id) if student_id else None form = IntakeSurveyForm(request.POST or None, instance=instance) if request.method == 'POST': enrollment_date = request.POST['enrollment_date'] starting_grade = request.POST['starting_grade'] if form.is_valid(): instance = form.save() intake_internal = IntakeInternal( student_id=instance, enrollment_date=enrollment_date, starting_grade=starting_grade) intake_internal.save() icon = 'fa-female' if instance.gender == 'F' else 'fa-male' if student_id: action = 'Updated' if limit: action = action + ' ' + limit + 'on' #Updated dob on intake... else: action = 'Performed' message = action + ' intake survey and intake internal for ' + unicode( instance.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon=icon) log.save() # update CurrentStudentInfo try: obj = CurrentStudentInfo.objects.get( student_id=instance.student_id) obj.name = instance.name obj.site = instance.site obj.date = instance.date obj.dob = instance.dob obj.gender = instance.gender obj.age_appropriate_grade = instance.age_appropriate_grade( ) obj.in_public_school = True if instance.get_pschool( ).status == 'Y' else False obj.at_grade_level = studentAtAgeAppropriateGradeLevel( instance.student_id) obj.vdp_grade = instance.current_vdp_grade() obj.save() except CurrentStudentInfo.DoesNotExist: obj = CurrentStudentInfo( student_id=instance.student_id, name=instance.name, site=instance.site, date=instance.date, dob=instance.dob, gender=instance.gender, age_appropriate_grade=instance.age_appropriate_grade(), in_public_school=True if instance.get_pschool().status == 'Y' else False, at_grade_level=studentAtAgeAppropriateGradeLevel( instance.student_id), vdp_grade=instance.current_vdp_grade()) obj.save() #then return, defaulting to an intake internal # if next_url is None: # next_url = reverse('intake_internal',kwargs={'student_id':instance.student_id}) next_url = reverse('student_detail', kwargs={'student_id': instance.student_id}) return HttpResponseRedirect(next_url) context = { 'form': form, 'student': instance, 'next_url': next_url, 'limit': limit, 'data_guardian_profession': json.dumps(data_guardian_profession) } return render(request, 'mande/intakesurvey.html', context) else: raise PermissionDenied
def intake_update(request, student_id=0): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): next_url = request.GET.get('next') next_tab = request.GET.get('tab') intake_surveys = IntakeSurvey.objects.all() intake_update = IntakeUpdate.objects.all() data_guardian_profession = [] intake_surveys_guardian1 = list( intake_surveys.values_list('guardian1_profession', flat=True)) intake_surveys_guardian2 = list( intake_surveys.values_list('guardian2_profession', flat=True)) intake_update_guardian1 = list( intake_update.values_list('guardian1_profession', flat=True)) intake_update_guardian2 = list( intake_update.values_list('guardian2_profession', flat=True)) data_guardian_profession.extend(intake_surveys_guardian1) data_guardian_profession.extend(intake_surveys_guardian2) data_guardian_profession.extend(intake_update_guardian1) data_guardian_profession.extend(intake_update_guardian2) # sort khmer data_guardian_profession = [ x.encode('utf-8').strip() for x in set(data_guardian_profession) if x is not None ] data_guardian_profession = sorted(set(data_guardian_profession), key=collator.getSortKey) try: survey = IntakeSurvey.objects.get(pk=student_id) most_recent = survey.getRecentFields() except ObjectDoesNotExist: survey = None most_recent = {} if request.method == 'POST': initial_grade_current = request.POST.get('initial_grade_current') initial_public_school_name = request.POST.get( 'initial_school_name') form = IntakeUpdateForm(request.POST) if form.is_valid(): instance = form.save() message = 'Updated ' + unicode( instance.student_id.name) + '\'s record' log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-upload') log.save() # update cache table student = IntakeSurvey.objects.get( student_id=instance.student_id.student_id) current = student.getRecentFields() try: update_student = CurrentStudentInfo.objects.get( student_id=student.student_id) update_student.name = current['name'] update_student.site = current['site'] update_student.date = current['date'] update_student.dob = current['dob'] update_student.gender = current['gender'] update_student.age_appropriate_grade = student.age_appropriate_grade( ) update_student.in_public_school = True if student.get_pschool( ).status == 'Y' else False update_student.at_grade_level = studentAtAgeAppropriateGradeLevel( student.student_id) update_student.vdp_grade = student.current_vdp_grade() update_student.refresh = date.today().isoformat() update_student.save() except: pass #then return return HttpResponseRedirect(next_url + '#' + next_tab) else: #change the date today, for convenience most_recent['date'] = date.today().isoformat() form = IntakeUpdateForm(most_recent) context = { 'form': form, 'survey': survey, 'student_id': student_id, 'next': next_url, 'tab': next_tab, 'data_guardian_profession': json.dumps(data_guardian_profession) } return render(request, 'mande/intakeupdate.html', context) else: raise PermissionDenied
def academic_form(request, school_id, test_date=TODAY, grade_id=None): school = School.objects.get(pk=school_id) warning = '' message = '' students = IntakeSurvey.objects.all().filter(site=school_id) #find out if any student acadmics have been recorded student_academics = Academic.objects.filter(student_id=students, test_date=test_date) #pre instantiate data for this form so that we can update the whole queryset later if grade_id is None: for student in students: Academic.objects.get_or_create(student_id=student, test_date=test_date, test_level=getStudentGradebyID( student.student_id)) student_academics = Academic.objects.filter(student_id=students, test_date=test_date) else: for student in students: if getStudentGradebyID(student.student_id) == int(grade_id): Academic.objects.get_or_create(student_id=student, test_date=test_date, test_level=grade_id) student_academics = Academic.objects.filter(student_id=students, test_date=test_date, test_level=grade_id) AcademicFormSet = modelformset_factory(Academic, form=AcademicForm, extra=0) if request.method == 'POST': formset = AcademicFormSet(request.POST) if formset.is_valid(): formset.save() message = "Saved." #clean up the mess we created making blank rows to update. Academic.objects.filter( Q(test_grade_khmer=None) & Q(test_grade_math=None)).delete() if grade_id is None: message = 'Recorded semester tests for ' + str(school) else: message = ('Recorded semester tests for ' + str(dict(GRADES)[int(grade_id)]) + ' at ' + str(school)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: formset = AcademicFormSet(queryset=student_academics) context = { 'school': school, 'grade_id': grade_id, 'students': students, 'test_date': test_date, 'formset': formset, 'warning': mark_safe(warning), 'message': message, 'grades': dict(GRADES) } return render(request, 'mande/academicform.html', context)
def take_class_attendance(request, classroom_id, attendance_date=date.today().isoformat()): message = '' submit_enabled = True if attendance_date != date.today().isoformat(): warning = 'The selected date is not today!' else: warning = '' classroom = Classroom.objects.get(pk=classroom_id) students = ClassroomEnrollment.objects.filter(classroom_id=classroom_id ).exclude( drop_date__lte=attendance_date ) #find out if any student attendance has been taken, excluding placeholder attendance student_attendance = Attendance.objects.filter(student_id=students, date=attendance_date ).exclude(attendance=None) if len(student_attendance) > 0: message = 'Attendance for one or more students has been taken' #pre instantiate data for this form so that we can update the whole queryset later for student in students: Attendance.objects.get_or_create(student_id=student.student_id, date=attendance_date, defaults={'attendance':None, 'classroom':classroom}) try: offered = AttendanceDayOffering.objects.filter(classroom_id=classroom_id, date=attendance_date) if len(offered) < 1 : submit_enabled = False Attendance.objects.filter(attendance=None).delete() except ObjectDoesNotExist: submit_enabled = False Attendance.objects.filter(attendance=None).delete() #now get the whole set of attendance objects and create the formset student_attendance = Attendance.objects.filter(student_id=students, date=attendance_date) AttendanceFormSet = modelformset_factory(Attendance, form=AttendanceForm, extra=0) if request.method == 'POST': formset = AttendanceFormSet(request.POST) if formset.is_valid(): formset.save() #zero things out absent = 0 present = 0 attendancecodes = dict(ATTENDANCE_CODES) for key,code in attendancecodes.iteritems(): attendancecodes[key]=0 #count attendance codes for form in formset: attendancecodes[form.cleaned_data['attendance']] +=1 #attendance codes with 'A' in them mean absences. if 'A' in form.cleaned_data['attendance']: absent +=1 else: present +=1 alog,created = AttendanceLog.objects.get_or_create( classroom=classroom, date=attendance_date,) alog.absent = absent alog.present = present alog.save() message = ('Took attendance for '+unicode(classroom) + ' (A:'+unicode(absent)+ ',P:'+unicode(present)+')') log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-check-square') log.save() #clean up the mess we created making blank rows to update. Attendance.objects.filter(attendance=None).delete() else: formset = AttendanceFormSet(queryset = student_attendance) context= { 'classroom':classroom, 'students':students, 'attendance_date':attendance_date, 'formset':formset, 'warning': mark_safe(warning), 'message': message, 'submit_enabled': submit_enabled} return render(request, 'mande/takeclassattendanceformset.html', context)
def take_class_attendance(request, classroom_id, attendance_date=date.today().isoformat()): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): next_url = request.GET.get('next') #where we're going next limit = request.GET.get('limit') #limit to a single field message = '' submit_enabled = True if attendance_date != date.today().isoformat(): warning = 'The selected date is not today!' else: warning = '' classroom = Classroom.objects.get(pk=classroom_id) # students = ClassroomEnrollment.objects.filter(classroom_id=classroom_id,student_id__date__lte=date.today().isoformat() # ).exclude( # drop_date__lte=attendance_date # ) students = ClassroomEnrollment.objects.filter( Q(classroom_id=classroom_id) & Q(student_id__date__lte=date.today().isoformat()) & Q(Q(drop_date__gte=attendance_date) | Q(drop_date=None))) #find out if any student attendance has been taken, excluding placeholder attendance student_attendance = Attendance.objects.filter( student_id__in=students.values_list('student_id'), date=attendance_date).exclude(attendance=None) if len(student_attendance) > 0: message = 'Attendance for one or more students has been taken' #pre instantiate data for this form so that we can update the whole queryset later for student in students: Attendance.objects.get_or_create(student_id=student.student_id, date=attendance_date, defaults={ 'attendance': None, 'classroom': classroom }) try: offered = classroom.getAttendanceDayOfferings(attendance_date) if len(offered) < 1: submit_enabled = False #Attendance.objects.filter(attendance=None).delete() except ObjectDoesNotExist: submit_enabled = False #Attendance.objects.filter(attendance=None).delete() #now get the whole set of attendance objects and create the formset student_attendance = Attendance.objects.filter( student_id__in=students.values_list('student_id'), date=attendance_date) AttendanceFormSet = modelformset_factory(Attendance, form=AttendanceForm, extra=0) if request.method == 'POST': formset = AttendanceFormSet(request.POST) if formset.is_valid(): formset.save() #zero things out absent = 0 present = 0 attendancecodes = dict(ATTENDANCE_CODES) for key, code in attendancecodes.iteritems(): attendancecodes[key] = 0 #count attendance codes for form in formset: attendancecodes[form.cleaned_data['attendance']] += 1 #attendance codes with 'A' in them mean absences. if 'A' in form.cleaned_data['attendance']: absent += 1 else: present += 1 alog, created = AttendanceLog.objects.get_or_create( classroom=classroom, date=attendance_date, ) alog.absent = absent alog.present = present alog.save() message = ('Took attendance for ' + unicode(classroom) + ' (A:' + unicode(absent) + ',P:' + unicode(present) + ')') log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-check-square') log.save() #clean up the mess we created making blank rows to update. #Attendance.objects.filter(attendance=None).delete() if next_url is not None: return HttpResponseRedirect(next_url) else: formset = AttendanceFormSet(queryset=student_attendance) context = { 'classroom': classroom, 'students': students, 'attendance_date': attendance_date, 'formset': formset, 'warning': mark_safe(warning), 'message': message, 'submit_enabled': submit_enabled, 'next_url': next_url, 'limit': limit } return render(request, 'mande/takeclassattendanceformset.html', context) else: raise PermissionDenied
def studentevaluation_form(request, school_id, get_date=date.today().isoformat(), classroom_id=None): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): warning = '' message = '' exit_surveys = ExitSurvey.objects.all().filter( exit_date__lte=date.today().isoformat()).values_list('student_id', flat=True) get_enrolled_student = ClassroomEnrollment.objects.exclude( student_id__in=exit_surveys).exclude( drop_date__lt=date.today().isoformat()).filter( classroom_id=classroom_id, student_id__date__lte=date.today().isoformat()) students = get_enrolled_student #pre instantiate data for this form so that we can update the whole queryset later students_at_school_id = [] for student in students: StudentEvaluation.objects.get_or_create( student_id=student.student_id, date=get_date) students_at_school_id.append(student.student_id) #lets only work with the students at the specified school_id students = students_at_school_id student_evaluations = StudentEvaluation.objects.filter( student_id__in=students, date=get_date) StudentEvaluationFormSet = modelformset_factory( StudentEvaluation, form=StudentEvaluationForm, extra=0) if request.method == 'POST': formset = StudentEvaluationFormSet(request.POST) print "Is formset valid?" if formset.is_valid(): print "yes!s" formset.save() message = "Saved." message = ( 'Recorded student evaluations for ' + str( Classroom.objects.get( pk=classroom_id).get_cohort_display()) + ' - ' + str( Classroom.objects.get( pk=classroom_id).classroom_number) + ' at ' + str(Classroom.objects.get(pk=classroom_id).school_id)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: warning = 'Cannot record student evaluations. Please refresh the page and try again.' students = get_enrolled_student students_at_school_id = [] for student in students: StudentEvaluation.objects.get_or_create( student_id=student.student_id, date=get_date) students_at_school_id.append(student.student_id) #lets only work with the students at the specified school_id students = students_at_school_id student_evaluations = StudentEvaluation.objects.filter( student_id__in=students, date=get_date) formset = StudentEvaluationFormSet( queryset=student_evaluations) else: formset = StudentEvaluationFormSet(queryset=student_evaluations) context = { 'classroom': Classroom.objects.get(pk=classroom_id), 'classrooms_by_school': Classroom.objects.filter(school_id=school_id), 'students': students, 'date': get_date, 'formset': formset, 'warning': mark_safe(warning), 'message': message, 'grades': dict(GRADES) } return render(request, 'mande/studentevaluationform.html', context) else: raise PermissionDenied
def academic_form_single(request, student_id=0, test_id=None): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): form_error_message = {} locked = True today = date.today().isoformat() making_period = AcademicMarkingPeriod.objects.all().filter( Q(marking_period_start__lte=today) & Q(marking_period_end__gte=today)) if len(making_period) >= 1: locked = False if request.method == 'POST': if test_id == None: form = AcademicForm(request.POST) instance, created = Academic.objects.get_or_create( student_id=IntakeSurvey.objects.get( pk=form.data['student_id']), test_date=form.data['test_date'], test_level=form.data['test_level']) form = AcademicForm(request.POST, instance=instance) else: created = None instance = Academic.objects.get(id=test_id) form = AcademicForm(request.POST, instance=instance) if form.is_valid(): #process test_date = request.POST['test_date'] period = AcademicMarkingPeriod.objects.all().filter( test_date=test_date) if len(period) >= 1: instance = form.save() action = 'Recorded ' if created else 'Updated ' message = (action + 'semester test for ' + instance.student_id.name) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() # update cache table student = IntakeSurvey.objects.get( student_id=instance.student_id.student_id) update_student = CurrentStudentInfo.objects.get( student_id=student.student_id) update_student.at_grade_level = studentAtAgeAppropriateGradeLevel( student.student_id) update_student.vdp_grade = student.current_vdp_grade() update_student.refresh = date.today().isoformat() update_student.save() # then return return HttpResponseRedirect( reverse('student_detail', kwargs={ 'student_id': instance.student_id.student_id })) else: action = 'Adding ' if created else 'Editing ' form.add_error(None, "") form_error_message = "Test date doesn't match with AcademicMarkingPeriod date." else: action = 'Adding ' if created else 'Editing ' form_error_message = form.errors.as_text() else: if student_id and test_id: instance = Academic.objects.get(id=test_id) form = AcademicForm(instance=instance) action = "Editing" else: form = AcademicForm() if student_id > 0: try: action = 'Editing' instance = Academic.objects.get( student_id=IntakeSurvey.objects.get(pk=student_id), test_date=date.today().isoformat(), test_level=getStudentGradebyID(student_id)) form = AcademicForm(instance=instance) except ObjectDoesNotExist: action = 'Adding' form = AcademicForm({ 'student_id': student_id, 'test_date': date.today().isoformat(), 'test_level': getStudentGradebyID(student_id) }) else: action = 'Adding' form = AcademicForm() context = { 'form': form, 'student_id': student_id, 'test_id': test_id, 'action': action, 'form_error_message': form_error_message, 'locked': locked } return render(request, 'mande/academicformsingle.html', context) else: raise PermissionDenied
def academic_form(request, school_id, test_date=date.today().isoformat(), classroom_id=None): #get current method name method_name = inspect.currentframe().f_code.co_name if user_permissions(method_name, request.user): classroom = Classroom.objects.get(pk=classroom_id) warning = '' message = '' locked = True today = date.today().isoformat() making_period = AcademicMarkingPeriod.objects.all().filter( Q(marking_period_start__lte=today) & Q(marking_period_end__gte=today)) if len(making_period) >= 1: locked = False #find only currently enrolled students exit_surveys = ExitSurvey.objects.all().filter( exit_date__lte=date.today().isoformat()).values_list('student_id', flat=True) students = ClassroomEnrollment.objects.exclude( student_id__in=exit_surveys).exclude( drop_date__lt=date.today().isoformat()).filter( classroom_id=classroom_id, student_id__date__lte=date.today().isoformat()) # find out if any student acadmics have been recorded student_academics = Academic.objects.filter( student_id__in=students.values_list('student_id'), test_date=test_date) #pre instantiate data for this form so that we can update the whole queryset later for student in students: Academic.objects.get_or_create( student_id=student.student_id, test_date=test_date, test_level=student.classroom_id.cohort) try: student_academics = Academic.objects.filter( student_id__in=students.values_list('student_id'), test_date=test_date, test_level=student.classroom_id.cohort) except Exception as e: student_academics = Academic.objects.filter( student_id__in=students.values_list('student_id'), test_date=test_date, test_level=classroom.cohort) AcademicFormSet = modelformset_factory(Academic, form=AcademicForm, extra=0) if request.method == 'POST': formset = AcademicFormSet(request.POST) if formset.is_valid(): period = AcademicMarkingPeriod.objects.all().filter( test_date=test_date) if len(period) >= 1: instances = formset.save() message = "Saved." message = ('Recorded semester tests for ' + str(classroom.get_cohort_display()) + ' - ' + str(classroom.classroom_number) + ' at ' + str(classroom.school_id)) log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() for academic in instances: # update cache table student = IntakeSurvey.objects.get( student_id=academic.student_id.student_id) update_student = CurrentStudentInfo.objects.get( student_id=student.student_id) update_student.at_grade_level = studentAtAgeAppropriateGradeLevel( student.student_id) update_student.vdp_grade = student.current_vdp_grade() update_student.refresh = date.today().isoformat() update_student.save() else: warning = "Test date doesn't match with AcademicMarkingPeriod date." else: formset = AcademicFormSet(queryset=student_academics) context = { 'classroom': classroom, 'classrooms_by_school': Classroom.objects.filter(school_id=school_id, cohort__lt=50), 'students': students, 'test_date': test_date, 'formset': formset, 'warning': mark_safe(warning), 'message': message, 'locked': locked, } return render(request, 'mande/academicform.html', context) else: raise PermissionDenied
def studentevaluation_form(request, school_id, get_date=date.today().isoformat(), classroom_id=None): warning = '' message = '' exit_surveys = ExitSurvey.objects.all().filter(exit_date__lte=date.today().isoformat()).values_list('student_id',flat=True) get_enrolled_student = ClassroomEnrollment.objects.exclude(student_id__in=exit_surveys).exclude(drop_date__lt=date.today().isoformat()).filter(classroom_id=classroom_id) students = get_enrolled_student #pre instantiate data for this form so that we can update the whole queryset later students_at_school_id = [] for student in students: StudentEvaluation.objects.get_or_create( student_id=student.student_id,date=get_date) students_at_school_id.append(student.student_id) #lets only work with the students at the specified school_id students = students_at_school_id student_evaluations = StudentEvaluation.objects.filter(student_id__in=students, date=get_date) StudentEvaluationFormSet = modelformset_factory(StudentEvaluation, form=StudentEvaluationForm, extra=0) if request.method == 'POST': formset = StudentEvaluationFormSet(request.POST) print "Is formset valid?" if formset.is_valid(): print "yes!s" formset.save() message = "Saved." message = ('Recorded student evaluations for '+ str(Classroom.objects.get(pk=classroom_id).get_cohort_display()) +' - '+ str(Classroom.objects.get(pk=classroom_id).classroom_number) +' at '+ str(Classroom.objects.get(pk=classroom_id).school_id)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: warning = 'Cannot record student evaluations. Please refresh the page and try again.' students = get_enrolled_student students_at_school_id = [] for student in students: StudentEvaluation.objects.get_or_create( student_id=student.student_id,date=get_date) students_at_school_id.append(student.student_id) #lets only work with the students at the specified school_id students = students_at_school_id student_evaluations = StudentEvaluation.objects.filter(student_id__in=students, date=get_date) formset = StudentEvaluationFormSet(queryset = student_evaluations) else: formset = StudentEvaluationFormSet(queryset = student_evaluations) context= { 'classroom': Classroom.objects.get(pk=classroom_id), 'classrooms_by_school':Classroom.objects.filter(school_id=school_id), 'students':students, 'date':get_date, 'formset':formset, 'warning': mark_safe(warning), 'message': message, 'grades': dict(GRADES) } return render(request, 'mande/studentevaluationform.html', context)
def take_class_attendance(request, classroom_id, attendance_date=TODAY): message = '' submit_enabled = True if attendance_date != TODAY: warning = 'The selected date is not today!' else: warning = '' classroom = Classroom.objects.get(pk=classroom_id) students = ClassroomEnrollment.objects.filter( classroom_id=classroom_id).exclude(drop_date__lte=attendance_date) #find out if any student attendance has been taken, excluding placeholder attendance student_attendance = Attendance.objects.filter( student_id=students, date=attendance_date).exclude(attendance=None) if len(student_attendance) > 0: message = 'Attendance for one or more students has been taken' #pre instantiate data for this form so that we can update the whole queryset later for student in students: Attendance.objects.get_or_create(student_id=student.student_id, date=attendance_date, defaults={ 'attendance': None, 'classroom': classroom }) try: offered = AttendanceDayOffering.objects.get(classroom_id=classroom_id, date=attendance_date) except ObjectDoesNotExist: submit_enabled = False Attendance.objects.filter(attendance=None).delete() #now get the whole set of attendance objects and create the formset student_attendance = Attendance.objects.filter(student_id=students, date=attendance_date) AttendanceFormSet = modelformset_factory(Attendance, form=AttendanceForm, extra=0) if request.method == 'POST': formset = AttendanceFormSet(request.POST) if formset.is_valid(): formset.save() #zero things out absent = 0 present = 0 attendancecodes = dict(ATTENDANCE_CODES) for key, code in attendancecodes.iteritems(): attendancecodes[key] = 0 #count attendance codes for form in formset: attendancecodes[form.cleaned_data['attendance']] += 1 #attendance codes with 'A' in them mean absences. if 'A' in form.cleaned_data['attendance']: absent += 1 else: present += 1 alog, created = AttendanceLog.objects.get_or_create( classroom=classroom, date=attendance_date, ) alog.absent = absent alog.present = present alog.save() message = ('Took attendance for ' + unicode(classroom) + ' (A:' + unicode(absent) + ',P:' + unicode(present) + ')') log = NotificationLog(user=request.user, text=message, font_awesome_icon='fa-check-square') log.save() #clean up the mess we created making blank rows to update. Attendance.objects.filter(attendance=None).delete() else: formset = AttendanceFormSet(queryset=student_attendance) context = { 'classroom': classroom, 'students': students, 'attendance_date': attendance_date, 'formset': formset, 'warning': mark_safe(warning), 'message': message, 'submit_enabled': submit_enabled } return render(request, 'mande/takeclassattendanceformset.html', context)
def academic_form(request, school_id, test_date=TODAY, grade_id=None): school = School.objects.get(pk=school_id) warning = '' message = '' students = IntakeSurvey.objects.all().filter(site=school_id) #find out if any student acadmics have been recorded student_academics = Academic.objects.filter(student_id=students, test_date=test_date) #pre instantiate data for this form so that we can update the whole queryset later if grade_id is None: for student in students: Academic.objects.get_or_create( student_id=student, test_date=test_date, test_level=getStudentGradebyID(student.student_id)) student_academics = Academic.objects.filter(student_id=students, test_date=test_date) else: for student in students: if getStudentGradebyID(student.student_id) == int(grade_id): Academic.objects.get_or_create( student_id=student, test_date=test_date, test_level=grade_id) student_academics = Academic.objects.filter(student_id=students, test_date=test_date, test_level=grade_id) AcademicFormSet = modelformset_factory(Academic, form=AcademicForm, extra=0) if request.method == 'POST': formset = AcademicFormSet(request.POST) if formset.is_valid(): formset.save() message = "Saved." #clean up the mess we created making blank rows to update. Academic.objects.filter( Q(test_grade_khmer=None)& Q(test_grade_math=None) ).delete() if grade_id is None: message = 'Recorded semester tests for '+str(school) else: message = ('Recorded semester tests for '+ str(dict(GRADES)[int(grade_id)])+ ' at '+str(school)) log = NotificationLog( user=request.user, text=message, font_awesome_icon='fa-calculator') log.save() else: formset = AcademicFormSet(queryset = student_academics) context= { 'school':school, 'grade_id': grade_id, 'students':students, 'test_date':test_date, 'formset':formset, 'warning': mark_safe(warning), 'message': message, 'grades': dict(GRADES) } return render(request, 'mande/academicform.html', context)