diff options
| -rw-r--r-- | main/admin.py | 11 | ||||
| -rw-r--r-- | main/models.py | 30 | ||||
| -rw-r--r-- | main/views.py | 22 | 
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)  | 
