From f861fecee56f7b687361681c1ee7b9f7b552c520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 10 Dec 2018 19:06:38 +0100 Subject: [PATCH] display grid cell for POIs --- src/c3nav/mapdata/models/geometry/space.py | 5 +++++ src/c3nav/mapdata/models/locations.py | 9 ++++++++- src/c3nav/mapdata/utils/locations.py | 10 +++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/c3nav/mapdata/models/geometry/space.py b/src/c3nav/mapdata/models/geometry/space.py index 9d56bfce..7ff080ea 100644 --- a/src/c3nav/mapdata/models/geometry/space.py +++ b/src/c3nav/mapdata/models/geometry/space.py @@ -11,6 +11,7 @@ from django.utils.translation import ugettext_lazy as _ from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping from c3nav.mapdata.fields import GeometryField, I18nField, JSONField +from c3nav.mapdata.grid import grid from c3nav.mapdata.models import Space from c3nav.mapdata.models.base import SerializableMixin from c3nav.mapdata.models.geometry.base import GeometryMixin @@ -231,6 +232,10 @@ class POI(SpaceGeometryMixin, SpecificLocation, models.Model): result['editor_url'] = reverse('editor.pois.edit', kwargs={'space': self.space_id, 'pk': self.pk}) return result + @property + def grid_cell(self): + return grid.get_cell_for_point(self.x, self.y) or '' + @property def x(self): return self.geometry.x diff --git a/src/c3nav/mapdata/models/locations.py b/src/c3nav/mapdata/models/locations.py index aad5faa4..c7f0edbc 100644 --- a/src/c3nav/mapdata/models/locations.py +++ b/src/c3nav/mapdata/models/locations.py @@ -115,6 +115,10 @@ class Location(LocationSlug, AccessRestrictionMixin, TitledMixin, models.Model): def subtitle(self): return '' + @property + def grid_cell(self): + return None + def get_color(self, instance=None): # dont filter in the query here so prefetch_related works if instance is None: @@ -167,7 +171,10 @@ class SpecificLocation(Location, models.Model): def subtitle(self): groups = tuple(self.groups.all() if 'groups' in getattr(self, '_prefetched_objects_cache', ()) else ()) groups = tuple(group for group in groups if group.can_describe) - return groups[0].title if groups else self.__class__._meta.verbose_name + subtitle = groups[0].title if groups else self.__class__._meta.verbose_name + if self.grid_cell: + return '%s, %s' % (subtitle, self.grid_cell) + return subtitle @cached_property def order(self): diff --git a/src/c3nav/mapdata/utils/locations.py b/src/c3nav/mapdata/utils/locations.py index f6d96783..5c5ea936 100644 --- a/src/c3nav/mapdata/utils/locations.py +++ b/src/c3nav/mapdata/utils/locations.py @@ -366,10 +366,14 @@ class CustomLocation: def near_poi(self): return self.description.near_poi + @cached_property + def grid_cell(self): + return grid.get_cell_for_point(self.x, self.y) or '' + @cached_property def title_subtitle(self): - grid_cell = grid.get_cell_for_point(self.x, self.y) - level_subtitle = self.level.title if grid_cell is None else ','.join((grid_cell, str(self.level.title))) + grid_cell = self.grid_cell + level_subtitle = self.level.title if not grid_cell else ','.join((grid_cell, str(self.level.title))) title = _('In %(level)s') % {'level': self.level.title} if not self.space: @@ -392,7 +396,7 @@ class CustomLocation: return _('In %(space)s') % {'space': self.space.title}, level_subtitle subtitle_segments = chain((grid_cell, ), subtitle, (self.space.title, self.level.title)) - subtitle = ', '.join(str(title) for title in subtitle_segments if title is not None) + subtitle = ', '.join(str(title) for title in subtitle_segments if title) return title, subtitle @cached_property