コード例 #1
0
ファイル: views.py プロジェクト: anton-bryukhov/gradebook
def add_user_to_sheet(request, slug):
    sheet = get_object_or_404(Sheet, slug=slug)
    form_by_username = AddUserForm(request.POST or None)
    groups = UserAPI.get_groups_and_users_dict().keys()

    by_username_valid = form_by_username.is_valid()

    if by_username_valid:
        users = list()
        username = form_by_username.cleaned_data['username']
        if username:
            users.append(get_object_or_404(User, username=username))
        for group in groups:
            selected_users_pk = form_by_username.cleaned_data[group]
            for pk in selected_users_pk:
                users.append(get_object_or_404(User, pk=pk))

        for user in users:
            if user != request.user:
                remove_perm('sheets.change_sheet', user, sheet)
            assign_perm('sheets.view_sheet', user, sheet)
            if form_by_username.cleaned_data['role'] == 'T':
                assign_perm('sheets.change_sheet', user, sheet)
            else:
                MarkAPI.create_marks_for_student(sheet, user)

        return redirect('sheet_detail', slug=slug)

    return render(request, 'add_user_to_sheet.html', {
        'form_by_username': form_by_username,
        'sheet': sheet
    })
コード例 #2
0
ファイル: views.py プロジェクト: anton-bryukhov/gradebook
def get_marks(request, slug):
    sheet = get_object_or_404(Sheet, slug=slug)
    sheet_marks = SheetAPI.get_marks_for_sheet(sheet)
    mark_sets_json_dict = list()
    for student, students_marks in sheet_marks.items():
        marks_json_dict = list()
        for mark in students_marks:
            mark_json = mark.as_json_dict
            versions = reversion.get_for_object(mark)[:2]
            if versions.count() >= 2:
                first_revision = versions[0].revision
                second_revision = versions[1].revision
                if (
                    second_revision.user == request.user
                    and first_revision.user != second_revision.user
                    and (first_revision.date_created - second_revision.date_created).seconds < 10
                ):
                    mark_json["warning"] = True
            marks_json_dict.append(mark_json)
            if mark.user_with_lock:
                now = timezone.now()
                time_delta = now - mark.user_with_lock.profile.last_activity
                if time_delta.total_seconds() > 15:
                    mark.set_user_with_lock(None)
        mark_sets_json_dict.append(dict(student=UserAPI.as_json_dict(student, sheet), marks=marks_json_dict))
    mark_sets_json_dict = sorted(mark_sets_json_dict, key=lambda item: item["student"]["fullName"].split(" ")[1])
    return JsonResponse(mark_sets_json_dict, safe=False)
コード例 #3
0
ファイル: views.py プロジェクト: anton-bryukhov/gradebook
def get_attendance_records(request, slug):
    sheet = get_object_or_404(Sheet, slug=slug)
    seminars = sheet.seminar_set.order_by('date')
    students = sorted(SheetAPI.get_students_for_sheet(sheet), key=operator.attrgetter('last_name'))
    attendance_records = []
    for student in students:
        attendance_records_json_dict = dict(student=UserAPI.as_json_dict(student), attendanceRecords=list())
        for seminar in seminars:
            attendance_records_json_dict['attendanceRecords'].append(
                seminar.attendancerecord_set.get_or_create(student=student)[0].as_json_dict)
        attendance_records.append(attendance_records_json_dict)

    return JsonResponse(attendance_records, safe=False)
コード例 #4
0
ファイル: models.py プロジェクト: anton-bryukhov/gradebook
 def as_json_dict(self):
     json_dict = dict(pk=self.pk, mark=self.mark,
                      userWithLock=self.user_with_lock.username if self.user_with_lock else '', comment=self.comment,
                      maxPoints=self.max_points, student=UserAPI.as_json_dict(self.student))
     if self.problem:
         json_dict['gradeSystem'] = self.problem.grade_system
         json_dict['assignment'] = self.problem.name
     elif self.task:
         json_dict['gradeSystem'] = self.task.grade_system
         json_dict['assignment'] = self.task.name
     elif self.assignment:
         json_dict['gradeSystem'] = self.assignment.grade_system
         json_dict['assignment'] = self.assignment.name
     return json_dict
コード例 #5
0
ファイル: views.py プロジェクト: anton-bryukhov/gradebook
def get_students(request, slug):
    sheet = get_object_or_404(Sheet, slug=slug)

    students = SheetAPI.get_students_for_sheet(sheet)
    return JsonResponse([UserAPI.as_json_dict(student, sheet) for student in students], safe=False)
コード例 #6
0
ファイル: forms.py プロジェクト: anton-bryukhov/gradebook
 def __init__(self, *args, **kwargs):
     super(AddUserForm, self).__init__(*args, **kwargs)
     groups_and_user = UserAPI.get_groups_and_users_dict()
     for group, users in groups_and_user.items():
         self.fields[group] = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                                        choices=[(user.pk, user) for user in users], required=False)