Ejemplo n.º 1
0
def save_photo(request):
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        student_id = 00000
        upload_directory = settings.MEDIA_ROOT
        if request.method == 'POST':
            student_id = request.POST['student_id']
            url = request.POST['img_url']
            file_name = student_id + ".jpg"
            try:
                file = cStringIO.StringIO(urllib.urlopen(url).read())
                img = Image.open(file)
                img.save(upload_directory + "/" + file_name)
                messages.success(
                    request,
                    'Student photo has been updated successfully!',
                    extra_tags='save_photo')
            except Exception as e:
                messages.error(request,
                               'Fail to update student photo! (' + str(e) +
                               ')',
                               extra_tags='save_photo')
        return HttpResponseRedirect(
            reverse('student_detail', kwargs={'student_id': student_id}))
    else:
        raise PermissionDenied
Ejemplo n.º 2
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
Ejemplo n.º 3
0
def attendance_days(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):
        attendance_date = datetime.strptime(attendance_date, '%Y-%m-%d')
        classroom = Classroom.objects.get(pk=classroom_id)

        #submitting a day to be added or removed
        if request.method == 'GET' and request.GET.get('day'):
            day = request.GET.get('day')
            #if we don't get an exception, we want to delete this object
            try:
                attendance_days = AttendanceDayOffering.objects.get(
                    classroom_id=classroom,
                    date__year=attendance_date.year,
                    date__month=attendance_date.month,
                    date__day=day)
                attendance_days.delete()
            #if we do get an exception, we want to create this object
            except ObjectDoesNotExist:
                newday = datetime.strptime(
                    str(attendance_date.year) + '-' +
                    str(attendance_date.month) + '-' + str(day), '%Y-%m-%d')
                add = AttendanceDayOffering(classroom_id=classroom,
                                            date=newday)
                add.save()
            #TODO: make a success template so we can be smarter in our JS
            #TODO: figure out a way to not group requests for slimmer logging
            return render(request, 'mande/attendancedays.html', '')

        #copy this calendar to all other calendars at the site from today forward
        elif request.method == 'GET' and request.GET.get('autoapply'):

            site_classrooms = Classroom.objects.all().filter(
                school_id=classroom.school_id).exclude(
                    classroom_id=classroom.classroom_id)

            for site_class in site_classrooms:
                site_class.attendance_calendar = classroom
                site_class.save()

            return render(request, 'mande/attendancedays.html', '')
        #otherwise display the calendar
        else:
            attendance_days = AttendanceDayOffering.objects.filter(
                classroom_id=classroom).filter(
                    date__year=attendance_date.year,
                    date__month=attendance_date.month)
            lCalendar = AttendanceCalendar(attendance_days).formatmonth(
                attendance_date.year, attendance_date.month)

            return render(request, 'mande/attendancedays.html', {
                'Calendar': mark_safe(lCalendar),
                'classroom': classroom,
            })

    else:
        raise PermissionDenied
Ejemplo n.º 4
0
def delete_public_school(request, id):
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        next_url = request.GET.get('next')
        try:
            pschool = PublicSchoolHistory.objects.get(pk=id)
            pschool.delete()
            # update cache table
            student = IntakeSurvey.objects.get(
                student_id=pschool.student_id.student_id)
            update_student = CurrentStudentInfo.objects.get(
                student_id=student.student_id)
            update_student.in_public_school = True if student.get_pschool(
            ).status == 'Y' else False
            update_student.refresh = date.today().isoformat()
            update_student.save()
            messages.success(
                request,
                'Public School History has been deleted successfully!',
                extra_tags='delete_public_school')
        except Exception as e:
            messages.error(request,
                           'Fail to delete Public School History! (' +
                           e.message + ')',
                           extra_tags='delete_public_school')

        return HttpResponseRedirect(next_url)
    else:
        raise PermissionDenied
