# HG changeset patch # User souliane # Date 1422972959 -3600 # Node ID 1a0f24401866b282534f441c29f8478a82c7d785 # Parent dfe7139dae0aa57d26ce636f09b2498da7e02ddc send adhesion form results via email to the admins and the new member diff -r dfe7139dae0a -r 1a0f24401866 sat_website/forms.py --- 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 . """ -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) diff -r dfe7139dae0a -r 1a0f24401866 sat_website/local_settings.py --- a/sat_website/local_settings.py Tue Feb 03 15:14:42 2015 +0100 +++ b/sat_website/local_settings.py Tue Feb 03 15:15:59 2015 +0100 @@ -27,6 +27,16 @@ TEMPLATE_DEBUG = DEBUG +# Email settings + +# print email to stdout instead of actually sending it +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + +DEFAULT_FROM_EMAIL = u'contact@salut-a-toi.org' + +ADMINS = ((u'Salut à Toi', 'contact@salut-a-toi.org'),) + + # Application definition INSTALLED_APPS = ( diff -r dfe7139dae0a -r 1a0f24401866 sat_website/utils.py --- a/sat_website/utils.py Tue Feb 03 15:14:42 2015 +0100 +++ b/sat_website/utils.py Tue Feb 03 15:15:59 2015 +0100 @@ -22,6 +22,7 @@ from os.path import basename, realpath, join from django.conf import settings +from django.utils import translation from collections import OrderedDict @@ -78,3 +79,10 @@ def get_asso_subscr_amounts(): """Returns the subscription amounts as defined in the Rules of the association.""" return settings.ASSO_SUBSCR_AMOUNTS + +def get_language_name_local(language): + """Returns the localised language name. + + @param language (str): language code (e.g. 'fr' or 'en') + """ + return translation.get_language_info(language)['name_local'] diff -r dfe7139dae0a -r 1a0f24401866 templates/sat_website/thank_you.html --- a/templates/sat_website/thank_you.html Tue Feb 03 15:14:42 2015 +0100 +++ b/templates/sat_website/thank_you.html Tue Feb 03 15:15:59 2015 +0100 @@ -28,29 +28,20 @@ {% block main_container %}

{% trans "Your subscription has been registered." %}

- {% for section, fields in form.sections.items %} -
- {% for field in fields %} - {% if field.name == "payment_method" %} - {% if form.subscription_amount.value != "0" %} -
{{ field.label }}: {{ field|selected_label }}
- {% endif %} - {% elif field.name == "subscription_amount" %} -
{{ field.label }}: {{ field.value }} €
- {% elif field.name != "email_confirmation" and field.value %} -
{{ field.label }}: {{ field.value }}
- {% endif %} - {% endfor %} -
+
+ {% for label, value in form.results %} +
{{ label }}: {{ value }}
{% endfor %} - - - -{% if form.subscription_amount.value != "0" %} - + + {% endblock %}