Mercurial > sat_legacy_website
view sat_website/forms.py @ 40:dfe7139dae0a
add links to the statutes and rules of the association in the adhesion form
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 03 Feb 2015 15:14:42 +0100 |
parents | 9d553570cc61 |
children | 1a0f24401866 |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- """ SàT website: Salut à Toi's presentation website Copyright (C) 2012 Jérôme Poisson (goffi@goffi.org) This file is part of SàT website. SàT website is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Foobar is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Foobar. If not, see <http://www.gnu.org/licenses/>. """ from django.utils.translation import ugettext_lazy as _, string_concat from django.utils.html import format_html from django import forms from django.conf import settings from collections import OrderedDict from email import email import utils ## Fields ## class Section(forms.Field): def __init__(self, *args, **kwargs): kwargs['required'] = False super(Section, self).__init__(*args, **kwargs) class BooleanField(forms.BooleanField): def __init__(self, *args, **kwargs): super(BooleanField, self).__init__(*args, **kwargs) class CharField(forms.CharField): def __init__(self, label=None, *args, **kwargs): try: placeholder = kwargs.pop('placeholder') except KeyError: placeholder = label super(CharField, self).__init__(*args, **kwargs) self.widget.attrs.update({'class': "form-control", 'placeholder': placeholder}) class EmailField(forms.EmailField): def __init__(self, *args, **kwargs): super(EmailField, self).__init__(*args, **kwargs) self.widget.attrs.update({'class': "form-control", 'placeholder': self.label}) class ChoiceField(forms.ChoiceField): def __init__(self, *args, **kwargs): super(ChoiceField, self).__init__(*args, **kwargs) self.widget.attrs.update({'class': "form-control"}) ## Forms ## class RegistrationForm(forms.Form): section_1 = Section(label=_(u'Identity')) name = CharField(label=_(u'Name')) surname = CharField(label=_(u'Surname')) address = CharField(label=_(u'Address, postal code, municipality')) section_2 = Section(label=_(u'Contacts')) email = EmailField(label=_(u'Email address')) email_confirmation = EmailField(label=_(u'Email address confirmation')) jid = EmailField(required=False, label=_(u'Jabber ID (for example your SàT login)')) section_3 = Section(label=_(u'Subscription')) subscription_amount = ChoiceField(choices=[(amount, "%s €" % amount) for amount in utils.get_asso_subscr_amounts()]) section_3b = Section(label="") payment_method = ChoiceField(choices=[("card", _(u"Credit or debit card")), ("transfer", _(u"Bank transfer"))], help_text=_(u'Choose "Credit or debit card" to pay via CB, Visa or Mastercard using a secure banking service. Choose "Bank transfer" to proceed manually with the association\'s IBAN/BIC numbers. For both methods, we will first send you an email containing all the details.'), widget=forms.RadioSelect) section_5 = Section(label=_(u'Reference')) ref = CharField(required=False, label=_(u"Reference"), placeholder=_(u"Adherent number in case of a renewal")) section_6 = Section(label=_(u'Comment')) comment = CharField(required=False, label=_(u"Comment"), placeholder="", widget=forms.Textarea(attrs={'rows': 3})) def html_link(url, label): return string_concat('<a target="#" href="', url, '">', label, '</a>') agreement_label = [_(u"I read the "), html_link(settings.ASSO_URL_STATUTES, _(u"Statutes")), _(u" and "), html_link(settings.ASSO_URL_RULES, _(u"Rules")), _(u" of the association, and agree to both of them."), ] agreement_confirmation = BooleanField(label=string_concat(*agreement_label)) def sections(self): sections = OrderedDict() current_section = None for field in self: if isinstance(field.field, Section): current_section = sections.setdefault(field.label, []) else: current_section.append(field) return sections