diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-20 21:52:43 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-20 21:52:43 +0200 |
commit | 8d594a01220d5cbbe9d6e856d1aef04bbb8daf3e (patch) | |
tree | 1f1887c1153c40cd4323c482856e5f281ec1dc97 /archaeological_warehouse | |
parent | 980bf7d6c548f09636b94fd53e575ab8c2e10d2e (diff) | |
download | Ishtar-8d594a01220d5cbbe9d6e856d1aef04bbb8daf3e.tar.bz2 Ishtar-8d594a01220d5cbbe9d6e856d1aef04bbb8daf3e.zip |
Djangoization - Major refactoring (step 6)
Work on wizard, views and forms to dispatch logic in a more
relevant way.
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/forms.py | 66 | ||||
-rw-r--r-- | archaeological_warehouse/urls.py | 6 | ||||
-rw-r--r-- | archaeological_warehouse/views.py | 16 | ||||
-rw-r--r-- | archaeological_warehouse/wizards.py | 48 |
4 files changed, 133 insertions, 3 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py new file mode 100644 index 000000000..33b7ba116 --- /dev/null +++ b/archaeological_warehouse/forms.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2010-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# 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 <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +import datetime + +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from ishtar_common.models import Person, valid_id +from archaeological_finds.models import TreatmentType +import models + +class ContainerSelect(forms.Form): + location = get_warehouse_field() + container_type = forms.ChoiceField(label=_(u"Container type"), choices=[]) + reference = forms.CharField(label=_(u"Reference")) + + def __init__(self, *args, **kwargs): + super(ContainerSelect, self).__init__(*args, **kwargs) + self.fields['container_type'].choices = \ + models.ContainerType.get_types() + self.fields['container_type'].help_text = \ + models.ContainerType.get_help() + +ContainerFormSelection = get_form_selection( + 'ContainerFormSelection', _(u"Container search"), 'container', + models.Container, ContainerSelect, 'get-container', + _(u"You should select a container."), new=True, + new_message=_(u"Add a new container")) + +class BasePackagingForm(forms.Form): + form_label = _(u"Packaging") + associated_models = {'treatment_type':TreatmentType, + 'person':Person, + 'location':models.Warehouse} + treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput) + person = forms.IntegerField(label=_(u"Packager"), + widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'), + associated_model=Person, new=True), + validators=[valid_id(Person)]) + start_date = forms.DateField(label=_(u"Date"), required=False, + widget=widgets.JQueryDate) + + def __init__(self, *args, **kwargs): + super(BasePackagingForm, self).__init__(*args, **kwargs) + self.fields['treatment_type'].initial = \ + TreatmentType.objects.get(txt_idx='packaging').pk + +class ItemPackagingFormSelection(ItemMultipleFormSelection): + form_label = _(u"Packaged items") diff --git a/archaeological_warehouse/urls.py b/archaeological_warehouse/urls.py index 914ee2533..903d77a59 100644 --- a/archaeological_warehouse/urls.py +++ b/archaeological_warehouse/urls.py @@ -20,14 +20,14 @@ from django.conf.urls.defaults import * """ -import forms +import views # forms urlpatterns = patterns('', url(r'treatment_creation/(?P<step>.+)$', - forms.treatment_creation_wizard, name='treatment_creation'), + views.treatment_creation_wizard, name='treatment_creation'), url(r'warehouse_packaging/(?P<step>.+)$', - forms.warehouse_packaging_wizard, name='warehouse_packaging'), + views.warehouse_packaging_wizard, name='warehouse_packaging'), ) urlpatterns += patterns('archaeological_warehouse.views', diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index 16a8e19f5..78df71bc2 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -25,6 +25,8 @@ from django.shortcuts import render_to_response from ishtar_common.views import get_item, show_item, revert_item import models +from wizards import * +from forms import * get_container = get_item(models.Container, 'get_container', 'container', @@ -79,3 +81,17 @@ def autocomplete_container(request): data = json.dumps([{'id':container.pk, 'value':unicode(container)} for container in containers]) return HttpResponse(data, mimetype='text/plain') + +warehouse_packaging_wizard = PackagingWizard.as_view([ + ('seleccontainer-packaging', ContainerFormSelection), + ('base-packaging', BasePackagingForm), + ('multiselecitems-packaging', ItemPackagingFormSelection), + ('final-packaging', FinalForm)], + url_name='warehouse_packaging',) + +""" +warehouse_packaging_wizard = ItemSourceWizard.as_view([ + ('selec-warehouse_packaging', ItemsSelection), + ('final-warehouse_packaging', FinalForm)], + url_name='warehouse_packaging',) +""" diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py new file mode 100644 index 000000000..1e8455b94 --- /dev/null +++ b/archaeological_warehouse/wizards.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# 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 <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.utils.translation import ugettext_lazy as _ + +from archaeological_finds.wizards import TreatmentWizard +from archaeological_finds.models import Treatment + + +class PackagingWizard(TreatmentWizard): + def save_model(self, dct, m2m, whole_associated_models, request, storage, + form_list, return_object): + dct = self.get_extra_model(dct, request, storage, form_list) + obj = self.get_current_saved_object(request, storage) + dct['location'] = dct['container'].location + items = dct.pop('items') + treatment = Treatment(**dct) + treatment.save() + if not hasattr(items, '__iter__'): + items = [items] + for item in items: + new = item.duplicate(request.user) + item.downstream_treatment = treatment + item.save() + new.upstream_treatment = treatment + new.container = dct['container'] + new.save() + res = render_to_response('wizard_done.html', {}, + context_instance=RequestContext(request)) + return return_object and (obj, res) or res |