diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-16 20:41:28 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-16 20:41:28 +0100 | 
| commit | e27a0ad3ad89f1e990d6f03f1e4486e3b85a5c77 (patch) | |
| tree | b78d3d870f2c4657136f6be4eb84b817fcefeb00 | |
| parent | 8803f40c112760b5142c61858d7b854697048a61 (diff) | |
| download | Ishtar-e27a0ad3ad89f1e990d6f03f1e4486e3b85a5c77.tar.bz2 Ishtar-e27a0ad3ad89f1e990d6f03f1e4486e3b85a5c77.zip | |
Fix container creation (refs #3415)
| -rw-r--r-- | archaeological_warehouse/models.py | 9 | ||||
| -rw-r--r-- | archaeological_warehouse/tests.py | 58 | ||||
| -rw-r--r-- | archaeological_warehouse/wizards.py | 3 | ||||
| -rw-r--r-- | ishtar_common/wizards.py | 4 | 
4 files changed, 64 insertions, 10 deletions
| diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 9ff615332..038910d17 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -211,6 +211,15 @@ class Container(LightHistorizedItem):              ]          return u" | ".join(locas) +    def pre_save(self): +        if not self.index: +            q = Container.objects.filter(responsible=self.responsible).order_by( +                '-index') +            if q.count(): +                self.index = q.all()[0].index + 1 +            else: +                self.index = 1 +      def save(self, *args, **kwargs):          super(Container, self).save(*args, **kwargs) diff --git a/archaeological_warehouse/tests.py b/archaeological_warehouse/tests.py index f4ce52732..938d1cbc0 100644 --- a/archaeological_warehouse/tests.py +++ b/archaeological_warehouse/tests.py @@ -56,7 +56,31 @@ class ContainerWizardCreationTest(WizardTest, FindInit, TestCase):                  },                  'localisation-container_creation': []              }, -        ) +        ), +        FormData( +            'Other container on the same warehouse', +            form_datas={ +                'container-container_creation': { +                    'reference': 'hop-ref2', +                    'container_type': None, +                    'location': None, +                    'responsible': None, +                }, +                'localisation-container_creation': [] +            }, +        ), +        FormData( +            'Container creation with location', +            form_datas={ +                'container-container_creation': { +                    'reference': 'hop-ref3', +                    'container_type': None, +                    'location': None, +                    'responsible': None, +                }, +                'localisation-container_creation': [] +            }, +        ),      ]      def pre_wizard(self): @@ -64,17 +88,37 @@ class ContainerWizardCreationTest(WizardTest, FindInit, TestCase):              name="Main",              warehouse_type=models.WarehouseType.objects.all()[0]          ) -        forms_data = self.form_datas[0].form_datas[ -            'container-container_creation'] -        forms_data["responsible"] = main_warehouse.pk -        forms_data["location"] = main_warehouse.pk -        forms_data["container_type"] = models.ContainerType.objects.all()[0].pk +        main_data = self.form_datas[0].form_datas +        main_data_bis = self.form_datas[1].form_datas +        alt_data = self.form_datas[2].form_datas +        for data in [main_data, main_data_bis, alt_data]: +            forms_data = data['container-container_creation'] +            forms_data["responsible"] = main_warehouse.pk +            forms_data["location"] = main_warehouse.pk +            forms_data["container_type"] = \ +                models.ContainerType.objects.all()[0].pk +        alt_warehouse = models.Warehouse.objects.create( +            name="Alt", +            warehouse_type=models.WarehouseType.objects.all()[0] +        ) +        div = models.WarehouseDivision.objects.create(label='division') +        div_link = models.WarehouseDivisionLink.objects.create( +            warehouse=alt_warehouse, division=div) +        alt_data['container-container_creation']["location"] = alt_warehouse.pk +        alt_data['localisation-container_creation'] = { +            'division_{}'.format(div_link.pk): 'Combien ?' +        } +          self.container_number = models.Container.objects.count() +        self.localisation_detail_number = \ +            models.ContainerLocalisation.objects.count()          super(ContainerWizardCreationTest, self).pre_wizard()      def post_wizard(self):          self.assertEqual(models.Container.objects.count(), -                         self.container_number + 1) +                         self.container_number + 3) +        self.assertEqual(models.ContainerLocalisation.objects.count(), +                         self.localisation_detail_number + 1)  class ContainerTest(FindInit, TestCase): diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index 817ed75a5..0adb06f75 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -101,7 +101,8 @@ class ContainerWizard(Wizard):          for idx, form in enumerate(form_list):              if not form.is_valid():                  return self.render(form) -            container = self.get_current_object() or self.current_object +            container = self.get_current_object() or \ +                hasattr(self, 'current_object') and self.current_object              if container and form.prefix == 'localisation-' + self.url_name:                  for div_name in form.cleaned_data:                      try: diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 4f0295421..ce1333c89 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -570,8 +570,8 @@ class Wizard(NamedUrlWizardView):              # remove non relevant fields              all_field_names = self.get_saved_model()._meta.get_all_field_names()              for k in dct.copy(): -                if (k.endswith('_id') and k[:-3] not in all_field_names) and \ -                        k not in all_field_names: +                if not (k.endswith('_id') and k[:-3] in all_field_names) \ +                        and k not in all_field_names:                      dct.pop(k)              saved_args = self.saved_args.copy()              for k in saved_args: | 
