summaryrefslogtreecommitdiff
path: root/ishtar/ishtar_base/forms_items.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-07-08 00:01:50 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-07-08 00:01:50 +0200
commit1633ca5aed5c56cc833600552add496d5d29ef8c (patch)
treec9f996ff0c6556cfcf2a43a9854784ad4b0d838d /ishtar/ishtar_base/forms_items.py
parent4ca3fed66033054172407bb56cd4c6edb7df06fb (diff)
downloadIshtar-1633ca5aed5c56cc833600552add496d5d29ef8c.tar.bz2
Ishtar-1633ca5aed5c56cc833600552add496d5d29ef8c.zip
Better packaging management (closes #515)
Diffstat (limited to 'ishtar/ishtar_base/forms_items.py')
-rw-r--r--ishtar/ishtar_base/forms_items.py57
1 files changed, 35 insertions, 22 deletions
diff --git a/ishtar/ishtar_base/forms_items.py b/ishtar/ishtar_base/forms_items.py
index 44886cc32..54c733751 100644
--- a/ishtar/ishtar_base/forms_items.py
+++ b/ishtar/ishtar_base/forms_items.py
@@ -37,8 +37,8 @@ import models
import widgets
from forms import Wizard, FinalForm, FormSet, SearchWizard, DeletionWizard,\
FloatField, formset_factory, get_now, get_form_selection, reverse_lazy
-from forms_common import get_town_field, SourceForm, SourceWizard, \
- SourceSelect, SourceDeletionForm, AuthorFormset
+from forms_common import get_town_field, get_warehouse_field, SourceForm, \
+ SourceWizard, SourceSelect, SourceDeletionForm, AuthorFormset
from forms_context_records import RecordFormSelection
class ItemWizard(Wizard):
@@ -220,11 +220,17 @@ class ItemMultipleFormSelection(forms.Form):
ItemSelect(), models.Item, multiple=True, multiple_cols=[2, 3, 4]),
validators=[models.valid_ids(models.Item)])
+ def clean(self):
+ if not 'items' in self.cleaned_data or not self.cleaned_data['items']:
+ raise forms.ValidationError(_(u"You should at least select one "
+ u"archaeological item."))
+ return self.cleaned_data
+
class ContainerForm(forms.Form):
form_label = _(u"Container")
reference = forms.CharField(label=_(u"Reference"))
container_type = forms.ChoiceField(label=_(u"Container type"), choices=[])
- location = forms.IntegerField(label=_(u"Location"),
+ location = forms.IntegerField(label=_(u"Warehouse"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-warehouse'), associated_model=models.Warehouse,
new=True),
@@ -249,15 +255,6 @@ class ContainerForm(forms.Form):
new_item.save()
return new_item
-class ContainerSelectForm(forms.Form):
- form_label = _(u"Container")
- associated_models = {'container':models.Container,}
- container = forms.IntegerField(label=_(u"Container"),
- widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-container'),
- associated_model=models.Container, new=True),
- validators=[models.valid_id(models.Container)])
-
-
def check_treatment(form_name, type_key, type_list=[], not_type_list=[]):
type_list = [models.TreatmentType.objects.get(txt_idx=tpe).pk
for tpe in type_list]
@@ -326,28 +323,49 @@ treatment_creation_wizard = TreatmentWizard([
},
url_name='treatment_creation',)
-########################
-# Warehouse management #
-########################
+#############
+# Packaging #
+#############
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 = models.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
+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")
@@ -355,15 +373,10 @@ class BasePackagingForm(forms.Form):
'person':models.Person,
'location':models.Warehouse}
treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput)
- person = forms.IntegerField(label=_(u"Person"),
+ person = forms.IntegerField(label=_(u"Packager"),
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'),
associated_model=models.Person, new=True),
validators=[models.valid_id(models.Person)])
- location = forms.IntegerField(label=_(u"Location"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-warehouse'), associated_model=models.Warehouse,
- new=True),
- validators=[models.valid_id(models.Warehouse)])
start_date = forms.DateField(label=_(u"Date"), required=False,
widget=widgets.JQueryDate)
@@ -376,8 +389,8 @@ class ItemPackagingFormSelection(ItemMultipleFormSelection):
form_label = _(u"Packaged items")
warehouse_packaging_wizard = PackagingWizard([
+ ('seleccontainer-packaging', ContainerFormSelection),
('base-packaging', BasePackagingForm),
- ('container-packaging', ContainerSelectForm),
('multiselecitems-packaging', ItemPackagingFormSelection),
('final-packaging', FinalForm)],
url_name='warehouse_packaging',)