from django.utils.translation import gettext_lazy as _ from aleksis.core.data_checks import DataCheck, IgnoreSolveOption, SolveOption class SyncEventMembers(SolveOption): name = "sync_event_members" verbose_name = _("Sync members") @classmethod def solve(cls, check_result: "DataCheckResult"): event = check_result.related_object event.sync_group_members() check_result.delete() class EventMembersSyncDataCheck(DataCheck): name = "event_members_sync" verbose_name = _("Ensure that all registered persons are member of the linked group") problem_name = _("Event members are out of sync with registrations!") solve_options = { IgnoreSolveOption.name: IgnoreSolveOption, SyncEventMembers.name: SyncEventMembers, } @classmethod def check_data(cls): from .models import Event async_events = [] for event in Event.objects.all(): if set(event.linked_group.members.values_list("id", flat=True)) != set(event.registrations.filter(retracted=False).values_list("person", flat=True)): async_events.append(event) for event in async_events: cls.register_result(event)