summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py45
1 files changed, 42 insertions, 3 deletions
diff --git a/chimere/models.py b/chimere/models.py
index 545d7e0..7db530a 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -171,7 +171,8 @@ class Color(models.Model):
"""
code = models.CharField(_(u"Code"), max_length=6)
order = models.IntegerField(_(u"Order"))
- color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"))
+ color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"),
+ related_name='colors')
def __unicode__(self):
return self.code
class Meta:
@@ -213,6 +214,8 @@ class SubCategory(models.Model):
available = models.BooleanField(_(u"Available"), default=True)
submission = models.BooleanField(_(u"Available for submission"),
default=True)
+ weighted = models.BooleanField(_(u"Has an associated quantity"),
+ default=False)
TYPE = (('M', _(u'Marker')),
('R', _(u'Route')),
('B', _(u'Both')),)
@@ -465,6 +468,8 @@ class Marker(GeographicItem):
null=True) # used by feeds
route = models.ForeignKey(u"Route", blank=True, null=True,
related_name='associated_marker')
+ weight = models.IntegerField(_(u"Quantity"), blank=True, null=True,
+ default=0)
description = models.TextField(_(u"Description"), blank=True, null=True)
is_front_page = models.NullBooleanField(_(u"Is front page"), blank=True,
null=True)
@@ -534,6 +539,10 @@ class Marker(GeographicItem):
def geom_attr(self):
return 'point'
+ @property
+ def has_weight(self):
+ return bool(self.categories.filter(weighted=True).count())
+
class Meta:
ordering = ('status', 'name')
verbose_name = _(u"Point of interest")
@@ -615,6 +624,19 @@ class Marker(GeographicItem):
val = values[unicode(propertymodel.id)]
self.setProperty(propertymodel, val)
+ def _getItems(self, base_dct={"properties":{}}):
+ '''Return a dict representation for json
+ '''
+ item = base_dct
+ item["geometry"] = {"type": "Point",
+ "coordinates": [ self.point.x, self.point.y ]
+ }
+ item["properties"]['pk'] = self.pk
+ item["properties"]['name'] = self.name
+ if self.weight:
+ item["properties"]['weight'] = self.weight
+ return item
+
def getGeoJSON(self, categories_id=[]):
'''Return a GeoJSON string
'''
@@ -629,14 +651,24 @@ class Marker(GeographicItem):
if cat.hover_icon else '',
'icon_width':cat.icon.image.width,
'icon_height':cat.icon.image.height,
- 'category_name':json.dumps(cat.name)}
+ 'category_name':json.dumps(cat.name),}
+ items['weight'] = ''
+ if cat.weighted:
+ if not self.weight:
+ continue
+ items['weight'] = u', "weight":%d' % self.weight
+ if cat.color_theme and cat.color_theme.colors.count():
+ items['weight'] += u', "colors":["#%s"]' % '", "#'.join(
+ [color.code for color in cat.color_theme.colors.\
+ order_by('order').all()])
jsons.append(u'{"type":"Feature", "geometry":%(geometry)s, '\
u'"properties":{"pk": %(id)d, "name": %(name)s, '\
u'"icon_path":"%(icon_path)s", '\
u'"icon_hover_path":"%(icon_hover_path)s", '\
u'"icon_width":%(icon_width)d, '\
u'"icon_height":%(icon_height)d, '\
- u'"category_name":%(category_name)s}}' % items)
+ u'"category_name":%(category_name)s'\
+ u'%(weight)s}}' % items)
return ",".join(jsons)
@property
@@ -1098,6 +1130,13 @@ class Route(GeographicItem):
properties.append(property)
return properties
+ def _getItems(self, dct={'properties':{}}):
+ dct['geometry'] = { "type": "LineString",
+ "coordinates": [[point.x, point.y]
+ for point in self.route]}
+ dct['properties'].update({'id':self.id, 'name':self.name})
+ return dct
+
def getGeoJSON(self, color="#000"):
'''Return a GeoJSON string
'''