summaryrefslogtreecommitdiff
path: root/archaeological_operations/wizards.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/wizards.py')
-rw-r--r--archaeological_operations/wizards.py85
1 files changed, 54 insertions, 31 deletions
diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py
index cc9e87118..821d5eedc 100644
--- a/archaeological_operations/wizards.py
+++ b/archaeological_operations/wizards.py
@@ -91,11 +91,13 @@ class OperationWizard(Wizard):
"""
Obtention des villes disponibles
"""
- general_form_key = 'general-' + self.url_name
if not FILES_AVAILABLE:
return -1
+ file_form_key = 'general-' + self.url_name
+ if self.url_name == 'operation_creation':
+ file_form_key = 'filechoice-' + self.url_name
towns = []
- file_id = self.session_get_value(general_form_key, "associated_file")
+ file_id = self.session_get_value(file_form_key, "associated_file")
if file_id:
try:
for town in File.objects.get(pk=int(file_id)
@@ -129,13 +131,14 @@ class OperationWizard(Wizard):
#step = self.determine_step(request, storage)
step = self.steps.current
form = self.get_form_list()[step]
- general_form_key = 'general-' + self.url_name
+ file_form_key = 'general-' + self.url_name
+ if self.url_name == 'operation_creation':
+ file_form_key = 'filechoice-' + self.url_name
# manage the dynamic choice of towns
if step.startswith('towns-') and hasattr(form, 'management_form'):
data['TOWNS'] = self.get_towns()
elif step.startswith('parcels') and hasattr(form, 'management_form'):
- file_id = self.session_get_value(general_form_key,
- "associated_file")
+ file_id = self.session_get_value(file_form_key, "associated_file")
if file_id:
data['PARCELS'] = self.get_available_parcels(file_id)
else:
@@ -172,32 +175,49 @@ class OperationWizard(Wizard):
def get_form_initial(self, step, data=None):
initial = super(OperationWizard, self).get_form_initial(step)
+ if step == 'general-operation_creation':
+ initial.update(self._copy_from_associated_field())
return initial
- '''
- self.form_initialized = False
- if not step.startswith(self.parcel_step_key):
+
+ def __copy_fields(self, item, keys):
+ initial = {}
+ for orig_keys, dest_key in keys:
+ value, c_value = None, item
+ for orig_key in orig_keys:
+ c_value = getattr(c_value, orig_key)
+ if not c_value:
+ break
+ else:
+ value = c_value
+ if not value:
+ continue
+ initial[dest_key] = value
+ return initial
+
+ def _copy_from_associated_field(self):
+ initial = {}
+ file_form_key = 'filechoice-' + self.url_name
+ file_id = self.session_get_value(file_form_key,
+ "associated_file")
+ if not file_id:
return initial
- if initial:
- default = initial[-1].copy()
- if 'parcel_number' in default:
- default.pop('parcel_number')
- initial.append(default)
- # necessary to get the appropriate form number
- #self.form_initialized = True
- elif data:
- numbers, keys = set(), set()
- for k in data:
- items = k.split('-')
- try:
- numbers.add(int(items[-2]))
- except (ValueError, IndexError):
- continue
- keys.add(items[-1])
- if numbers and max(numbers) - 1 > 0:
- initial = [dict([(k, data[step+'-'+unicode(max(numbers)-1)+'-'+k])
- for k in keys if k != 'parcel_number'])]
- #self.form_initialized = True
- return initial'''
+ try:
+ file = File.objects.get(pk=file_id)
+ except File.DoesNotExist:
+ return
+ keys = ((('in_charge', 'pk'), 'in_charge'),
+ (('name',), 'common_name'),
+ (('total_surface',), 'surface'),
+ )
+ initial.update(self.__copy_fields(file, keys))
+ if file.is_preventive():
+ return initial
+ keys = ((('scientist', 'pk'), 'scientist'),
+ (('requested_operation_type', 'pk'), 'operation_type'),
+ (('organization', 'pk'), 'operator'),
+ )
+ initial.update(self.__copy_fields(file, keys))
+ return initial
def post(self, *args, **kwargs):
request = self.request
@@ -206,8 +226,11 @@ class OperationWizard(Wizard):
# add all parcel from available in the archaelogical file
if not post_data.get('add_all_parcels'):
return super(OperationWizard, self).post(*args, **kwargs)
- general_form_key = 'general-' + self.url_name
- file_id = self.session_get_value(general_form_key,
+
+ file_form_key = 'general-' + self.url_name
+ if self.url_name == 'operation_creation':
+ file_form_key = 'filechoice-' + self.url_name
+ file_id = self.session_get_value(file_form_key,
"associated_file")
if not file_id:
return super(OperationWizard, self).post(*args, **kwargs)