Ejemplo n.º 1
0
    def get_context_data(self, **kwargs):
        context = super(AssessmentDetailView, self).get_context_data(**kwargs)
        context['allowed'] = self.test_func(self.request.user)
        if context['allowed']:
            context['is_this_lecturer'] = (self.request.user.profile == self.object.course.lecturer)
            context['is_this_assessor'] = (self.request.user.profile == self.object.assessor)
            
            assignments = Assignment.objects.filter(assessment=self.object)

            result = []
            weight = []

            if self.request.user.profile.is_student():
                for assignment in assignments:
                    if assignment.is_assessed_for_student(self.request.user.profile):
                                                 
                        #get all criteria associated with this assignment
                        criteria = Criterion.objects.filter(assignment=assignment)
                        #get all scorelevels associated with this assignment
                        scoreLevels = ScoreLevel.objects.filter(assignment=assignment).order_by('level')
                        #get the matching grades, for attributes see models/Criterion_Score
                        scoreToCriterion = Criterion_Score.objects.filter(criterion=criteria, score_level=scoreLevels, student=self.request.user.profile)

        
                        totalSum = 0.0
                        crits = defaultdict(list)
                        for level in scoreLevels:
                            criterionScore = Criterion_Score.objects.filter(score_level=level.score_level_id, student=self.request.user.profile).order_by('score_level')
                            level.sum = 0.0
                            for score in criterionScore:
                                crits[score.criterion_id].append(score.number)
                                level.sum += score.number
                            totalSum += level.sum
    
                
                        levelPercentages = []
                        for level in scoreLevels:
                            levelPercentages.append(level.sum /totalSum)
                            level.percentage = round(level.sum /totalSum, 2) * 100
                            
                        for criterion in criteria:
                            criterion.res = crits[criterion.criterion_id]
                            
                        assignment.result = round(Utils.profileToScore(self, levelPercentages, assignment.tolerance), 2)
                        result.append(round(Utils.profileToScore(self, levelPercentages, assignment.tolerance), 2))
                        weight.append(assignment.weight)
                        
                        if result.count('-') == 0:
                            context['grade'] = round(Utils.scoreToGrade(self, Utils.scoreToScore(self, result, weight, self.object.lenience)),2)
                        else:
                            context['grade'] = '-'
                        
                    else:
                        assignment.result = '-'
                        result.append('-') 
                        
        
        context['assignments'] = assignments           
        return context
Ejemplo n.º 2
0
    def get_context_data(self, **kwargs):
        context = super(ResultDetailView, self).get_context_data(**kwargs)
        #get the student from logindata
        student = self.request.user.profile
        #get the assignment he/she wants details for
        assignment = Assignment.objects.filter(assessment__course__student_course__student=student).get(assignment_id=self.kwargs.get('assignment_id'))
        #get all criteria associated with this assignment
        criteria = Criterion.objects.filter(assignment=assignment)
        #get all scorelevels associated with this assignment
        scoreLevels = ScoreLevel.objects.filter(assignment=assignment).order_by('level')
        #get the matching grades, for attributes see models/Criterion_Score
        scoreToCriterion = Criterion_Score.objects.filter(criterion=criteria, score_level=scoreLevels, student=student)

        if assignment.is_assessed_for_student(self.request.user.profile):
            totalSum = 0.0
            crits = defaultdict(list)
            for level in scoreLevels:
                criterionScore = Criterion_Score.objects.filter(score_level=level.score_level_id, student=student).order_by('score_level')
                level.sum = 0.0
                for score in criterionScore:
                    crits[score.criterion_id].append(score.number)
                    level.sum += score.number
                totalSum += level.sum
    
                
            levelPercentages = []
            for level in scoreLevels:
                levelPercentages.append(level.sum /totalSum)
                level.percentage = round(level.sum /totalSum, 2) * 100
                
            for criterion in criteria:
                criterion.res = crits[criterion.criterion_id]

        
            #make everything from above available in the template
            context['is_assessed'] = True
            context['assignment'] = assignment
            context['criteria'] = criteria
            context['crits'] = crits
            context['scoreLevels'] = scoreLevels
            context['result'] = round(Utils.profileToScore(self, levelPercentages, assignment.tolerance), 2)
        else:
            context['is_assessed'] = False
        return context