示例#1
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