summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commitd3ca19836857031289a10d2aed8e5794c11f63cc (patch)
tree2c4b3245d20848c43fba4dac264578ee37aa9920
parent494b96ec210a9eefa00fbabc499d4ed240580ab3 (diff)
downloadChimè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.py95
-rw-r--r--chimere/main/models.py26
-rw-r--r--chimere/static/edit_route_map.js4
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];
+ }
}