summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-04-12 13:25:03 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-04-12 13:25:03 +0200
commit75f27ba450a1658605c12255298769192d9483a0 (patch)
tree0fa56b7f5a6c9b65a61d711ae817f46cb04f45e4
parentcfac5917a5677bfac99d57441c3be98e65d4be15 (diff)
downloadChimère-75f27ba450a1658605c12255298769192d9483a0.tar.bz2
Chimère-75f27ba450a1658605c12255298769192d9483a0.zip
Admin: allow to manage route directly with a GPX file
-rw-r--r--chimere/admin.py9
-rw-r--r--chimere/forms.py20
2 files changed, 26 insertions, 3 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 6938fca..d54986c 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -49,7 +49,7 @@ from chimere.models import Category, Icon, SubCategory, Marker, \
PropertyModel, News, Route, Area, ColorTheme, Color, \
MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\
PropertyModelChoice, Page, get_areas_for_user, Overlay, \
- ImporterKeyCategories, SubCategoryUserLimit, AreaOverlays
+ ImporterKeyCategories, SubCategoryUserLimit, AreaOverlays, RouteFile
from chimere.utils import ShapefileManager, KMLManager, CSVManager
@@ -306,7 +306,8 @@ ROUTE_FIELDSETS = deepcopy(MARKER_FIELDSETS)
ROUTE_FIELDSETS[0][1]['fields'][0] = 'route'
ROUTE_FIELDSETS[0][1]['fields'].pop(ROUTE_FIELDSETS[0][1]['fields'].index(
'description'))
-ROUTE_FIELDSETS[3][1]['fields'] = ('ref_item', 'associated_file',)
+ROUTE_FIELDSETS[3][1]['fields'] = ('ref_item', 'associated_file',
+ 'read_from_file')
POLYGON_FIELDSETS = deepcopy(MARKER_FIELDSETS)
POLYGON_FIELDSETS[0][1]['fields'][0] = 'polygon'
POLYGON_FIELDSETS[0][1]['fields'].pop(POLYGON_FIELDSETS[0][1]['fields'].index(
@@ -405,6 +406,8 @@ class PictureRouteInline(PictureMarkerInline):
class MultimediaRouteInline(MultimediaMarkerInline):
exclude = ('polygon', 'marker')
+admin.site.register(RouteFile)
+
class RouteAdmin(MarkerAdmin):
"""
@@ -415,7 +418,7 @@ class RouteAdmin(MarkerAdmin):
list_filter = ('status', AreaRouteListFilter, 'categories')
exclude = ['height', 'width']
form = RouteAdminForm
- readonly_fields = ('associated_file', 'ref_item')
+ readonly_fields = ('ref_item',)
actions = [validate, disable, managed_modified, export_to_kml,
export_to_shapefile, export_to_csv]
fieldsets = ROUTE_FIELDSETS
diff --git a/chimere/forms.py b/chimere/forms.py
index 33da85d..352a7b1 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -469,10 +469,15 @@ class RouteAdminForm(forms.ModelForm):
"""
is_admin = True
name = forms.CharField(label=_("Name"), required=True)
+ read_from_file = forms.BooleanField(
+ label=_("Lire la géométrie depuis le fichier"), required=False)
class Meta:
model = Route
exclude = []
+ widgets = {
+ 'categories': forms.SelectMultiple
+ }
def __init__(self, *args, **keys):
"""
@@ -500,7 +505,11 @@ class RouteAdminForm(forms.ModelForm):
if 'subcategories' in keys else []
super(RouteAdminForm, self).__init__(*args, **keys)
if self.is_admin:
+ self.fields['route'].required = False
+ self.fields['categories'].widget = forms.SelectMultiple(
+ choices=self.fields['categories'].choices)
return
+ self.fields.pop('read_from_file')
if not settings.CHIMERE_SEARCH_ENGINE and 'keywords' in self.fields:
self.fields.pop('keywords')
if settings.CHIMERE_DAYS_BEFORE_EVENT:
@@ -518,6 +527,17 @@ class RouteAdminForm(forms.ModelForm):
continue
self.fields.pop(k)
+ def clean(self):
+ if self.cleaned_data.get('read_from_file', None) and \
+ self.cleaned_data.get('associated_file', None):
+ self.cleaned_data['associated_file'].process()
+ self.cleaned_data['route'] = \
+ self.cleaned_data['associated_file'].route
+ if not self.cleaned_data.get('route', None):
+ raise forms.ValidationError("Vous devez rentrer un trajet ou lire "
+ "celui-ci depuis un fichier.")
+ return self.cleaned_data
+
def save(self, *args, **keys):
"""
Custom save method in order to manage associated properties