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
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