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) | 
