diff options
| -rw-r--r-- | archaeological_files/models.py | 5 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 30 | 
2 files changed, 33 insertions, 2 deletions
| diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 916457324..6d5390737 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -254,8 +254,13 @@ class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem):          if self.towns.count():              values[prefix+'towns'] = u", ".join([town.name                                   for town in self.towns.all().order_by('name')]) +        values[prefix+'parcellist'] = self.render_parcels()          return values +    def render_parcels(self): +        from archaeological_operations.models import Parcel +        return Parcel.render_parcels(list(self.parcels.all())) +      def __unicode__(self):          if self.cached_label:              return self.cached_label diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 0a83dbdfc..7e4bd73b6 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -246,6 +246,7 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem):          if self.towns.count():              values[prefix+'towns'] = u", ".join([town.name                                   for town in self.towns.all().order_by('name')]) +        values[prefix+'parcellist'] = self.render_parcels()          return values      @property @@ -305,6 +306,9 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem):      def grouped_parcels(self):          return Parcel.grouped_parcels(list(self.parcels.all())) +    def render_parcels(self): +        return Parcel.render_parcels(list(self.parcels.all())) +      def context_record_docs_q(self):          from archaeological_context_records.models import ContextRecordSource          return ContextRecordSource.objects.filter( @@ -660,8 +664,8 @@ class Parcel(LightHistorizedItem):      def __unicode__(self):          return self.short_label -    @staticmethod -    def grouped_parcels(parcels): +    @classmethod +    def grouped_parcels(cls, parcels):          sortkeyfn = lambda s:(getattr(s, 'town_id'),                                getattr(s, 'section'), getattr(s, 'year'))          parcels = sorted(parcels, key=sortkeyfn) @@ -678,6 +682,28 @@ class Parcel(LightHistorizedItem):                                            for nb in grouped[-1].parcel_numbers]          return grouped + +    @classmethod +    def render_parcels(cls, parcels): +        parcels = cls.grouped_parcels(parcels) +        res = '' +        c_town, c_section, c_year = '', '', '' +        for idx, parcels in enumerate(parcels): +            if c_town != unicode(parcels.town): +                c_town = unicode(parcels.town) +                c_section, c_year = '', '' +                if idx: +                    res += " ; " +                res += unicode(parcels.town) + u' : ' +            if c_section: +                res += u" / " +            c_section = parcels.section +            res += parcels.section + u' ' +            res += u", ".join(parcels.parcel_numbers) +            if parcels.year: +                res += " (%s)" % unicode(parcels.year) +        return res +      def long_label(self):          items = [unicode(self.operation or self.associated_file)]          items += [unicode(item) for item in [self.section, self.parcel_number] | 
