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 /archaeological_operations/forms.py | |
| parent | c55c4fad9972df04273e9a98f9dd4918998e4e70 (diff) | |
| download | Ishtar-83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5.tar.bz2 Ishtar-83cda4b1d3d7b2c26f93b5005944f124ad6e7bf5.zip | |
Improve parcel result displaying
Diffstat (limited to 'archaeological_operations/forms.py')
| -rw-r--r-- | archaeological_operations/forms.py | 73 | 
1 files changed, 73 insertions, 0 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)]) | 
