Add a way to customize each offer (custom price, etc..)
authorGu1 <gu1@cafai.fr>
Thu, 6 Jun 2013 02:25:09 +0000 (04:25 +0200)
committerGu1 <gu1@cafai.fr>
Thu, 6 Jun 2013 02:25:09 +0000 (04:25 +0200)
fdneligibility/forms.py
fdneligibility/locale/fr/LC_MESSAGES/django.mo
fdneligibility/locale/fr/LC_MESSAGES/django.po
fdneligibility/templates/fdneligibility/done.html
fdneligibility/views.py

index 5c57879..bf7949b 100644 (file)
@@ -1,6 +1,8 @@
 # -*- coding: utf-8 -*-
 from django import forms
 from django.utils.translation import ugettext_lazy as _
+from django.utils.safestring import mark_safe
+from django.utils.html import escape
 from django_localflavor_fr.forms import FRPhoneNumberField, FRZipCodeField
 
 
@@ -19,12 +21,11 @@ class EligibilityForm2(forms.Form):
     plans = forms.ChoiceField(label=_('Plans'), widget=forms.RadioSelect, error_messages={'required': _('Please choose a plan')})
 
     def format_plan(self, o):
-        from django.utils.safestring import mark_safe
-        from django.utils.html import escape
-        return mark_safe(u"<strong>{0}</strong>/<strong>{1}</strong>, {2} {3}€/mois <small>({4}: {5}€)</small>".format(
-            escape(o['download']), escape(o['upload']), escape(o['unbundling']),
-            escape(o['abo']), _(u"Opening fees"), escape(o['fas'])
-        ))
+        if 'abo' in o and 'fas' in o:
+            plan=_(u"<strong>%(download)s</strong>/<strong>%(upload)s</strong>, %(unbundling)s %(abo)s€/month <small>(Opening fees: %(fas)s€)</small>") % o
+        else:
+            plan=_(u"<strong>%(download)s</strong>/<strong>%(upload)s</strong>, %(unbundling)s") % o
+        return mark_safe(plan)
 
     def __init__(self, *args, **kwargs):
         si_res=kwargs.pop('si_res')
index 08028d8..824c8d3 100644 (file)
Binary files a/fdneligibility/locale/fr/LC_MESSAGES/django.mo and b/fdneligibility/locale/fr/LC_MESSAGES/django.mo differ
index a4f2dce..8c898dd 100644 (file)
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: django-fdn-eligibility\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-27 16:28+0200\n"
+"POT-Creation-Date: 2013-06-06 03:40+0200\n"
 "PO-Revision-Date: 2013-04-27 16:30+0200\n"
 "Last-Translator: gu1 <gu1@cafai.fr>\n"
 "Language: fr\n"
@@ -12,27 +12,39 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: forms.py:9
+#: forms.py:11
 msgid "Phone number"
 msgstr "Numéro de téléphone"
 
-#: forms.py:11 templates/fdneligibility/done.html:7
+#: forms.py:13 templates/fdneligibility/done.html:7
 msgid "Zip code"
 msgstr "Code postal"
 
-#: forms.py:19
+#: forms.py:21
 msgid "Plans"
 msgstr "Formules"
 
-#: forms.py:19
+#: forms.py:21
 msgid "Please choose a plan"
 msgstr "Merci de sélectionner une formule"
 
-#: forms.py:26
-msgid "Opening fees"
-msgstr "Frais d'ouverture"
+#: forms.py:25
+#, python-format
+msgid ""
+"<strong>%(download)s</strong>/<strong>%(upload)s</strong>, %(unbundling)s "
+"%(abo)s€/month <small>(Opening fees: %(fas)s€)</small>"
+msgstr ""
+"<strong>%(download)s</strong>/<strong>%(upload)s</strong>, %(unbundling)s "
+"%(abo)s€/mois <small>(Frais d'ouverture: %(fas)s€)</small>"
+
+#: forms.py:27
+#, python-format
+msgid ""
+"<strong>%(download)s</strong>/<strong>%(upload)s</strong>, %(unbundling)s"
+msgstr ""
+"<strong>%(download)s</strong>/<strong>%(upload)s</strong>, %(unbundling)s"
 
-#: views.py:90
+#: views.py:98
 msgid ""
 "The eligibility test server returned an error, please try again at a later "
 "time. If the problem persist, contact us."
@@ -40,27 +52,27 @@ msgstr ""
 "Le serveur de test d'éligibilité a retourné une erreur, veuillez réessayez "
 "ultérieurement. Si le problème persiste, contactez nous."
 
-#: views.py:103
+#: views.py:112
 msgid "partially unbundled by Nerim"
 msgstr "dégroupé partiellement par Nerim"
 
-#: views.py:105
+#: views.py:114
 msgid "partially unbundled"
 msgstr "dégroupé partiellement"
 
-#: views.py:107
+#: views.py:116
 msgid "not unbundled (ACA)"
 msgstr "non dégroupé (ACA)"
 
