summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/forms.py66
-rw-r--r--archaeological_warehouse/urls.py6
-rw-r--r--archaeological_warehouse/views.py16
-rw-r--r--archaeological_warehouse/wizards.py48
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