summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/admin.py11
-rw-r--r--main/models.py30
-rw-r--r--main/views.py22
3 files changed, 50 insertions, 13 deletions
diff --git a/main/admin.py b/main/admin.py
index 554651f..824a10d 100644
--- a/main/admin.py
+++ b/main/admin.py
@@ -22,7 +22,7 @@ Settings for administration pages
"""
from chimere.main.models import Category, Icon, SubCategory, Marker, \
- PropertyModel, News, Route, Area
+ PropertyModel, News, Route, Area, ColorTheme, Color
from chimere.main.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
NewsAdminForm
from chimere.main.widgets import TextareaWidget
@@ -67,6 +67,12 @@ class NewsAdmin(admin.ModelAdmin):
"""
form = NewsAdminForm
+class ColorInline(admin.TabularInline):
+ model = Color
+
+class ColorThemeAdmin(admin.ModelAdmin):
+ inlines = [ColorInline,]
+
# register of differents database fields
admin.site.register(News, NewsAdmin)
admin.site.register(Icon)
@@ -74,5 +80,6 @@ admin.site.register(Category)
admin.site.register(SubCategory, SubCategoryAdmin)
admin.site.register(Marker, MarkerAdmin)
admin.site.register(Route, RouteAdmin)
-admin.site.register(Area, AreaAdmin)
admin.site.register(PropertyModel)
+admin.site.register(Area, AreaAdmin)
+admin.site.register(ColorTheme, ColorThemeAdmin)
diff --git a/main/models.py b/main/models.py
index 16796d0..a2f8de5 100644
--- a/main/models.py
+++ b/main/models.py
@@ -42,6 +42,27 @@ class News(models.Model):
class Meta:
verbose_name = _("News")
+class ColorTheme(models.Model):
+ """Color theme
+ """
+ name = models.CharField(_("Name"), max_length=150)
+ def __unicode__(self):
+ return self.name
+ class Meta:
+ verbose_name = _("Color theme")
+
+class Color(models.Model):
+ """Color
+ """
+ code = models.CharField(_("Code"), max_length=6)
+ order = models.IntegerField(_("Ordre"))
+ color_theme = models.ForeignKey(ColorTheme, verbose_name=_("Color theme"))
+ def __unicode__(self):
+ return self.code
+ class Meta:
+ ordering = ["order"]
+ verbose_name = _("Color")
+
class Category(models.Model):
"""Category of Point Of Interest (POI)
"""
@@ -72,7 +93,7 @@ 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)
+ color_theme = models.ForeignKey(ColorTheme, verbose_name=_("Color theme"))
order = models.IntegerField(_("Order"))
TYPE = (('M', _('Marker')),
('R', _('Route')),
@@ -229,12 +250,11 @@ class Route(models.Model):
properties.append(property)
return properties
- def getGeoJSON(self):
+ def getGeoJSON(self, color="#000"):
'''Return a GeoJSON string
'''
- color = '#000'
- if self.subcategory.color:
- color = self.subcategory.color
+ if '#' not in color:
+ color = '#' + color
return """{"type":"Feature", "geometry":%(geometry)s, \
"properties":{"pk": %(id)d, "name": "%(name)s", \
"color":"%(color)s"}}""" % {'id':self.id, 'name':self.name,
diff --git a/main/views.py b/main/views.py
index 0c304ec..aba24f0 100644
--- a/main/views.py
+++ b/main/views.py
@@ -31,7 +31,7 @@ from django.core import serializers
from chimere import settings
from chimere.main.actions import actions
from chimere.main.models import SubCategory, PropertyModel, Marker, Route, \
- News, Area
+ News, Area, Color
from chimere.main.widgets import getMapJS, PointChooserWidget, \
RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS
@@ -196,15 +196,25 @@ def getGeoObjects(request, category_ids, status='A'):
subcategory__in=category_ids.split('_'))
except:
return HttpResponse('no results')
- geo_objects = list(query)
+ query.order_by('subcategory')
+ routes = list(query)
+ jsons = []
+ current_cat, colors, idx = None, None, 0
+ for route in routes:
+ if not current_cat or current_cat != route.subcategory:
+ idx = 0
+ current_cat = route.subcategory
+ colors = list(Color.objects.filter(color_theme=\
+ route.subcategory.color_theme))
+ jsons.append(route.getGeoJSON(color=colors[idx % len(colors)].code))
+ idx += 1
try:
query = Marker.objects.filter(status__in=status,
subcategory__in=category_ids.split('_'))
except:
return HttpResponse('no results')
- geo_objects += list(query)
- if not geo_objects:
+ jsons += [geo_object.getGeoJSON() for geo_object in list(query)]
+ if not jsons:
return HttpResponse('no results')
- data = '{"type": "FeatureCollection", "features":[%s]}' % \
- ",".join([geo_object.getGeoJSON() for geo_object in geo_objects])
+ data = '{"type": "FeatureCollection", "features":[%s]}' % ",".join(jsons)
return HttpResponse(data)