Пример #1
0
def sheet_detail(request, slug):
    sheet = Sheet.objects.get(slug=slug)
    assignments = sheet.assignment_set.all()
    child_columns_count = dict()
    for assignment in assignments:
        child_columns_count[assignment] = 0
        for task in assignment.task_set.all():
            child_columns_count[assignment] += task.problem_set.count() or 1
    if request.user.has_perm('sheets.change_sheet', sheet):
        users = get_users_with_perms(sheet)
        teachers = sorted([user for user in users if user.has_perm('sheets.change_sheet', sheet)],
                          key=lambda user: user.last_name)
        students = SheetAPI.get_students_for_sheet(sheet)
        MarkAPI.unlock_marks(request.user, sheet)

        return render(request, 'sheet_detail.html', {
            'sheet': sheet,
            'teachers': teachers,
            'students': students,
            'assignments': assignments,
            'child_columns_count': child_columns_count
        })

    raw_marks = SheetAPI.get_marks_for_user(request.user, sheet)
    marks = []
    for ind, mark in enumerate(raw_marks):
        mark_dict = dict(mark=raw_marks[ind].mark, comment=raw_marks[ind].comment)
        if type(raw_marks[ind]) is BoolMark:
            mark_dict['grade_system'] = BaseAssignment.BOOL_MARK
        elif type(raw_marks[ind]) is ZeroToFiveMark:
            mark_dict['grade_system'] = BaseAssignment.ZERO_FIVE
        elif type(raw_marks[ind]) is ZeroToTenMark:
            mark_dict['grade_system'] = BaseAssignment.ZERO_TEN
        else:
            mark_dict['grade_system'] = BaseAssignment.ZERO_HUNDRED
        marks.append(mark_dict)
    overall_mark = MarkAPI.map_overall_mark(sheet.overall_mark(request.user))
    return render(request, 'sheet_detail_student.html', {
        'sheet': sheet,
        'assignments': assignments,
        'child_columns_count': child_columns_count,
        'marks': marks,
        'overall_mark': overall_mark
    })