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
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_
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"), )
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"))