X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/fa2bc70331278decaf3e525607f10bb1bbd92908..c6d69afb72785ca148ca4a38cba5ba2b83d71c43:/edumed/contact_forms.py diff --git a/edumed/contact_forms.py b/edumed/contact_forms.py index 5ee5892..764c433 100644 --- a/edumed/contact_forms.py +++ b/edumed/contact_forms.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- from django import forms from django.forms.formsets import BaseFormSet +from django.utils.safestring import mark_safe from contact.forms import ContactForm from django.utils.translation import ugettext_lazy as _ +from wtem.models import TeacherConfirmation, Confirmation + WOJEWODZTWA = ( u'dolnośląskie', u'kujawsko-pomorskie', @@ -27,12 +30,35 @@ WOJEWODZTWA = ( WOJEWODZTWO_CHOICES = [(u'', u'(wybierz)')] + [(w, w) for w in WOJEWODZTWA] +def make_data_processing(middle_text): + return mark_safe(u'''\ +Administratorem danych osobowych jest Fundacja Nowoczesna Polska (ul. Marszałkowska 84/92 lok. 125, 00-514 Warszawa). \ +Podanie danych osobowych jest dobrowolne. %s Osobom, których dane są zbierane, przysługuje prawo dostępu do treści \ +swoich danych oraz ich poprawiania. Więcej informacji w \ +polityce prywatności.''' % middle_text) + + +class ReminderForm(ContactForm): + form_tag = 'nie-przegap-2018' + form_title = u'Rejestracja. Nie przegap terminu!' + contact = forms.EmailField(label=u'Adres e-mail', max_length=128) + data_processing = make_data_processing( + u'Dane są przetwarzane w zakresie niezbędnym do wysłania powiadomienia odbiorcom.') + submit_label = u'Wyślij' + + class WTEMStudentForm(forms.Form): first_name = forms.CharField(label=u'Imię', max_length=128) last_name = forms.CharField(label=u'Nazwisko', max_length=128) email = forms.EmailField(label=u'Adres e-mail', max_length=128) form_tag = "student" + def clean_email(self): + email = self.cleaned_data['email'] + if Confirmation.objects.filter(email=email): + raise forms.ValidationError(u'Uczeń z tym adresem już został zgłoszony.') + return email + class NonEmptyBaseFormSet(BaseFormSet): """ @@ -45,25 +71,48 @@ class NonEmptyBaseFormSet(BaseFormSet): forms.ValidationError(u"Proszę podać dane przynajmniej jednej osoby.") +class StudentFormset(forms.formsets.formset_factory(WTEMStudentForm, formset=NonEmptyBaseFormSet)): + def clean(self): + from django.forms.util import ErrorList + super(StudentFormset, self).clean() + + emails = set() + for form in self.forms: + if not form.is_valid(): + continue + if form.cleaned_data: + email = form.cleaned_data['email'] + if email in emails: + errors = form._errors.setdefault('email', ErrorList()) + errors.append(u'Każdy zgłoszony uczeń powinien mieć własny adres email') + else: + emails.add(email) + + class CommissionForm(forms.Form): name = forms.CharField(label=u'Imię i nazwisko Członka Komisji', max_length=128) form_tag = "commission" class OlimpiadaForm(ContactForm): - disabled = False + ends_on = (2018, 11, 14, 0, 5) disabled_template = 'wtem/disabled_contact_form.html' form_tag = "olimpiada" + old_form_tags = ["olimpiada-2016"] form_title = u"Olimpiada Cyfrowa - Elektroniczny System Zgłoszeń" submit_label = u"Wyślij zgłoszenie" admin_list = ['nazwisko', 'school'] form_formsets = { - 'student': forms.formsets.formset_factory(WTEMStudentForm, formset=NonEmptyBaseFormSet), + 'student': StudentFormset, 'commission': forms.formsets.formset_factory(CommissionForm), } + mailing_field = 'zgoda_newsletter' contact = forms.EmailField(label=u'Adres e-mail Przewodniczącego/Przewodniczącej', max_length=128) przewodniczacy = forms.CharField(label=u'Imię i nazwisko Przewodniczącego/Przewodniczącej', max_length=128) + przewodniczacy_phone = forms.CharField( + label=u'Numer telefonu Przewodniczącego/Przewodniczącej', max_length=128, required=False, + help_text=u'Zadzwonimy tylko w przypadku problemów ze zgłoszeniem.') school = forms.CharField(label=u'Nazwa szkoły', max_length=255) school_address = forms.CharField(label=u'Adres szkoły', widget=forms.Textarea, max_length=1000) school_wojewodztwo = forms.ChoiceField(label=u'Województwo', choices=WOJEWODZTWO_CHOICES) @@ -118,6 +167,16 @@ class OlimpiadaForm(ContactForm): current = {} return toret + def get_dictionary(self, contact): + dictionary = super(OlimpiadaForm, self).get_dictionary(contact) + conf = TeacherConfirmation.objects.filter(contact=contact) + if conf: + confirmation = conf.get() + else: + confirmation = TeacherConfirmation.create(contact=contact) + dictionary['confirmation'] = confirmation + return dictionary + def save(self, request, formsets=None): from wtem.models import Confirmation contact = super(OlimpiadaForm, self).save(request, formsets)