Coverage for website/activemembers/services.py: 22.22%
21 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.db.models import Count, Q
2from django.utils import timezone
4from activemembers.models import Committee
5from members.models.member import Member
8def generate_statistics() -> dict:
9 """Generate statistics about number of members in each committee."""
10 now = timezone.now()
11 committees = Committee.active_objects.annotate(
12 member_count=(
13 Count(
14 "members",
15 filter=(
16 Q(membergroupmembership__until=None)
17 | Q(
18 membergroupmembership__since__lte=now,
19 membergroupmembership__until__gte=now,
20 )
21 ),
22 )
23 )
24 )
26 data = {
27 "labels": [],
28 "datasets": [
29 {"data": []},
30 ],
31 }
32 for committee in committees:
33 data["labels"].append(committee.name)
34 data["datasets"][0]["data"].append(committee.member_count)
36 return data
39def revoke_staff_permission_for_users_in_no_commitee():
40 members = Member.objects.filter(is_staff=True)
41 revoked = []
42 for member in members:
43 if not member.get_member_groups().exists() and not member.is_superuser:
44 revoked.append(member.id)
45 member.is_staff = False
46 member.save()
47 return Member.objects.filter(pk__in=revoked)