Files @ cf359b6a6485
Branch filter:

Location: website/www/conservancy/apps/assignment/forms.py

bsturmfels
Rename cast to "The Corresponding Source", move to URL prefix "/cast/"

Also improved detail view rendering where unclosed <ul> tags in the body
content HTML from the database were affecting the display of footer info.
import datetime

from django import forms
from django.core.validators import ValidationError
from django.utils import timezone

from .models import Assignment
from .terms import TERMS


def validate_in_past(value):
    # Adding a day to allow the current date anywhere on earth, regardless of
    # the server timezone.
    if value > timezone.now().date() + datetime.timedelta(days=1):
        raise ValidationError('Enter a date in the past')


class AssignmentForm(forms.ModelForm):
    period_begins = forms.DateField(
        label='Assign the copyright in my above contributions starting on',
        help_text='You can use the day you first started contributing (or, equivalently, your date of birth), or any later date.',
        required=True,
        widget=forms.DateInput(attrs={'type': 'date'}),
        validators=[validate_in_past],
    )
    period_end_type = forms.ChoiceField(
        label='and ending on',
        choices=[
            ('all future contributions', 'all future contributions (no end date)'),
            ('a specific past date', 'a specific past date (specify below)'),
        ],
        widget=forms.RadioSelect(),
        initial='all future contributions',
    )
    period_ends = forms.DateField(
        label='Specific past date (if applicable)',
        required=False,
        widget=forms.DateInput(attrs={'type': 'date'}),
        validators=[validate_in_past],
    )
    agreement_terms = forms.CharField(
        widget=forms.Textarea(attrs={'readonly': 'readonly'}),
        initial=TERMS,
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['attestation_of_copyright'].required = True

    class Meta:
        model = Assignment
        fields = [
            'full_name',
            'email',
            'country_of_residence',
            'repositories',
            'all_emails',
            'period_begins',
            'period_end_type',
            'period_ends',
            'agreement_terms',
            'attestation_of_copyright',
        ]

    def clean_period_ends(self):
        if 'period_begins' in self.cleaned_data and 'period_ends' in self.cleaned_data and self.cleaned_data['period_begins'] and self.cleaned_data['period_ends'] and self.cleaned_data['period_begins'] > self.cleaned_data['period_ends']:
            raise ValidationError('End of period is before start')

        if self.cleaned_data['period_end_type'] == 'a specific past date' and not self.cleaned_data['period_ends']:
            raise ValidationError('This field is required')

        return self.cleaned_data['period_ends']