Skip to content

Commit

Permalink
Add migration and explanation
Browse files Browse the repository at this point in the history
  • Loading branch information
DeD1rk committed Dec 12, 2023
1 parent 9eaccbe commit 9125e68
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 4 deletions.
12 changes: 8 additions & 4 deletions website/members/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _

from members.models import Member
from thabloid.models.thabloid_user import ThabloidUser

from .models import Profile
Expand Down Expand Up @@ -55,13 +56,16 @@ def __init__(self, *args, **kwargs):
].hidden_widget()

if (
not kwargs["instance"].user.has_been_member()
not Member.objects.get(pk=kwargs["instance"].user_id).has_been_member()
and not kwargs["instance"].receive_oldmembers
):
self.fields["receive_oldmembers"].disabled = True
# TODO: Explain why.

# TODO: migration to set False for benefactors created after 2016-2017.
self.fields["receive_oldmembers"].help_text = (
"If you are a past member, receive emails about Thalia events aimed at alumni. "
"You cannot enable this option, as we don't have any records of you having been a member "
"(a long time ago, we didn't keep track of this yet). Contact "
"<a href='mailto:[email protected]'>[email protected]</a> if you want to receive alumni emails."
)

self.render_app_specific_profile_form_fields()

Expand Down
50 changes: 50 additions & 0 deletions website/members/migrations/0048_auto_20231121_2025.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Generated by Django 4.2.7 on 2023-11-21 19:25

from django.db import migrations
from django.db.models import Exists, OuterRef


def deregister_recent_benefactors_from_oldmembers_mailinglist(apps, schema_editor):
"""Deregister all benefactors since 2017 from the oldmembers mailinglist.
We've changed the oldmembers list to include everyone with the 'receive_oldmembers'
preference set, regardless of whether they have been a member in the past. Newly made
benefactors are automatically excluded, and any existing members or benefactors are
included. This is because for many people, we don't have a complete history of their
memberships.
To prevent recently created benefactors (of which we do have a complete history) from
being included in the oldmembers list, we need to set their 'receive_oldmembers' False.
"""
Profile = apps.get_model("members", "Profile")
Member = apps.get_model("members", "Member")
Membership = apps.get_model("members", "Membership")

# Get people made after the initial migration (+- 2016-12-06) who have only been a benefactor.
benefactors = (
Member.objects.filter(date_joined__gte="2017-01-01")
.filter(
Exists(Membership.objects.filter(user=OuterRef("pk"), type="benefactor"))
)
.exclude(
Exists(
Membership.objects.filter(user=OuterRef("pk"), type="member"),
)
)
)

# Set 'receive_oldmembers' to False for all benefactors since 2017
Profile.objects.filter(user__in=benefactors).update(receive_oldmembers=False)


class Migration(migrations.Migration):
dependencies = [
("members", "0048_alter_profile_photo"),
]

operations = [
migrations.RunPython(
deregister_recent_benefactors_from_oldmembers_mailinglist,
migrations.RunPython.noop,
)
]

0 comments on commit 9125e68

Please sign in to comment.