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 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

View file

@ -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):

View file

@ -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