summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/wizards.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-01-10 00:26:07 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-01-10 00:26:07 +0100
commitc0f14049777002bf0849f04dabc99a6bc66de295 (patch)
tree777c2f1bcfc1cde0056a64b04d0ee322948ade56 /archaeological_warehouse/wizards.py
parent229a5559e9933ea76020963ca3778906d39279d4 (diff)
parent1191cb323ca087ea05d5f58acb555b8e2d266801 (diff)
downloadIshtar-c0f14049777002bf0849f04dabc99a6bc66de295.tar.bz2
Ishtar-c0f14049777002bf0849f04dabc99a6bc66de295.zip
Merge branch 'master' into v0.9
Conflicts: archaeological_files/migrations/0014_auto__add_field_file_requested_operation_type__add_field_file_organiza.py
Diffstat (limited to 'archaeological_warehouse/wizards.py')
-rw-r--r--archaeological_warehouse/wizards.py95
1 files changed, 93 insertions, 2 deletions
diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py
index 62b441e00..817ed75a5 100644
--- a/archaeological_warehouse/wizards.py
+++ b/archaeological_warehouse/wizards.py
@@ -20,8 +20,12 @@
from django.shortcuts import render_to_response
from django.template import RequestContext
+from ishtar_common.forms import reverse_lazy
+from ishtar_common.wizards import Wizard, DeletionWizard
from archaeological_finds.wizards import TreatmentWizard
-from archaeological_finds.models import Treatment
+
+from archaeological_finds.models import Treatment, TreatmentType
+import models
class PackagingWizard(TreatmentWizard):
@@ -32,11 +36,98 @@ class PackagingWizard(TreatmentWizard):
dct = self.get_extra_model(dct, form_list)
obj = self.get_current_saved_object()
dct['location'] = dct['container'].location
- items = dct.pop('basket')
+ items = None
+ if 'items' in dct:
+ items = dct.pop('items')
+ if 'basket' in dct:
+ if not items:
+ items = dct.pop('basket')
+ else:
+ dct.pop('basket')
treatment = Treatment(**dct)
extra_args_for_new = {"container": dct['container']}
treatment.save(items=items, user=self.request.user,
extra_args_for_new=extra_args_for_new)
+ packaging = TreatmentType.objects.get(txt_idx='packaging')
+ treatment.treatment_types.add(packaging)
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
+ wizard_done_window = reverse_lazy('show-warehouse')
+
+
+class WarehouseModificationWizard(Wizard):
+ model = models.Warehouse
+ modification = True
+ wizard_done_window = reverse_lazy('show-warehouse')
+
+
+class WarehouseDeletionWizard(DeletionWizard):
+ model = models.Warehouse
+
+
+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(ContainerWizard, self).get_form_kwargs(step)
+ if step == 'localisation-' + self.url_name:
+ container_pk = self.session_get_value(
+ 'selec-' + self.url_name, 'pk')
+ q = models.Container.objects.filter(pk=container_pk)
+ if q.count():
+ kwargs['container'] = q.all()[0]
+ warehouse_pk = self.session_get_value(
+ 'container-' + self.url_name, 'location')
+ q = models.Warehouse.objects.filter(pk=warehouse_pk)
+ if q.count():
+ kwargs['warehouse'] = q.all()[0]
+ return kwargs
+
+ def done(self, form_list, **kwargs):
+ """
+ Save the localisation
+ """
+ super(ContainerWizard, self).done(form_list)
+ 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
+ if container and form.prefix == 'localisation-' + self.url_name:
+ 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))
+
+
+class ContainerModificationWizard(ContainerWizard):
+ modification = True
+
+
+class ContainerDeletionWizard(DeletionWizard):
+ model = models.Container
+ fields = ['container_type', 'reference', 'comment', 'location', 'index',
+ 'cached_label']