diff options
Diffstat (limited to 'archaeological_warehouse/wizards.py')
-rw-r--r-- | archaeological_warehouse/wizards.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index 62b441e00..407a58ad6 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -17,12 +17,16 @@ # See the file COPYING for details. +from django.contrib.formtools.wizard.views import NamedUrlWizardView from django.shortcuts import render_to_response from django.template import RequestContext +from ishtar_common.wizards import Wizard from archaeological_finds.wizards import TreatmentWizard from archaeological_finds.models import Treatment +import models + class PackagingWizard(TreatmentWizard): basket_step = 'base-packaging' @@ -40,3 +44,65 @@ class PackagingWizard(TreatmentWizard): res = render_to_response('ishtar/wizard/wizard_done.html', {}, context_instance=RequestContext(self.request)) return return_object and (obj, res) or res + + +class WarehouseWizard(Wizard): + model = models.Warehouse + + +class WarehouseModificationWizard(Wizard): + model = models.Warehouse + modification = True + + +class LocalisationWizard(Wizard): + wizard_templates = { + 'localisation-container_localisation': + 'ishtar/wizard/wizard_containerlocalisation.html', + } + + def get_form_kwargs(self, step=None): + kwargs = super(LocalisationWizard, self).get_form_kwargs(step) + if step == 'localisation-container_localisation': + container = None + container_pk = self.session_get_value( + 'seleccontainer-container_localisation', 'container') + q = models.Container.objects.filter(pk=container_pk) + if q.count(): + container = q.all()[0] + kwargs['container'] = container + return kwargs + + def done(self, form_list, **kwargs): + """ + Save the localisation + """ + 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 + for div_name in form.cleaned_data: + try: + division = models.WarehouseDivisionLink.objects.get( + pk=div_name.split('_')[-1], + warehouse=container.location + ) # check the localisation match with the container + except models.WarehouseDivisionLink.DoesNotExist: + return self.render(form) + localisation, created = \ + models.ContainerLocalisation.objects.get_or_create( + container=container, + division=division + ) + localisation.reference = form.cleaned_data[div_name] + localisation.save() + return render_to_response( + self.wizard_done_template, {}, + context_instance=RequestContext(self.request)) |