#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2012-2016 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # 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' def save_model(self, dct, m2m, whole_associated_models, form_list, return_object): dct = self.get_extra_model(dct, form_list) obj = self.get_current_saved_object() dct['location'] = dct['container'].location items = 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) 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))