Source code for registrations.forms
"""The forms defined by the registrations package"""
from django import forms
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django.forms import TypedChoiceField
from django.urls import reverse_lazy
from django.utils import timezone
from django.utils.safestring import mark_safe
from django.utils.text import capfirst
from django.utils.translation import gettext_lazy as _
from members.models import Membership
from registrations import services
from .models import Registration, Renewal, Reference
[docs]class BaseRegistrationForm(forms.ModelForm):
"""Base form for membership registrations"""
birthday = forms.DateField(
widget=forms.widgets.SelectDateWidget(
years=[
year
for year in range(timezone.now().year - 50, timezone.now().year - 10)
]
),
label=capfirst(_("birthday")),
)
privacy_policy = forms.BooleanField(required=True,)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["privacy_policy"].label = mark_safe(
_('I accept the <a href="{}">privacy policy</a>.').format(
reverse_lazy("singlepages:privacy-policy")
)
)
[docs]class MemberRegistrationForm(BaseRegistrationForm):
"""Form for member registrations"""
this_year = timezone.now().year
years = reversed(
[(x, "{} - {}".format(x, x + 1)) for x in range(this_year - 20, this_year + 1)]
)
starting_year = TypedChoiceField(
choices=years,
coerce=int,
empty_value=this_year,
required=False,
help_text=_("What lecture year did you start studying at Radboud University?"),
)
[docs] class Meta:
model = Registration
fields = "__all__"
exclude = [
"created_at",
"updated_at",
"status",
"username",
"payment",
"membership",
]
[docs]class BenefactorRegistrationForm(BaseRegistrationForm):
"""Form for benefactor registrations"""
icis_employee = forms.BooleanField(
required=False, label=_("I am an employee of iCIS")
)
[docs] class Meta:
model = Registration
fields = "__all__"
exclude = [
"created_at",
"updated_at",
"status",
"username",
"starting_year",
"programme",
"payment",
"membership",
]
[docs]class RenewalForm(forms.ModelForm):
"""Form for membership renewals"""
privacy_policy = forms.BooleanField(required=True,)
icis_employee = forms.BooleanField(
required=False, label=_("I am an employee of iCIS")
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["privacy_policy"].label = mark_safe(
_('I accept the <a href="{}">privacy policy</a>.').format(
reverse_lazy("singlepages:privacy-policy")
)
)
[docs] class Meta:
model = Renewal
fields = "__all__"
exclude = ["created_at", "updated_at", "status", "payment", "membership"]
[docs]class ReferenceForm(forms.ModelForm):
[docs] def clean(self):
super().clean()
membership = self.cleaned_data["member"].current_membership
if membership and membership.type == Membership.BENEFACTOR:
raise ValidationError(_("Benefactors cannot give references."))
membership = self.cleaned_data["member"].latest_membership
if (
membership
and membership.until
and membership.until < services.calculate_membership_since()
):
raise ValidationError(
_(
"It's not possible to give references for "
"memberships that start after your own "
"membership's end."
)
)
[docs] class Meta:
model = Reference
fields = "__all__"
error_messages = {
NON_FIELD_ERRORS: {
"unique_together": _(
"You've already given a reference for this person."
),
}
}