Files @ c6b329f0cff0
Branch filter:

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

bsturmfels
Fix validation.
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):
    if value >= timezone.now().date():
        raise ValidationError('Enter a date in the past')


class AssignmentForm(forms.ModelForm):
    period_begins = forms.DateField(
        label='Start of period to assign',
        required=True,
        widget=forms.DateInput(attrs={'type': 'date'}),
        validators=[validate_in_past],
    )
    period_end_type = forms.ChoiceField(
        label='End of period to assign',
        choices=[
            ('all future contributions', 'all future contributions'),
            ('a specific past date', 'a specific past date (specify below)'),
        ],
        widget=forms.RadioSelect(),
    )
    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,
        help_text='Please be aware that some employment agreements explicitly transfer copyright ownership to the employer. We recommend you review your recent employment agreements for such clauses.',
    )

    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')