diff options
-rw-r--r-- | archaeological_warehouse/forms.py | 8 | ||||
-rw-r--r-- | archaeological_warehouse/ishtar_menu.py | 10 | ||||
-rw-r--r-- | archaeological_warehouse/urls.py | 6 | ||||
-rw-r--r-- | archaeological_warehouse/views.py | 13 | ||||
-rw-r--r-- | archaeological_warehouse/wizards.py | 23 | ||||
-rw-r--r-- | ishtar_common/wizards.py | 14 |
6 files changed, 49 insertions, 25 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index d51dcf1f4..846e7cb46 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -143,6 +143,8 @@ class WarehouseForm(ManageOldType, forms.Form): class ContainerForm(ManageOldType, forms.Form): form_label = _(u"Container") + associated_models = {'container_type': models.ContainerType, + 'location': models.Warehouse} reference = forms.CharField(label=_(u"Ref.")) container_type = forms.ChoiceField(label=_(u"Container type"), choices=[]) location = forms.IntegerField( @@ -203,6 +205,12 @@ ContainerFormSelection = get_form_selection( _(u"You should select a container."), new=True, new_message=_(u"Add a new container")) +MainContainerFormSelection = get_form_selection( + 'ContainerFormSelection', _(u"Container search"), 'pk', + models.Container, ContainerSelect, 'get-container', + _(u"You should select a container.") +) + class BasePackagingForm(SelectFindBasketForm): form_label = _(u"Packaging") diff --git a/archaeological_warehouse/ishtar_menu.py b/archaeological_warehouse/ishtar_menu.py index 7f182d02b..6bc65c9c7 100644 --- a/archaeological_warehouse/ishtar_menu.py +++ b/archaeological_warehouse/ishtar_menu.py @@ -45,9 +45,13 @@ MENU_SECTIONS = [ MenuItem('warehouse_modification', _(u"Modification"), model=models.Warehouse, access_controls=['change_warehouse',]), - MenuItem('container_localisation', _(u"Container localisation"), - model=models.Warehouse, - access_controls=['change_warehouse',]), + SectionItem( + 'containers', _(u"Containers"), + childs=[ + MenuItem('container_modification', _(u"Modification"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + ]) ])) ] """ diff --git a/archaeological_warehouse/urls.py b/archaeological_warehouse/urls.py index 5c18200db..cb04d6cbc 100644 --- a/archaeological_warehouse/urls.py +++ b/archaeological_warehouse/urls.py @@ -57,8 +57,8 @@ urlpatterns += patterns( check_rights(['change_warehouse'])( views.warehouse_modification_wizard), name='warehouse_modification'), - url(r'^container_localisation/(?P<step>.+)?$', + url(r'^container_modification/(?P<step>.+)?$', check_rights(['change_warehouse'])( - views.container_localisation_wizard), - name='container_localisation'), + views.container_modification_wizard), + name='container_modification'), ) diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index 5366aa53b..ac81a9897 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -110,12 +110,13 @@ warehouse_modification_wizard = WarehouseModificationWizard.as_view([ ) -container_localisation_wizard = LocalisationWizard.as_view([ - ('seleccontainer-container_localisation', ContainerFormSelection), - ('localisation-container_localisation', LocalisationForm), - ('final-container_localisation', FinalForm)], - label=_(u"Container localisation"), - url_name='container_localisation', +container_modification_wizard = ContainerModificationWizard.as_view([ + ('selec-container_modification', MainContainerFormSelection), + ('container-container_modification', ContainerModifyForm), + ('localisation-container_modification', LocalisationForm), + ('final-container_modification', FinalForm)], + label=_(u"Container modification"), + url_name='container_modification', ) """ diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index bdb3959dc..4bdc150cc 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -66,18 +66,20 @@ class WarehouseModificationWizard(Wizard): wizard_done_window = reverse_lazy('show-warehouse') -class LocalisationWizard(Wizard): +class ContainerWizard(Wizard): + model = models.Container wizard_templates = { 'localisation-container_localisation': 'ishtar/wizard/wizard_containerlocalisation.html', } + ignore_init_steps = ['localisation'] def get_form_kwargs(self, step=None): - kwargs = super(LocalisationWizard, self).get_form_kwargs(step) - if step == 'localisation-container_localisation': + kwargs = super(ContainerWizard, self).get_form_kwargs(step) + if step == 'localisation-' + self.url_name: container = None container_pk = self.session_get_value( - 'seleccontainer-container_localisation', 'container') + 'selec-' + self.url_name, 'pk') q = models.Container.objects.filter(pk=container_pk) if q.count(): container = q.all()[0] @@ -88,17 +90,13 @@ class LocalisationWizard(Wizard): """ Save the localisation """ + super(ContainerWizard, self).done(form_list) container = None for idx, form in enumerate(form_list): if not form.is_valid(): return self.render(form) - if not idx: # container form - try: - container = models.Container.objects.get( - pk=form.cleaned_data['container']) - except models.Container.DoesNotExist: - return self.render(form) - elif idx == 1: # localisation form + container = self.get_current_object() + if idx == 2: # localisation form for div_name in form.cleaned_data: try: division = models.WarehouseDivisionLink.objects.get( @@ -117,3 +115,6 @@ class LocalisationWizard(Wizard): return render_to_response( self.wizard_done_template, {}, context_instance=RequestContext(self.request)) + +class ContainerModificationWizard(ContainerWizard): + modification = True diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 6e5216c6a..ad16ce0e1 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -127,6 +127,8 @@ class Wizard(NamedUrlWizardView): wizard_templates = {} filter_owns = {} current_obj_slug = '' + current_object_key = 'pk' + ignore_init_steps = [] file_storage = default_storage saved_args = {} # argument to pass on object save @@ -200,6 +202,10 @@ class Wizard(NamedUrlWizardView): templates = [self.wizard_confirm] + templates return templates + def get_ignore_init_steps(self): + return ['{}-{}'.format(step, self.url_name) for step in + self.ignore_init_steps] + def get_context_data(self, form, **kwargs): """Add previous, next and current steps to manage the wizard path""" context = super(Wizard, self).get_context_data(form) @@ -254,7 +260,8 @@ class Wizard(NamedUrlWizardView): for key in v: form_key = next_step + prefix + key prefixed_values[form_key] = v[key] - if not prefixed_values: + if not prefixed_values and \ + next_step not in self.get_ignore_init_steps(): # simulate a non empty data for form that might be # valid when empty prefixed_values['__non_empty_data'] = '' @@ -481,6 +488,9 @@ class Wizard(NamedUrlWizardView): for k in dct: if k.startswith('pk'): continue + if k not in obj.__class__._meta.get_all_field_names(): + print(k, obj.__class__._meta.get_all_field_names()) + continue # False set to None for images and files if not k.endswith('_id') and ( isinstance(obj.__class__._meta.get_field(k), FileField) or @@ -914,7 +924,7 @@ class Wizard(NamedUrlWizardView): current_obj = None main_form_key = 'selec-' + self.url_name try: - idx = self.session_get_value(main_form_key, 'pk') + idx = self.session_get_value(main_form_key, self.current_object_key) idx = int(idx) current_obj = self.model.objects.get(pk=idx) except(TypeError, ValueError, ObjectDoesNotExist): |