data_checks.py 1.19 KiB
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)