diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2014-04-03 13:42:20 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2014-04-03 13:42:20 +0200 |
commit | 43af6dd9f95936284581275f3b762f81e032960b (patch) | |
tree | 4124a46812c68edb65c50679567e93213c6507e6 /archaeological_operations/wizards.py | |
parent | 652e5c07c3dd2e7d825af0713c3d96c54ba56101 (diff) | |
download | Ishtar-43af6dd9f95936284581275f3b762f81e032960b.tar.bz2 Ishtar-43af6dd9f95936284581275f3b762f81e032960b.zip |
Automatic copy of associated archaeological file on operation creation (refs #1745)
Diffstat (limited to 'archaeological_operations/wizards.py')
-rw-r--r-- | archaeological_operations/wizards.py | 85 |
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) |