AlekSISĀ® issueshttps://edugit.org/groups/AlekSIS/-/issues2024-02-23T15:14:04Zhttps://edugit.org/AlekSIS/onboarding/AlekSIS-App-Cursus/-/issues/15Improve design of school structure2024-02-23T15:14:04ZJonathan Wethgit@jonathanweth.deImprove design of school structure- [ ] Cards in cards in a card should be fixed- [ ] Cards in cards in a card should be fixedhttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/975Order-less search in CRUD list2024-02-23T09:02:25ZJonathan Wethgit@jonathanweth.deOrder-less search in CRUD listhttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/974Allow selecting rooms as locations for personal events2024-02-23T14:58:29ZJonathan Wethgit@jonathanweth.deAllow selecting rooms as locations for personal eventshttps://edugit.org/AlekSIS/onboarding/AlekSIS-App-Lesrooster/-/issues/41Show loading animation betwenn changing groups in timetable planning2024-02-22T12:58:54ZJonathan Wethgit@jonathanweth.deShow loading animation betwenn changing groups in timetable planninghttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/971Explain PositiveSmallIntegerField2024-02-19T17:26:16ZpermcuExplain PositiveSmallIntegerFieldSee https://edugit.org/AlekSIS/official/AlekSIS-Core/-/merge_requests/1410#note_87313
Could you please explain why the number has to be this way.See https://edugit.org/AlekSIS/official/AlekSIS-Core/-/merge_requests/1410#note_87313
Could you please explain why the number has to be this way.JulianJulianhttps://edugit.org/AlekSIS/aleksis.edugit.io/-/issues/35Add HNS and FSS to pilot schools2024-03-17T12:12:35ZJonathan Wethgit@jonathanweth.deAdd HNS and FSS to pilot schoolshttps://edugit.org/AlekSIS/aleksis.edugit.io/-/issues/34Update feature list2024-02-06T19:27:27ZJonathan Wethgit@jonathanweth.deUpdate feature listhttps://edugit.org/AlekSIS/aleksis.edugit.io/-/issues/33Translate GUUG blog post2024-02-06T19:27:16ZJonathan Wethgit@jonathanweth.deTranslate GUUG blog posthttps://edugit.org/AlekSIS/aleksis.edugit.io/-/issues/32Fix news page2024-02-06T19:26:57ZJonathan Wethgit@jonathanweth.deFix news page(shown two times)(shown two times)https://edugit.org/AlekSIS/aleksis.edugit.io/-/issues/30Provide fancy screenshots2024-02-04T15:24:20ZJonathan Wethgit@jonathanweth.deProvide fancy screenshotsfeedback from FOSDEM 2024feedback from FOSDEM 2024https://edugit.org/AlekSIS/aleksis.edugit.io/-/issues/29Show aleksis-dev e-mail adress2024-02-02T16:23:35ZJonathan Wethgit@jonathanweth.deShow aleksis-dev e-mail adressaleksis-dev@lists.teckids.orgaleksis-dev@lists.teckids.orghttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/969Broken or not available favicons shouldn't be stopping the system from starting2024-01-31T20:53:28ZJonathan Wethgit@jonathanweth.deBroken or not available favicons shouldn't be stopping the system from starting- any storage exceptions
- any io exceptions- any storage exceptions
- any io exceptionshttps://edugit.org/AlekSIS/official/AlekSIS-App-Alsijil/-/issues/272Adapt to refactored CRUD lists2024-01-31T19:40:18ZHangzhi Yuhangzhi@protonmail.comAdapt to refactored CRUD listsmagicfelixmagicfelixhttps://edugit.org/AlekSIS/onboarding/AlekSIS-App-Kolego/-/issues/5Adapt to refactored CRUD lists2024-02-01T20:07:02ZHangzhi Yuhangzhi@protonmail.comAdapt to refactored CRUD listsmagicfelixmagicfelixhttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/968duplicate key value violates unique constraint "core_personpreferencemodel_se...2024-02-20T17:00:50Zmagicfelixduplicate key value violates unique constraint "core_personpreferencemodel_section_name_5beac7ca_uniq"Steps to reproduce (tested with Core 4.0.0.dev3)
1. Create at least two persons and enter dates of birth
2. Try to view calender with birthdays enabled
Either I don't understand how `PersonPreferenceModel` is supposed to work, or the u...Steps to reproduce (tested with Core 4.0.0.dev3)
1. Create at least two persons and enter dates of birth
2. Try to view calender with birthdays enabled
Either I don't understand how `PersonPreferenceModel` is supposed to work, or the unique contstraint (section, name) is just wrong.
AFAIU the constraint should be (section, name, instance).
Error message:
```
2024-01-29 13:40:30,109 ERROR django.request[14341]: Internal Server Error: /graphql/
Traceback (most recent call last):
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/dynamic_preferences/managers.py", line 155, in get_db_pref
pref = self.queryset.get(section=section, name=name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/query.py", line 637, in get
raise self.model.DoesNotExist(
aleksis.core.models.PersonPreferenceModel.DoesNotExist: PersonPreferenceModel matching query does not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/query.py", line 916, in get_or_create
return self.get(**kwargs), False
^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/query.py", line 637, in get
raise self.model.DoesNotExist(
aleksis.core.models.PersonPreferenceModel.DoesNotExist: PersonPreferenceModel matching query does not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django_prometheus/db/common.py", line 69, in execute
return super().execute(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "core_personpreferencemodel_section_name_5beac7ca_uniq"
DETAIL: Key (section, name)=(notification, addressing_name_format) already exists.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 56, in wrapper_view
return view_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/views/generic/base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/utils/decorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/utils/decorators.py", line 134, in _wrapper_view
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphene_django/views.py", line 178, in dispatch
responses = [self.get_response(request, entry) for entry in data]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphene_django/views.py", line 178, in <listcomp>
responses = [self.get_response(request, entry) for entry in data]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphene_django/views.py", line 205, in get_response
execution_result = self.execute_graphql_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/views.py", line 1466, in execute_graphql_request
raise error
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphql/execution/execute.py", line 540, in execute_field
completed = self.complete_value(
^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphql/execution/execute.py", line 607, in complete_value
raise result
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphene_django/debug/middleware.py", line 65, in resolve
result = next(root, info, **args)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/schema/calendar.py", line 71, in resolve_events
feed = root.create_feed(info.context, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/mixins.py", line 654, in create_feed
cls.create_event(reference_object, feed, request=request, params=params)
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/mixins.py", line 617, in create_event
field_value = cls.get_event_field_value(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/mixins.py", line 695, in get_event_field_value
return getattr(cls, method_name)(reference_object, request=request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/models.py", line 1597, in value_title
return _("{}'s birthday").format(reference_object.addressing_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/src/aleksis/apps/official/AlekSIS-Core/aleksis/core/models.py", line 282, in addressing_name
if self.preferences["notification__addressing_name_format"] == "last_first":
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/dynamic_preferences/managers.py", line 34, in __getitem__
return self.get(key)
^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/dynamic_preferences/managers.py", line 149, in get
db_pref = self.get_db_pref(section=section, name=name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/dynamic_preferences/managers.py", line 158, in get_db_pref
pref = self.create_db_pref(
^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/dynamic_preferences/managers.py", line 196, in create_db_pref
db_pref, created = self.model.objects.get_or_create(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/query.py", line 923, in get_or_create
return self.create(**params), True
^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/query.py", line 658, in create
obj.save(force_insert=True, using=self.db)
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/dynamic_preferences/models.py", line 77, in save
super(BasePreferenceModel, self).save(**kwargs)
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/base.py", line 814, in save
self.save_base(
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/base.py", line 877, in save_base
updated = self._save_table(
^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/base.py", line 1020, in _save_table
results = self._do_insert(
^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/base.py", line 1061, in _do_insert
return manager._insert(
^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/query.py", line 1805, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/cachalot/monkey_patch.py", line 37, in inner
return original(compiler, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/cachalot/monkey_patch.py", line 113, in inner
return original(write_compiler, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql
cursor.execute(sql, params)
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphene_django/debug/sql/tracking.py", line 153, in execute
return self._record(self.cursor.execute, sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/graphene_django/debug/sql/tracking.py", line 99, in _record
return method(sql, params)
^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 102, in execute
return super().execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/cachalot/monkey_patch.py", line 137, in inner
return original(cursor, sql, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
with self.db.wrap_database_errors:
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/felix/.cache/pypoetry/virtualenvs/aleksis-core-VLqlbO2E-py3.11/lib/python3.11/site-packages/django_prometheus/db/common.py", line 69, in execute
return super().execute(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
graphql.error.graphql_error.GraphQLError: duplicate key value violates unique constraint "core_personpreferencemodel_section_name_5beac7ca_uniq"
DETAIL: Key (section, name)=(notification, addressing_name_format) already exists.
GraphQL request:10:7
9 | activated
10 | events(start: $start, end: $end, params: $params) {
| ^
11 | name
```Jonathan Wethgit@jonathanweth.deJonathan Wethgit@jonathanweth.dehttps://edugit.org/AlekSIS/official/AlekSIS-App-Chronos/-/issues/229[New data model] PDF export for "regular" timetable2024-02-29T17:50:50ZJonathan Wethgit@jonathanweth.de[New data model] PDF export for "regular" timetablePoint in time: When is regular?Point in time: When is regular?[NLnet #1] Fix existing bugs with new timetablehttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/965Entering data in one field should allow for updating other fields in DialogOb...2024-01-18T17:47:37ZpermcuEntering data in one field should allow for updating other fields in DialogObjectForm (and maybe InlineCRUDList)We need to find a possibility to update other fields based on data from one field. E.g. for values that depend on each other.
This is tricky because while a field can see the whole item being edited changes from the fields are not propa...We need to find a possibility to update other fields based on data from one field. E.g. for values that depend on each other.
This is tricky because while a field can see the whole item being edited changes from the fields are not propagated to the item.
I do not know a solution how a field can read or manipulate the value of another field.
This is needed in the DialogObjectForm. To set suitable defaults based on the user input so far for example.
It could be also useful in the InlineCRUDList. But here the fields are already filled out.
This issue was noted while updating the HolidayInlineList.vue for the CRUD update.
See the following discussion from !1325 (https://edugit.org/AlekSIS/official/AlekSIS-Core/-/merge_requests/1325#note_86287)https://edugit.org/AlekSIS/official/AlekSIS-App-Alsijil/-/issues/271Auto-create attendance status2024-01-10T21:28:58ZHangzhi Yuhangzhi@protonmail.comAuto-create attendance statusAttendance status should be automatically created on automatic documentation creation and when new persons are added to a documentationAttendance status should be automatically created on automatic documentation creation and when new persons are added to a documentation[NLnet #3] Implement support for absenceshttps://edugit.org/AlekSIS/official/AlekSIS-App-Alsijil/-/issues/270Add infinite scrolling to course book table2024-01-10T20:31:53ZHangzhi Yuhangzhi@protonmail.comAdd infinite scrolling to course book table[NLnet #3] Implement new course bookhttps://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/963Make GraphQL mutations raise meaningful errors2024-02-20T17:22:22ZHangzhi Yuhangzhi@protonmail.comMake GraphQL mutations raise meaningful errorsevaluate the use of `full_clean` (https://docs.djangoproject.com/en/5.0/ref/models/instances/#validating-objects) in combination with `graphene_object_cud`evaluate the use of `full_clean` (https://docs.djangoproject.com/en/5.0/ref/models/instances/#validating-objects) in combination with `graphene_object_cud`Jonathan Wethgit@jonathanweth.deJonathan Wethgit@jonathanweth.de