예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
파일: surveys.py 프로젝트: AsianHope/vdpme
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
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
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
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
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)
예제 #13
0
파일: surveys.py 프로젝트: suin-kim/vdpme
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)
예제 #14
0
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
예제 #15
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #16
0
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)
예제 #17
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #18
0
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)
예제 #19
0
파일: surveys.py 프로젝트: suin-kim/vdpme
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)
예제 #20
0
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)
예제 #21
0
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)
예제 #22
0
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)
예제 #23
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #24
0
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)
예제 #25
0
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
예제 #26
0
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
예제 #27
0
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)
예제 #28
0
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)
예제 #29
0
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)
예제 #30
0
파일: surveys.py 프로젝트: suin-kim/vdpme
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)
예제 #31
0
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
예제 #32
0
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)
예제 #33
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #34
0
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
예제 #35
0
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
예제 #36
0
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
예제 #37
0
파일: surveys.py 프로젝트: suin-kim/vdpme
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)
예제 #38
0
파일: surveys.py 프로젝트: suin-kim/vdpme
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)
예제 #39
0
파일: surveys.py 프로젝트: suin-kim/vdpme
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)
예제 #40
0
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)
예제 #41
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #42
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #43
0
파일: surveys.py 프로젝트: rice1got/vdpme
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)
예제 #44
0
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)
예제 #45
0
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)
예제 #46
0
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)
예제 #47
0
파일: surveys.py 프로젝트: AsianHope/vdpme
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
예제 #48
0
파일: surveys.py 프로젝트: AsianHope/vdpme
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
예제 #49
0
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)
예제 #50
0
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)
예제 #51
0
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
예제 #52
0
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
예제 #53
0
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
예제 #54
0
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
예제 #55
0
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)
예제 #56
0
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)
예제 #57
0
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)