From e1a7b1269795d27ede72372f369f46afb17c871e Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Tue, 17 Nov 2020 20:01:29 +0100 Subject: [PATCH] Write data check NoGroupsOfPersonsSetInPersonalNotesDataCheck --- aleksis/apps/alsijil/data_checks.py | 45 ++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/aleksis/apps/alsijil/data_checks.py b/aleksis/apps/alsijil/data_checks.py index 6ec93f80e..b4d115d9c 100644 --- a/aleksis/apps/alsijil/data_checks.py +++ b/aleksis/apps/alsijil/data_checks.py @@ -6,7 +6,12 @@ from django.utils.translation import gettext as _ from calendarweek import CalendarWeek -from aleksis.core.data_checks import DATA_CHECK_REGISTRY, DataCheck, IgnoreSolveOption, SolveOption +from aleksis.core.data_checks import ( + DATA_CHECK_REGISTRY, + DataCheck, + IgnoreSolveOption, + SolveOption, +) class DeleteRelatedObjectSolveOption(SolveOption): @@ -19,6 +24,17 @@ class DeleteRelatedObjectSolveOption(SolveOption): check_result.delete() +class SetGroupsOfPersonWithCurrentGroupsOfPersonSolveOption(SolveOption): + name = "set_groups_of_person" + verbose_name = _("Set current groups") + + @classmethod + def solve(cls, check_result: "DataCheckResult"): + person = check_result.related_object.person + check_result.related_object.groups_of_person.set(person.member_of.all()) + check_result.delete() + + @DATA_CHECK_REGISTRY.register class NoPersonalNotesInCancelledLessonsDataCheck(DataCheck): name = "no_personal_notes_in_cancelled_lessons" @@ -50,3 +66,30 @@ class NoPersonalNotesInCancelledLessonsDataCheck(DataCheck): result = DataCheckResult.objects.get_or_create( check=cls.name, content_type=ct, object_id=note.id ) + + +@DATA_CHECK_REGISTRY.register +class NoGroupsOfPersonsSetInPersonalNotesDataCheck(DataCheck): + name = "no_groups_of_persons_set_in_personal_notes" + verbose_name = _("Ensure that 'groups_of_person' is set for every personal note") + problem_name = _("The personal note has no group in 'groups_of_person'.") + solve_options = { + SetGroupsOfPersonWithCurrentGroupsOfPersonSolveOption.name: SetGroupsOfPersonWithCurrentGroupsOfPersonSolveOption, + DeleteRelatedObjectSolveOption.name: DeleteRelatedObjectSolveOption, + IgnoreSolveOption.name: IgnoreSolveOption, + } + + @classmethod + def check_data(cls): + from aleksis.core.models import DataCheckResult + from .models import PersonalNote + + ct = ContentType.objects.get_for_model(PersonalNote) + + personal_notes = PersonalNote.objects.filter(groups_of_person__isnull=True) + + for note in personal_notes: + logging.info(f"Check personal note {note}") + result = DataCheckResult.objects.get_or_create( + check=cls.name, content_type=ct, object_id=note.id + ) -- GitLab