Ejemplo n.º 5
0
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
Ejemplo n.º 6
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
Ejemplo n.º 7
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
Ejemplo n.º 8
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
Ejemplo n.º 9
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
Ejemplo n.º 10
0
def attendance(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        context = {}
        return render(request, 'mande/attendance.html', context)
    else:
        raise PermissionDenied
Ejemplo n.º 11
0
def notification_log(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        notifications = NotificationLog.objects.order_by('-date')[:500]
        context = {'notifications': notifications}
        return render(request, 'mande/notificationlog.html', context)
    else:
        raise PermissionDenied
Ejemplo n.º 12
0
def attendance_calendar(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name,request.user):
      classrooms = Classroom.objects.all()
      attendance_date = date.today().replace(day=1).isoformat()
      context= {'classrooms':classrooms, 'attendance_date':attendance_date}
      return render(request, 'mande/attendancecalendar.html', context)
    else:
      raise PermissionDenied
Ejemplo n.º 13
0
def student_list(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        #get enrolled and accepted students
        surveys = CurrentStudentInfo.objects.all().select_related('site')
        context = {'surveys': surveys}
        return render(request, 'mande/studentlist.html', context)
    else:
        raise PermissionDenied
Ejemplo n.º 14
0
def post_exit_survey_list(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        exitsurveys = ExitSurvey.objects.exclude(student_id__in=[
            x.student_id.student_id for x in PostExitSurvey.objects.all()
        ]).order_by('-exit_date')

        context = {'exitsurveys': exitsurveys}
        return render(request, 'mande/postexitsurveylist.html', context)
    else:
        raise PermissionDenied
Ejemplo n.º 15
0
def studentevaluation_select(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        classrooms = Classroom.objects.all()
        context = {
            'classrooms': classrooms,
            'today': date.today().isoformat(),
        }
        return render(request, 'mande/studentevaluationselect.html', context)
    else:
        raise PermissionDenied
Ejemplo n.º 16
0
def delete_spiritualactivities_survey(request,id):
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name,request.user):
        next_url = request.GET.get('next')
        try:
            SpiritualActivitiesSurvey.objects.get(pk=id).delete()
            messages.success(request, 'Spiritual Activity Survey has been deleted successfully!',extra_tags='delete_spiritualactivities_survey')
        except Exception as e:
            messages.error(request,'Fail to delete Spiritual Activity Survey! ('+e.message+')',extra_tags='delete_spiritualactivities_survey')

        return HttpResponseRedirect(next_url)
    else:
        raise PermissionDenied
Ejemplo n.º 17
0
def health_form(request, student_id=0, appointment_date=date.today().isoformat(), appointment_type=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')
        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)
    else:
      raise PermissionDenied
Ejemplo n.º 18
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
Ejemplo n.º 19
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
Ejemplo n.º 20
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
Ejemplo n.º 21
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
Ejemplo n.º 22
0
def post_exit_survey(request, student_id):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        #if the student hasn't had an exit survey performed alert the user
        try:
            # exit = ExitSurvey.objects.get(student_id=student_id)
            exit = ExitSurvey.objects.filter(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)
    else:
        raise PermissionDenied
Ejemplo n.º 23
0
def classroomenrollment_individual(request, student_id=0, classroom_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':
            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)
    else:
        raise PermissionDenied
Ejemplo n.º 24
0
def academic_select(request):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):

        schools = School.objects.all()
        classrooms = Classroom.objects.filter(cohort__lt=50)
        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
        context = {
            'classrooms': classrooms,
            'today': today,
            'locked': locked,
        }
        return render(request, 'mande/academicselect.html', context)
    else:
        raise PermissionDenied
Ejemplo n.º 25
0
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
Ejemplo n.º 26
0
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
Ejemplo n.º 27
0
def publicschool_form(request, student_id=0, id=None):
    #get current method name
    method_name = inspect.currentframe().f_code.co_name
    if user_permissions(method_name, request.user):
        data_public_schools = list(
            PublicSchoolHistory.objects.all().values_list(
                'school_name', flat=True).distinct())
        # sort khmer
        data_public_schools = [
            x.encode('utf-8').strip() for x in data_public_schools
        ]
        locale = Locale('km_KH')
        collator = Collator.createInstance(locale)
        data_public_schools = sorted(set(data_public_schools),
                                     key=collator.getSortKey)
        try:
            survey = IntakeSurvey.objects.get(pk=student_id)

            try:
                #edit form
                instance = PublicSchoolHistory.objects.get(pk=id)
                form = StudentPublicSchoolHistoryForm(instance=instance)
                action = 'Editing '
            except ObjectDoesNotExist:
                #adding form
                form = StudentPublicSchoolHistoryForm(
                    initial={'student_id': student_id})
                action = 'Adding'
                instance = None

            if request.method == 'POST':
                # cancel button
                if "cancel" in request.POST:
                    return HttpResponseRedirect('')

                if instance != None:
                    # edit
                    form = StudentPublicSchoolHistoryForm(request.POST,
                                                          instance=instance)
                else:
                    # add
                    form = StudentPublicSchoolHistoryForm(request.POST)

                if form.is_valid():
                    #process
                    instance = form.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.in_public_school = True if student.get_pschool(
                    ).status == 'Y' else False
                    update_student.refresh = date.today().isoformat()
                    update_student.save()

                    url = '/students/' + str(student_id) + '/#enrollment'
                    return HttpResponseRedirect(url)
                else:
                    print form.errors

            context = {
                'form': form,
                'student_id': student_id,
                'action': action,
                'data_public_schools': json.dumps(data_public_schools)
            }
            return render(request, 'mande/publicschoolhistoryform.html',
                          context)
        except IntakeSurvey.DoesNotExist as e:
            context = {'error_sms': e}
            return render(request, 'mande/errors/intakesurveynotexist.html',
                          context)
    else:
        raise PermissionDenied
Ejemplo n.º 28
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
Ejemplo n.º 29
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
Ejemplo n.º 30
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