summaryrefslogtreecommitdiff
path: root/archaeological_operations/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2013-04-04 18:48:14 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2013-04-04 18:48:14 +0200
commitca96ba913e423f94f017ab9fd2530e6e4d480f3d (patch)
tree6a132db71c7a30abf475fdeaf7a8f0afc2bb2eae /archaeological_operations/models.py
parent3f038c77f4017a1ef7c1fbed8f5dc5daef2371c7 (diff)
downloadIshtar-ca96ba913e423f94f017ab9fd2530e6e4d480f3d.tar.bz2
Ishtar-ca96ba913e423f94f017ab9fd2530e6e4d480f3d.zip
Operation sheet: group parcels by sections - add parcels to File sheet (refs #1193)
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r--archaeological_operations/models.py21
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]