diff options
Diffstat (limited to 'main/models.py')
-rw-r--r-- | main/models.py | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/main/models.py b/main/models.py index ead8a85..ee44a84 100644 --- a/main/models.py +++ b/main/models.py @@ -24,6 +24,7 @@ from django.utils.translation import ugettext_lazy as _ from django.contrib.gis.db import models from django.contrib import admin +from django.db.models import Q from chimere import settings from chimere.main.widgets import PointField, RouteField @@ -72,20 +73,31 @@ class SubCategory(models.Model): name = models.CharField(_("Name"), max_length=150) available = models.BooleanField(_("Available")) icon = models.ForeignKey(Icon, verbose_name=_("Icon")) + color = models.CharField(max_length=10, blank=True, null=True) order = models.IntegerField(_("Order")) + TYPE = (('M', _('Marker')), + ('R', _('Route')), + ('B', _('Both')),) + item_type = models.CharField(_("Item type"), max_length=1, choices=TYPE) def __unicode__(self): return u"%s / %s" % (self.category.name, self.name) class Meta: ordering = ["category", "order"] verbose_name = _("Subcategory") - def getAvailable(): + def getAvailable(item_types=None): '''Get list of tuples with first the category and second the associated subcategories ''' sub_categories = {} - for sub_category in SubCategory.objects.filter(category__available=True, - available=True): + subcategories = None + if not item_types: + subcategories = SubCategory.objects.filter(category__available=True, + available=True) + else: + subcategories = SubCategory.objects.filter(category__available=True, + item_type__in=item_types) + for sub_category in subcategories: if sub_category.category not in sub_categories: sub_categories[sub_category.category] = [] sub_categories[sub_category.category].append(sub_category) @@ -153,13 +165,11 @@ class Marker(models.Model): def getGeoJSON(self): '''Return a GeoJSON string ''' - return """{"type":"Feature", "geometry":{"type":"Point", \ -"crs": "EPSG:%(epsg)d", "coordinates":[%(longitude)s, %(latitude)s]}, \ + return """{"type":"Feature", "geometry":%(geometry)s, \ "properties":{"pk": %(id)d, "name": "%(name)s", \ "icon_path":"%(icon_path)s", "icon_width":%(icon_width)d, \ "icon_height":%(icon_height)d}}""" % {'id':self.id, 'name':self.name, -'icon_path':self.subcategory.icon.image, 'latitude':self.getLatitude(), -'longitude':self.getLongitude(), 'epsg':settings.EPSG_PROJECTION, +'icon_path':self.subcategory.icon.image, 'geometry':self.point.geojson, 'icon_width':self.subcategory.icon.image.width, 'icon_height':self.subcategory.icon.image.height,} @@ -223,17 +233,13 @@ class Route(models.Model): def getGeoJSON(self): '''Return a GeoJSON string ''' - return """{"type":"Feature", "geometry":{"type":"Point", \ -"crs": "EPSG:%(epsg)d", "coordinates":[%(longitude)s, %(latitude)s]}, \ + color = '#000' + if self.subcategory.color: + color = self.subcategory.color + return """{"type":"Feature", "geometry":%(geometry)s, \ "properties":{"pk": %(id)d, "name": "%(name)s", \ -"icon_path":"%(icon_path)s", "icon_width":%(icon_width)d, \ -"icon_height":%(icon_height)d}}""" % {'id':self.id, 'name':self.name, -'icon_path':self.subcategory.icon.image, 'latitude':self.getLatitude(), -'longitude':self.getLongitude(), 'epsg':settings.EPSG_PROJECTION, -'icon_width':self.subcategory.icon.image.width, -'icon_height':self.subcategory.icon.image.height,} - - +"color":"%(color)s"}}""" % {'id':self.id, 'name':self.name, +'color':color, 'geometry':self.route.geojson,} class PropertyModel(models.Model): '''Model for a property |