diff options
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 |
commit | 83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5 (patch) | |
tree | 580466f9a251f0744aaca72553b4003d79f4a116 | |
parent | c55c4fad9972df04273e9a98f9dd4918998e4e70 (diff) | |
download | Ishtar-83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5.tar.bz2 Ishtar-83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5.zip |
Improve parcel result displaying
-rw-r--r-- | archaeological_operations/forms.py | 73 | ||||
-rw-r--r-- | ishtar_common/wizards.py | 6 |
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 |