Пример #1
0
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super().__init__(*args, **kwargs)

        person = self.request.user.person

        group_qs = Group.get_groups_with_lessons()

        # Filter selectable groups by permissions
        if not check_global_permission(self.request.user, "alsijil.view_week"):
            # 1) All groups the user is allowed to see the week view by object permissions
            # 2) All groups the user is a member of an owner of
            group_qs = (group_qs.filter(pk__in=get_objects_for_user(
                self.request.user, "core.view_week_class_register_group",
                Group).values_list("pk", flat=True))).union(
                    group_qs.filter(Q(members=person) | Q(owners=person)))

        # Flatten query by filtering groups by pk
        self.fields["group"].queryset = Group.objects.filter(
            pk__in=list(group_qs.values_list("pk", flat=True)))

        teacher_qs = Person.objects.annotate(
            lessons_count=Count("lessons_as_teacher")).filter(
                lessons_count__gt=0)

        # Filter selectable teachers by permissions
        if not check_global_permission(self.request.user, "alsijil.view_week"):
            # If the user hasn't the global permission,
            # the user is only allowed to see his own person
            teacher_qs = teacher_qs.filter(pk=person.pk)

        self.fields["teacher"].queryset = teacher_qs
Пример #2
0
def test_get_classes_per_short_name():
    Group.objects.bulk_create(
        [Group(short_name=name, name=name) for name in CLASSES])

    classes_per_short_name = get_classes_per_short_name(None)

    for class_ in CLASSES:
        assert class_ in classes_per_short_name
        assert classes_per_short_name[class_].short_name == class_
Пример #3
0
def test_parse_class_range():
    Group.objects.bulk_create(
        [Group(short_name=name, name=name) for name in CLASSES])

    classes_per_short_name = get_classes_per_short_name(None)

    classes = parse_class_range(classes_per_short_name, CLASSES_PER_GRADE,
                                "5-Q2")
    assert sorted([x.short_name for x in classes]) == CLASSES

    classes = parse_class_range(classes_per_short_name, CLASSES_PER_GRADE,
                                "5a-d")
    assert sorted([x.short_name for x in classes]) == ["5a", "5b", "5c", "5d"]

@Person.method
def previous_lesson(self, lesson_period: "LessonPeriod",
                    day: date) -> Union["LessonPeriod", None]:
    """Get previous lesson of the person (either as participant or teacher) on the same day."""
    return self._adjacent_lesson(lesson_period, day, offset=-1)


def for_timetables(cls):
    """Return all announcements that should be shown in timetable views."""
    return cls.objects.filter(show_in_timetables=True)


Announcement.class_method(for_timetables)
Announcement.field(show_in_timetables=BooleanField(
    verbose_name=_("Show announcement in timetable views?")))

Group.foreign_key("subject", Subject, related_name="groups")

# Dynamically add extra permissions to Group and Person models in core
# Note: requires migrate afterwards
Group.add_permission(
    "view_group_timetable",
    _("Can view group timetable"),
)
Person.add_permission(
    "view_person_timetable",
    _("Can view person timetable"),
)
Пример #5
0
from django.utils.translation import gettext_lazy as _

from jsonstore import CharField

from aleksis.core.models import Group, Person

# Fields as import refs for LDAP objects
Group.field(
    ldap_dn=CharField(verbose_name=_("LDAP Distinguished Name"), blank=True))
Person.field(
    ldap_dn=CharField(verbose_name=_("LDAP Distinguished Name"), blank=True))
def get_owner_groups_with_lessons(self: Person):
    """Get all groups the person is an owner of and which have related lessons.

    Groups which have child groups with related lessons are also included.
    """
    return Group.get_groups_with_lessons().filter(owners=self).distinct()
        personal_note.groups_of_person.set(
            personal_note.person.member_of.all())

    return (PersonalNote.objects.filter(**q_attrs, person__in=persons).
            select_related(None).prefetch_related(None).select_related(
                "person", "excuse_type").prefetch_related("extra_marks"))


LessonPeriod.method(get_personal_notes)
Event.method(get_personal_notes)
ExtraLesson.method(get_personal_notes)

# Dynamically add extra permissions to Group and Person models in core
# Note: requires migrate afterwards
Group.add_permission(
    "view_week_class_register_group",
    _("Can view week overview of group class register"),
)
Group.add_permission(
    "view_lesson_class_register_group",
    _("Can view lesson overview of group class register"),
)
Group.add_permission("view_personalnote_group",
                     _("Can view all personal notes of a group"))
Group.add_permission("edit_personalnote_group",
                     _("Can edit all personal notes of a group"))
Group.add_permission("view_lessondocumentation_group",
                     _("Can view all lesson documentation of a group"))
Group.add_permission("edit_lessondocumentation_group",
                     _("Can edit all lesson documentation of a group"))
Group.add_permission("view_full_register_group",
                     _("Can view full register of a group"))