summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-07-21 18:36:21 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2015-07-21 18:36:21 +0200
commit83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5 (patch)
tree580466f9a251f0744aaca72553b4003d79f4a116
parentc55c4fad9972df04273e9a98f9dd4918998e4e70 (diff)
downloadIshtar-83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5.tar.bz2
Ishtar-83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5.zip
Improve parcel result displaying
-rw-r--r--archaeological_operations/forms.py73
-rw-r--r--ishtar_common/wizards.py6
2 files changed, 78 insertions, 1 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 0bc759b9c..691b0c90c 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -21,6 +21,7 @@
Operations forms definitions
"""
import datetime
+from itertools import groupby
from django import forms
from django.conf import settings
@@ -109,6 +110,78 @@ class ParcelForm(forms.Form):
u"fields are required."))
return self.cleaned_data
+ @classmethod
+ def get_formated_datas(cls, cleaned_datas):
+ result, current, deleted = [], [], []
+ towns = {}
+ for data in cleaned_datas:
+ if not data:
+ continue
+ town = data.get('town') or ''
+ if town:
+ if town in towns:
+ town = towns[town]
+ else:
+ try:
+ towns[town] = unicode(Town.objects.get(pk=town))
+ town = towns[town]
+ except (Town.DoesNotExist, ValueError):
+ town = ''
+ parcel_number = data.get('parcel_number') or ''
+ c_number = 0
+ if parcel_number:
+ parcel_nb = list(reversed(list(parcel_number)))
+ c_number = ''
+ while parcel_nb:
+ c = parcel_nb.pop()
+ try:
+ c_number += str(int(c))
+ except ValueError:
+ break
+ if c_number:
+ c_number = int(c_number)
+ else:
+ c_number = 0
+ values = [town, data.get('year') or '', data.get('section') or '',
+ c_number, data.get('parcel_number') or '']
+ if data.get('DELETE'):
+ deleted.append(values)
+ else:
+ current.append(values)
+ if current:
+ result.append((_("Current parcels"), cls._format_parcels(current)))
+ if deleted:
+ result.append((_("Deleted parcels"), cls._format_parcels(deleted)))
+ return result
+
+ @classmethod
+ def _format_parcels(cls, parcels):
+ sortkeyfn = lambda s:(s[0], s[1], s[2])
+ parcels = sorted(parcels, key=sortkeyfn)
+ grouped = []
+ for keys, parcel_grp in groupby(parcels, key=sortkeyfn):
+ keys = list(keys)
+ keys.append([gp[-1] for gp in parcel_grp])
+ grouped.append(keys)
+ res = ''
+ c_town, c_section, c_year = '', '', ''
+ for idx, parcel in enumerate(grouped):
+ town, year, section, parcel_numbers = parcel
+ if c_town != town:
+ c_town = town
+ c_section, c_year = '', ''
+ if idx:
+ res += " ; "
+ res += town + u' : '
+ if c_section:
+ res += u" / "
+ c_section = section
+ res += section + u' '
+ res += u", ".join(parcel_numbers)
+ if year:
+ res += " (%s)" % unicode(year)
+ return res
+
class ParcelSelectionForm(forms.Form):
_town = forms.ChoiceField(label=_("Town"), choices=(), required=False,
validators=[valid_id(models.Town)])
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 1e515d13e..e30d33711 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -187,7 +187,6 @@ class Wizard(NamedUrlWizardView):
"""Get the data to present in the last page"""
datas = []
for form in forms:
- form_datas = []
base_form = hasattr(form, 'forms') and form.forms[0] or form
associated_models = hasattr(base_form, 'associated_models') and \
base_form.associated_models or {}
@@ -202,6 +201,11 @@ class Wizard(NamedUrlWizardView):
cleaned_datas = type(form.cleaned_data) == list and \
form.cleaned_data \
or [form.cleaned_data]
+ if hasattr(base_form, 'get_formated_datas'):
+ datas.append((form.form_label,
+ base_form.get_formated_datas(cleaned_datas)))
+ continue
+ form_datas = []
for cleaned_data in cleaned_datas:
if not cleaned_data:
continue