summaryrefslogtreecommitdiff
path: root/main/models.py
diff options
context:
space:
mode:
authoretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2009-01-11 19:02:30 +0000
committeretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2009-01-11 19:02:30 +0000
commita4bc9f49559db59eb8ce4208f3ad49b262a5d05f (patch)
tree58299c2ed9f08faec8506e0b433ea6aacbd19298 /main/models.py
parent03c7e15227fb84b94d9f870aac69d7d54b61889a (diff)
downloadChimère-a4bc9f49559db59eb8ce4208f3ad49b262a5d05f.tar.bz2
Chimère-a4bc9f49559db59eb8ce4208f3ad49b262a5d05f.zip
First implementation of route management
git-svn-id: http://www.peacefrogs.net/svn/chimere/trunk@10 9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864
Diffstat (limited to 'main/models.py')
-rw-r--r--main/models.py40
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