diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-07 14:11:49 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-07 14:11:49 +0200 |
commit | d3ca19836857031289a10d2aed8e5794c11f63cc (patch) | |
tree | 2c4b3245d20848c43fba4dac264578ee37aa9920 | |
parent | 494b96ec210a9eefa00fbabc499d4ed240580ab3 (diff) | |
download | Chimère-d3ca19836857031289a10d2aed8e5794c11f63cc.tar.bz2 Chimère-d3ca19836857031289a10d2aed8e5794c11f63cc.zip |
Add automaticaly a begin POI for new route (closes #300)
Better management of properties saving.
-rw-r--r-- | chimere/main/forms.py | 95 | ||||
-rw-r--r-- | chimere/main/models.py | 26 | ||||
-rw-r--r-- | chimere/static/edit_route_map.js | 4 |
3 files changed, 70 insertions, 55 deletions
diff --git a/chimere/main/forms.py b/chimere/main/forms.py index 11b1d99..7273281 100644 --- a/chimere/main/forms.py +++ b/chimere/main/forms.py @@ -147,7 +147,7 @@ required=False)' % (property.order, property.id, property.name, def save(self, *args, **keys): """ - Custom save method in order to manage associeted properties + Custom save method in order to manage associated properties """ new_marker = super(MarkerAdminForm, self).save(*args, **keys) if 'status' not in self.cleaned_data: @@ -157,27 +157,10 @@ required=False)' % (property.order, property.id, property.name, new_marker.available_date = datetime.replace(datetime.utcnow(), tzinfo=tz) new_marker.save() - # save each property - for propertymodel in PropertyModel.objects.filter(available=True): - properties = Property.objects.filter(marker=new_marker, - propertymodel=propertymodel) - # new property - if not properties: - new_property = Property.objects.create(marker=new_marker, - propertymodel=propertymodel, - value=self.cleaned_data['property_%d_%d' % ( - propertymodel.order, propertymodel.id)]) - new_property.save() - else: - # in case of multiple edition as the same time delete arbitrary - # the others - if len(properties) > 1: - for property in properties[1:]: - property.delete() - property = properties[0] - property.value = self.cleaned_data['property_%d_%d' % ( - propertymodel.order, propertymodel.id)] - property.save() + # save properties + properties = dict([(k.split('_')[-1], self.cleaned_data[k]) \ + for k in self.cleaned_data.keys() if k.startswith('property_')]) + new_marker.saveProperties(properties) return new_marker class MarkerForm(MarkerAdminForm): @@ -192,12 +175,6 @@ class RouteAdminForm(forms.ModelForm): """ Main form for route """ - """ - # declare properties - for property in PropertyModel.objects.filter(available=True): - exec('property_%d_%d = forms.CharField(label="%s", widget=%s, \ -required=False)' % (property.order, property.id, property.name, - PropertyModel.TYPE_WIDGET[property.type]))""" class Meta: model = Route @@ -223,43 +200,51 @@ required=False)' % (property.order, property.id, property.name, def save(self, *args, **keys): """ - Custom save method in order to manage associeted properties + Custom save method in order to manage status """ - new_marker = super(RouteAdminForm, self).save(*args, **keys) + new_route = super(RouteAdminForm, self).save(*args, **keys) if 'status' not in self.cleaned_data: - new_marker.status = 'S' - new_marker.save() - """ - # save each property - for propertymodel in PropertyModel.objects.filter(available=True): - properties = Property.objects.filter(marker=new_marker, - propertymodel=propertymodel) - # new property - if not properties: - new_property = Property.objects.create(marker=new_marker, - propertymodel=propertymodel, - value=self.cleaned_data['property_%d_%d' % ( - propertymodel.order, propertymodel.id)]) - new_property.save() - else: - # in case of multiple edition as the same time delete arbitrary - # the others - if len(properties) > 1: - for property in properties[1:]: - property.delete() - property = properties[0] - property.value = self.cleaned_data['property_%d_%d' % ( - propertymodel.order, propertymodel.id)] - property.save()""" - return new_marker + new_route.status = 'S' + new_route.save() + return new_route class RouteForm(RouteAdminForm): """ Form for the edit page """ + picture = forms.ImageField(label=_("Image"), required=False) + point = forms.CharField(label="", required=False, widget=forms.HiddenInput) class Meta: model = Route exclude = ('status',) + # marker properties + for property in PropertyModel.objects.filter(available=True): + exec('property_%d_%d = forms.CharField(label="%s", widget=%s, \ +required=False)' % (property.order, property.id, property.name, + PropertyModel.TYPE_WIDGET[property.type])) + + def save(self, *args, **keys): + """ + Custom save method in order to manage associated marker + """ + new_route = super(RouteForm, self).save(*args, **keys) + marker_fields = [f.attname for f in Marker._meta.fields] + marker_dct = dict([(k, self.cleaned_data[k]) for k in self.cleaned_data + if k in marker_fields]) + marker_dct['route'] = new_route + if 'status' not in marker_dct: + marker_dct['status'] = "S" + categories = [] + new_marker = Marker(**marker_dct) + new_marker.save() + for category in self.cleaned_data['categories']: + new_marker.categories.add(category) + new_marker.save() + # save properties + properties = dict([(k.split('_')[-1], self.cleaned_data[k]) \ + for k in self.cleaned_data.keys() if k.startswith('property_')]) + new_marker.saveProperties(properties) + return new_route class AreaAdminForm(forms.ModelForm): """ diff --git a/chimere/main/models.py b/chimere/main/models.py index 198b837..40204d1 100644 --- a/chimere/main/models.py +++ b/chimere/main/models.py @@ -257,6 +257,32 @@ Format YYYY-MM-DD")) properties.append(property) return properties + def saveProperties(self, values): + """ + Save properties + """ + for propertymodel in PropertyModel.objects.filter(available=True): + properties = Property.objects.filter(marker=self, + propertymodel=propertymodel).all() + # in case of multiple edition as the same time delete arbitrary + # the others + if len(properties) > 1: + for property in properties[1:]: + property.delete() + val = u"" + if unicode(propertymodel.id) in values: + val = values[unicode(propertymodel.id)] + # new property + if not properties: + new_property = Property.objects.create(marker=self, + propertymodel=propertymodel, + value=val) + new_property.save() + else: + property = properties[0] + property.value = val + property.save() + def getGeoJSON(self, categories_id=[]): '''Return a GeoJSON string ''' diff --git a/chimere/static/edit_route_map.js b/chimere/static/edit_route_map.js index 486724d..19d46bb 100644 --- a/chimere/static/edit_route_map.js +++ b/chimere/static/edit_route_map.js @@ -72,6 +72,10 @@ function updateForm(event) { current_geo.transform(map.getProjectionObject(), epsg_display_projection); document.getElementById('id_route').value = current_geo; + var vertices = current_geo.getVertices(); + if (vertices){ + document.getElementById('id_point').value = vertices[0]; + } } |