diff options
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r-- | archaeological_operations/models.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 675666dbb..02ec1a912 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2012-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -18,6 +18,7 @@ # See the file COPYING for details. import datetime +from itertools import groupby from django.conf import settings from django.contrib.gis.db import models @@ -137,6 +138,9 @@ class Operation(BaseHistorizedItem, OwnPerms): unicode(self.operation_code)))) return settings.JOINT.join(items) + def grouped_parcels(self): + return Parcel.grouped_parcels(list(self.parcels.all())) + @classmethod def get_available_operation_code(cls, year=None): if not year: @@ -328,6 +332,21 @@ class Parcel(LightHistorizedItem): def __unicode__(self): return self.short_label() + @staticmethod + def grouped_parcels(parcels): + sortkeyfn = lambda s:(getattr(s, 'year'), getattr(s, 'town'), + getattr(s, 'section')) + parcels.sort(key=sortkeyfn) + grouped = [] + for keys, parcel_grp in groupby(parcels, key=sortkeyfn): + for idx, parcel in enumerate(parcel_grp): + if not idx: + grouped.append(parcel) + grouped[-1].parcel_numbers = [] + grouped[-1].parcel_numbers.append(parcel.parcel_number) + grouped[-1].parcel_numbers.sort() + return grouped + def long_label(self): items = [unicode(self.operation or self.associated_file)] items += [unicode(item) for item in [self.section, self.parcel_number] |