From ca96ba913e423f94f017ab9fd2530e6e4d480f3d Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 4 Apr 2013 18:48:14 +0200 Subject: Operation sheet: group parcels by sections - add parcels to File sheet (refs #1193) --- archaeological_files/models.py | 6 +++++- .../templates/ishtar/sheet_file.html | 22 ++++++++++++++++++++++ archaeological_operations/models.py | 21 ++++++++++++++++++++- .../templates/ishtar/sheet_operation.html | 8 ++++---- archaeological_operations/views.py | 2 +- 5 files changed, 52 insertions(+), 7 deletions(-) diff --git a/archaeological_files/models.py b/archaeological_files/models.py index a91f6ed69..1e2c36ed0 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2012 Étienne Loks +# Copyright (C) 2012-2013 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -133,6 +133,10 @@ class File(BaseHistorizedItem, OwnPerms): for k in ['internal_reference',] if getattr(self, k)] return settings.JOINT.join(items) + def grouped_parcels(self): + from archaeological_operations.models import Parcel + return Parcel.grouped_parcels(list(self.parcels.all())) + @classmethod def get_query_owns(cls, user): return Q(history_modifier=user) & Q(end_date__isnull=True) diff --git a/archaeological_files/templates/ishtar/sheet_file.html b/archaeological_files/templates/ishtar/sheet_file.html index 1b58aa332..bdf0bd4ff 100644 --- a/archaeological_files/templates/ishtar/sheet_file.html +++ b/archaeological_files/templates/ishtar/sheet_file.html @@ -62,6 +62,28 @@ {% if item.general_contractor %}

{{ item.general_contractor.full_label }}

{% endif %} {% endif %} + + + + + + + + {##} + + {% for parcel in item.grouped_parcels %} + + + + + + {##} + + {% empty %} + + {% endfor %} +
{%trans "Associated parcels"%}
{% trans "Commune" %}{% trans "Year" %}{% trans "Section" %}{% trans "Parcels" %}{% trans "Owner" %}
{{parcel.town}}{{parcel.year}}{{parcel.section}}{{parcel.parcel_numbers|join:", "}}{{operation.parcel.owner}}
{% trans "No parcel associated to this operation" %}
+ 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 +# Copyright (C) 2012-2013 Étienne Loks # 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] diff --git a/archaeological_operations/templates/ishtar/sheet_operation.html b/archaeological_operations/templates/ishtar/sheet_operation.html index 1698f0224..491304125 100644 --- a/archaeological_operations/templates/ishtar/sheet_operation.html +++ b/archaeological_operations/templates/ishtar/sheet_operation.html @@ -61,15 +61,15 @@ - + {##} - {% for parcel in item.parcels.all %} + {% for parcel in item.grouped_parcels %} - + {##} {% empty %} @@ -78,7 +78,7 @@
{%trans "Admninistrative acts"%}
{% trans "Commune" %} {% trans "Year" %} {% trans "Section" %}{% trans "Parcel" %}{% trans "Parcels" %}{% trans "Owner" %}
{{parcel.town}} {{parcel.year}} {{parcel.section}}{{parcel.parcel_number}}{{parcel.parcel_numbers|join:", "}}{{operation.parcel.owner}}
- + diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 84f208bf3..6e570fc97 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2012 Étienne Loks +# Copyright (C) 2010-2013 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as -- cgit v1.2.3
{%trans "Admninistrative acts"%}{%trans "Administrative acts"%}
{% trans "Year" %} {% trans "Reference" %}