-#: views.py:109
+#: views.py:118
 msgid "not unbundled (IP/ADSL)"
 msgstr "non dégroupé (IP/ADSL)"
 
-#: views.py:111
+#: views.py:120
 msgid "unknown"
 msgstr "dégroupage inconnu"
 
-#: views.py:119
+#: views.py:131
 msgid "Could not test your eligibility"
 msgstr "Impossible de vérifier votre éligibilité auprès du serveur"
 
index 4041b10..f6ba22a 100644 (file)
@@ -9,7 +9,9 @@
 <p>{% blocktrans with download=chosen_plan.download upload=chosen_plan.upload unbundling=chosen_plan.unbundling %}You chose the following plan: <strong>{{ download }}</strong>/<strong>{{ upload }}</strong> {{ unbundling }}{% endblocktrans %}</p>
 <ul>
 <li><p>{% blocktrans with plan_id=chosen_plan.plan_id %}This plan's name is <strong>{{ plan_id }}</strong>{% endblocktrans %}</p></li>
+{% if chosen_plan.abo and chosen_plan.fas %}
 <li><p>{% blocktrans with abo=chosen_plan.abo %}The monthly recurring charge of the ADSL plan is <strong>{{ abo }}€</strong>{% endblocktrans %}</p></li>
 <li><p>{% blocktrans with fas=chosen_plan.fas %}The service opening charge that you will have to pay the first month is <strong>{{ fas }}€</strong>{% endblocktrans %}</p></li>
+{% endif %}
 </ul>
 {% endblock %}
index 1cc17fc..053bbde 100644 (file)
@@ -7,6 +7,8 @@ from utils import VerifiedHTTPSConnection, APP_ROOT
 from httplib import HTTPException
 from ssl import SSLError
 import re
+import json
+import urllib
 from decimal import Decimal
 
 
@@ -21,8 +23,6 @@ TEMPLATES={
 PATH_TO_CA=APP_ROOT+'/cacert.org.pem'
 
 def contact_si_helper(phonen, zipc):
-    from django.utils import simplejson as json
-    import urllib
     c=VerifiedHTTPSConnection('vador.fdn.fr', 443, ca_certs=PATH_TO_CA)
     si_args={'etape': 'eligibilite', 'tel': phonen.replace(' ', ''), 'cp': zipc, 'tarif': 'blanche'}
     c.request('GET', '/souscription/eligibilite.cgi?'+urllib.urlencode(si_args))
@@ -44,7 +44,7 @@ class EligibilityWizard(SessionWizardView):
         "512kopt3"  : "128k",
         "1Mopt3"    : "256k",
         "2Mopt3"    : "256k",
-        "3Mopt3"    : "256k à 512k",
+        "3Mopt3"    : u"256k à 512k",
         "4Mopt3"    : "512k",
         "5Mopt3"    : "512k",
         "6Mopt3"    : "512k",
@@ -55,6 +55,22 @@ class EligibilityWizard(SessionWizardView):
         "18Mopt0"   : "1M",
     }
 
+    @staticmethod
+    def _customize_offer_impl(o):
+        o['abo']=o['abo_fdn']
+        o['fas']=o['fas_fdn']
+        return o
+
+    customize_offer=_customize_offer_impl
+
+    def sort_offres(self, offres):
+        unit_table={'k': 1000, 'm': 1000000, 'g': 1000000000}
+        def _key(o):
+            unit=o['download'][-1].lower()
+            return int(o['download'][:-1])*unit_table[unit]
+        tmp=sorted(offres, key=lambda o: 0 if o['plan_id'].endswith('opt1') or o['plan_id'].endswith('opt0') else 1)
+        return sorted(tmp, key=_key, reverse=True)
+
     def get_template_names(self):
         return [TEMPLATES[self.steps.current], "fdneligibility/form.html"]
 
@@ -92,8 +108,9 @@ class EligibilityWizard(SessionWizardView):
                     return self.render(form)
                 si_res.setdefault('erreur', 0)
                 for o in si_res['offres']:
-                    o['fas']=Decimal(o['fas'].replace('E TTC', u''))
-                    o['abo']=Decimal(o['abo'].replace('E TTC', u''))
+                    o['fas_fdn']=Decimal(o['fas'].replace('E TTC', u''))
+                    o['abo_fdn']=Decimal(o['abo'].replace('E TTC', u''))
+                    del o['fas'], o['abo']
                     plan_id=o['code_offre']
                     del o['code_offre']
                     o['plan_id']=plan_id
@@ -114,6 +131,10 @@ class EligibilityWizard(SessionWizardView):
                         o['upload'] = self.plans_upload[o['plan_id']]
                     except KeyError:
                         o['upload'] = u'?'
+
+                    self.customize_offer(o)
+
+                si_res['offres']=self.sort_offres(si_res['offres'])
                 self.storage.extra_data={'si_res': si_res, 'phone_number': phone_number}
             except (HTTPException, SSLError), e:
                 form._errors[NON_FIELD_ERRORS] = form.error_class([_(u"Could not test your eligibility")])