Skip to content
Snippets Groups Projects
Commit 03c4680b authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch 'prepare-release-2.0rc5' into 'release/2.0'

Prepare release 2.0rc5

See merge request !223
parents d57cb250 df5dec19
No related branches found
No related tags found
1 merge request!223Prepare release 2.0rc5
Pipeline #26931 passed
...@@ -56,3 +56,6 @@ docs/_build/ ...@@ -56,3 +56,6 @@ docs/_build/
# Test # Test
.tox/ .tox/
.coverage
.mypy_cache/
htmlcov/
include: include:
- project: "AlekSIS/official/AlekSIS" - project: "AlekSIS/official/AlekSIS"
file: /ci/general.yml file: /ci/general.yml
# - project: "AlekSIS/official/AlekSIS" - project: "AlekSIS/official/AlekSIS"
# file: /ci/test/test.yml file: /ci/test/test.yml
- project: "AlekSIS/official/AlekSIS" - project: "AlekSIS/official/AlekSIS"
file: /ci/test/lint.yml file: /ci/test/lint.yml
- project: "AlekSIS/official/AlekSIS" - project: "AlekSIS/official/AlekSIS"
......
...@@ -6,6 +6,15 @@ All notable changes to this project will be documented in this file. ...@@ -6,6 +6,15 @@ All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog`_, The format is based on `Keep a Changelog`_,
and this project adheres to `Semantic Versioning`_. and this project adheres to `Semantic Versioning`_.
`2.0rc5`_ - 2021-08-12
----------------------
Fixed
~~~~~
* The _Delete personal note_ action didn't work due to wrong usage of ``bulk_update``.
* Groups and persons were shown multiple times in some forms due to filtering by permissions.
`2.0rc4`_ - 2021-08-01 `2.0rc4`_ - 2021-08-01
---------------------- ----------------------
...@@ -171,3 +180,4 @@ Fixed ...@@ -171,3 +180,4 @@ Fixed
.. _2.0rc2: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc2 .. _2.0rc2: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc2
.. _2.0rc3: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc3 .. _2.0rc3: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc3
.. _2.0rc4: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc4 .. _2.0rc4: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc4
.. _2.0rc5: https://edugit.org/AlekSIS/Official/AlekSIS-App-Alsijil/-/tags/2.0rc5
...@@ -40,7 +40,9 @@ def delete_personal_note(modeladmin, request, queryset): ...@@ -40,7 +40,9 @@ def delete_personal_note(modeladmin, request, queryset):
for personal_note in queryset: for personal_note in queryset:
personal_note.reset_values() personal_note.reset_values()
notes.append(personal_note) notes.append(personal_note)
PersonalNote.objects.bulk_update(notes) PersonalNote.objects.bulk_update(
notes, fields=["absent", "excused", "late", "excuse_type", "remarks"]
)
delete_personal_note.short_description = _("Delete") delete_personal_note.short_description = _("Delete")
......
...@@ -256,11 +256,13 @@ class AssignGroupRoleForm(forms.ModelForm): ...@@ -256,11 +256,13 @@ class AssignGroupRoleForm(forms.ModelForm):
) )
else: else:
persons = persons.filter(member_of__owners=self.request.user.person) persons = persons.filter(member_of__owners=self.request.user.person)
self.fields["person"].queryset = persons self.fields["person"].queryset = persons.distinct()
if "groups" not in initial: if "groups" not in initial:
groups = Group.objects.for_current_school_term_or_all().filter( groups = (
owners=self.request.user.person Group.objects.for_current_school_term_or_all()
.filter(owners=self.request.user.person)
.distinct()
) )
self.fields["groups"].queryset = groups self.fields["groups"].queryset = groups
...@@ -332,7 +334,7 @@ class FilterRegisterObjectForm(forms.Form): ...@@ -332,7 +334,7 @@ class FilterRegisterObjectForm(forms.Form):
| Q(lessons__lesson_periods__substitutions__teachers=person) | Q(lessons__lesson_periods__substitutions__teachers=person)
| Q(events__teachers=person) | Q(events__teachers=person)
| Q(extra_lessons__teachers=person) | Q(extra_lessons__teachers=person)
) ).distinct()
elif not for_person: elif not for_person:
groups = Group.objects.all() groups = Group.objects.all()
self.fields["group"].queryset = groups self.fields["group"].queryset = groups
......
from datetime import date, time
import pytest
from aleksis.apps.alsijil.actions import (
delete_personal_note,
mark_as_excuse_type_generator,
mark_as_excused,
mark_as_unexcused,
)
from aleksis.apps.alsijil.models import ExcuseType, PersonalNote
from aleksis.apps.chronos.models import Event, TimePeriod
from aleksis.core.models import Person
pytestmark = pytest.mark.django_db
def _generate_event(day: date):
period_from = TimePeriod.objects.create(
weekday=0, period=1, time_start=time(10, 00), time_end=time(11, 00)
)
period_to = TimePeriod.objects.create(
weekday=0, period=2, time_start=time(11, 00), time_end=time(12, 00)
)
event = Event.objects.create(
date_start=day, date_end=day, period_from=period_from, period_to=period_to
)
return event
def _prepare_notes():
"""Create some minimal personal notes."""
person, __ = Person.objects.get_or_create(first_name="Jane", last_name="Doe")
excuse_type, __ = ExcuseType.objects.get_or_create(short_name="Foo", name="Fooooooooooooo")
notes = [
PersonalNote(
person=person,
event=_generate_event(date(2021, 10, 1)),
absent=True,
remarks="This is baz.",
),
PersonalNote(person=person, event=_generate_event(date(2021, 11, 1)), absent=True),
PersonalNote(
person=person, event=_generate_event(date(2022, 10, 1)), absent=True, excused=True
),
PersonalNote(
person=person,
event=_generate_event(date(2021, 3, 1)),
absent=True,
excused=True,
excuse_type=excuse_type,
),
PersonalNote(person=person, event=_generate_event(date(2021, 10, 4)), late=10),
PersonalNote(
person=person, event=_generate_event(date(2032, 10, 11)), remarks="Good work!"
),
PersonalNote(person=person, event=_generate_event(date(2032, 10, 11))),
]
PersonalNote.objects.bulk_create(notes)
return notes
def test_mark_as_excused_action():
notes = _prepare_notes()
assert PersonalNote.objects.filter(excused=True).count() == 2
mark_as_excused(None, None, PersonalNote.objects.all())
assert PersonalNote.objects.filter(excused=True).count() == 4
assert PersonalNote.objects.filter(excuse_type=None, excused=True).count() == 4
def test_mark_as_unexcused_action():
notes = _prepare_notes()
assert PersonalNote.objects.filter(excused=True).count() == 2
mark_as_unexcused(None, None, PersonalNote.objects.all())
assert PersonalNote.objects.filter(excused=True).count() == 0
assert PersonalNote.objects.filter(excuse_type=None, excused=True).count() == 0
def test_mark_as_excuse_type_generator_action():
excuse_type, __ = ExcuseType.objects.get_or_create(short_name="Foo", name="Fooooooooooooo")
notes = _prepare_notes()
assert PersonalNote.objects.filter(excused=True).count() == 2
assert PersonalNote.objects.filter(excused=True, excuse_type=excuse_type).count() == 1
mark_as_foo = mark_as_excuse_type_generator(excuse_type=excuse_type)
mark_as_foo(None, None, PersonalNote.objects.all())
assert PersonalNote.objects.filter(excused=True).count() == 4
assert PersonalNote.objects.filter(excuse_type=excuse_type, excused=True).count() == 4
def test_delete_personal_note_action():
notes = _prepare_notes()
assert PersonalNote.objects.not_empty().count() == 6
delete_personal_note(None, None, PersonalNote.objects.all())
assert PersonalNote.objects.not_empty().count() == 0
This diff is collapsed.
[tool.poetry] [tool.poetry]
name = "AlekSIS-App-Alsijil" name = "AlekSIS-App-Alsijil"
version = "2.0rc4" version = "2.0rc5"
packages = [ packages = [
{ include = "aleksis" } { include = "aleksis" }
] ]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment