diff options
Diffstat (limited to 'main')
| -rw-r--r-- | main/actions.py | 2 | ||||
| -rw-r--r-- | main/models.py | 40 | ||||
| -rw-r--r-- | main/views.py | 37 |
3 files changed, 54 insertions, 25 deletions
diff --git a/main/actions.py b/main/actions.py index a4bf06d..77f8a46 100644 --- a/main/actions.py +++ b/main/actions.py @@ -30,4 +30,4 @@ class Action: self.id, self.path, self.label = id, main_path + path, label actions = [Action('view', '', _('View')), Action('edit', 'edit', _('Add')), - Action('edit-route', 'edit-route', _('Add route'))] + Action('edit_route', 'edit_route', _('Add route'))] 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 diff --git a/main/views.py b/main/views.py index f0cc604..a7a4da7 100644 --- a/main/views.py +++ b/main/views.py @@ -77,7 +77,7 @@ def edit(request): # set the submited status marker.status = 'S' marker.save() - return HttpResponseRedirect('/chimere/submited') + return HttpResponseRedirect('/chimere/submited/edit') else: # An unbound form form = MarkerForm() @@ -88,7 +88,7 @@ def edit(request): 'media_path':settings.MEDIA_URL, 'form':form, 'extra_head':form.media, - 'sub_categories':SubCategory.getAvailable(), + 'sub_categories':SubCategory.getAvailable(['M', 'B']), 'point_widget':PointChooserWidget().render('point', None), 'properties':declared_fields } @@ -111,18 +111,18 @@ def editRoute(request): # set the submited status route.status = 'S' route.save() - return HttpResponseRedirect('/chimere/submited') + return HttpResponseRedirect('/chimere/submited/edit_route') else: # An unbound form form = RouteForm() # get the « manualy » declared_fields. Ie: properties declared_fields = form.declared_fields.keys() - response_dct = {'actions':actions, 'action_selected':'edit-route', + response_dct = {'actions':actions, 'action_selected':'edit_route', 'error_message':'', 'media_path':settings.MEDIA_URL, 'form':form, 'extra_head':form.media, - 'sub_categories':SubCategory.getAvailable(), + 'sub_categories':SubCategory.getAvailable(['R', 'B']), 'route_widget':RouteChooserWidget().render('route', None), 'properties':declared_fields } @@ -139,11 +139,12 @@ def welcome(request, display=None): response_dct['news_lst'] = News.objects.filter(available=True) return loader.render_to_string('welcome.html', response_dct) -def submited(request): +def submited(request, action): """ Successful submission page """ - response_dct = {'actions':actions, 'action_selected':'edit', + print action + response_dct = {'actions':actions, 'action_selected':action, 'media_path':settings.MEDIA_URL,} return render_to_response('submited.html', response_dct) @@ -174,3 +175,25 @@ def getMarkers(request, category_ids): data = '{"type": "FeatureCollection", "features":[%s]}' % \ ",".join([marker.getGeoJSON() for marker in markers]) return HttpResponse(data) + +def getGeoObjects(request, category_ids): + ''' + Get the JSON for a route + ''' + try: + query = Route.objects.filter(status='A', + subcategory__in=category_ids.split('_')) + except: + return HttpResponse('no results') + geo_objects = list(query) + try: + query = Marker.objects.filter(status='A', + subcategory__in=category_ids.split('_')) + except: + return HttpResponse('no results') + geo_objects += list(query) + if not geo_objects: + return HttpResponse('no results') + data = '{"type": "FeatureCollection", "features":[%s]}' % \ + ",".join([geo_object.getGeoJSON() for geo_object in geo_objects]) + return HttpResponse(data)
\ No newline at end of file |
