display grid cell for POIs

This commit is contained in:
Laura Klünder 2018-12-10 19:06:38 +01:00
parent 875b18c730
commit f861fecee5
3 changed files with 20 additions and 4 deletions

View file

@ -11,6 +11,7 @@ from django.utils.translation import ugettext_lazy as _
from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping
from c3nav.mapdata.fields import GeometryField, I18nField, JSONField from c3nav.mapdata.fields import GeometryField, I18nField, JSONField
from c3nav.mapdata.grid import grid
from c3nav.mapdata.models import Space from c3nav.mapdata.models import Space
from c3nav.mapdata.models.base import SerializableMixin from c3nav.mapdata.models.base import SerializableMixin
from c3nav.mapdata.models.geometry.base import GeometryMixin 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}) result['editor_url'] = reverse('editor.pois.edit', kwargs={'space': self.space_id, 'pk': self.pk})
return result return result
@property
def grid_cell(self):
return grid.get_cell_for_point(self.x, self.y) or ''
@property @property
def x(self): def x(self):
return self.geometry.x return self.geometry.x

View file

@ -115,6 +115,10 @@ class Location(LocationSlug, AccessRestrictionMixin, TitledMixin, models.Model):
def subtitle(self): def subtitle(self):
return '' return ''
@property
def grid_cell(self):
return None
def get_color(self, instance=None): def get_color(self, instance=None):
# dont filter in the query here so prefetch_related works # dont filter in the query here so prefetch_related works
if instance is None: if instance is None:
@ -167,7 +171,10 @@ class SpecificLocation(Location, models.Model):
def subtitle(self): def subtitle(self):
groups = tuple(self.groups.all() if 'groups' in getattr(self, '_prefetched_objects_cache', ()) else ()) 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) 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 @cached_property
def order(self): def order(self):

View file

@ -366,10 +366,14 @@ class CustomLocation:
def near_poi(self): def near_poi(self):
return self.description.near_poi return self.description.near_poi
@cached_property
def grid_cell(self):
return grid.get_cell_for_point(self.x, self.y) or ''
@cached_property @cached_property
def title_subtitle(self): def title_subtitle(self):
grid_cell = grid.get_cell_for_point(self.x, self.y) grid_cell = self.grid_cell
level_subtitle = self.level.title if grid_cell is None else ','.join((grid_cell, str(self.level.title))) 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} title = _('In %(level)s') % {'level': self.level.title}
if not self.space: if not self.space:
@ -392,7 +396,7 @@ class CustomLocation:
return _('In %(space)s') % {'space': self.space.title}, level_subtitle return _('In %(space)s') % {'space': self.space.title}, level_subtitle
subtitle_segments = chain((grid_cell, ), subtitle, (self.space.title, self.level.title)) 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 return title, subtitle
@cached_property @cached_property