Mercurial > sat_legacy_website
diff sat_website/forms.py @ 41:1a0f24401866
send adhesion form results via email to the admins and the new member
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 03 Feb 2015 15:15:59 +0100 |
parents | dfe7139dae0a |
children | d721c8ffa22a |
line wrap: on
line diff
--- a/sat_website/forms.py Tue Feb 03 15:14:42 2015 +0100 +++ b/sat_website/forms.py Tue Feb 03 15:15:59 2015 +0100 @@ -21,8 +21,9 @@ along with Foobar. If not, see <http://www.gnu.org/licenses/>. """ -from django.utils.translation import ugettext_lazy as _, string_concat +from django.utils.translation import ugettext_lazy as _, string_concat, get_language from django.utils.html import format_html +from django.core.mail import send_mail from django import forms from django.conf import settings from collections import OrderedDict @@ -64,7 +65,18 @@ super(ChoiceField, self).__init__(*args, **kwargs) self.widget.attrs.update({'class': "form-control"}) + def choice_label(self, value): + """Return the label corresponding to the given value. + + @param value (unicode): a choice value + @return: unicode + """ + for current_value, label in self.choices: + if unicode(current_value) == unicode(value): + return unicode(label) + return u'' + ## Forms ## @@ -81,10 +93,10 @@ 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()]) + subscription_amount = ChoiceField(choices=[(amount, u"%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"))], + payment_method = ChoiceField(choices=[(u"card", _(u"Credit or debit card")), (u"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')) @@ -105,6 +117,10 @@ agreement_confirmation = BooleanField(label=string_concat(*agreement_label)) def sections(self): + """Get the fields grouped in sections. + + @return: OrderedDict binding section name to a list of fields + """ sections = OrderedDict() current_section = None for field in self: @@ -113,3 +129,50 @@ else: current_section.append(field) return sections + + + def results(self, user_readable=True): + """Get the results submitted by the user as a list of couple. Keep the + pertinent fields and filter out the inappropriate ones. + + @param user_readable: set to True to prefer the field labels to their names + @return: list of couple (name, value) or (label, value) + """ + if not self.is_valid(): + return '' + results = [] + for field in self: + if isinstance(field.field, Section): + continue + if field.name in ('email_confirmation', 'agreement_confirmation') or not field.value(): + continue + if field.name == "payment_method" and self['subscription_amount'].value() == "0": + continue + value = field.value() + if user_readable: + if isinstance(field.field, ChoiceField): + value = field.field.choice_label(value) + results.append((field.label, value)) + else: + results.append((field.name, value)) + if user_readable: + results.append((_(u'Language'), utils.get_language_name_local(get_language()))) + else: + results.append(('lang', get_language())) + return results + + def result_as_string(self, user_readable=True): + """Get the result as a string to be sent for example via email. + + @param user_readable: set to True to prefer the field labels to their names + @return: list of couple (name, value) or (label, value) + """ + return '\n'.join([name + ': ' + value for name, value in self.results(user_readable)]) + + def process_submitted_data(self): + if not self.is_valid(): + return + # send email to user + send_mail(_(u'Inscription à Salut à Toi'), self.result_as_string(True), settings.EMAIL_BACKEND, [self['email'].value()], fail_silently=False) + # send email to admins + send_mail(_(u'Inscription à Salut à Toi'), self.result_as_string(False), settings.EMAIL_BACKEND, [email for name, email in settings.ADMINS], fail_silently=False)