diff options
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 |
commit | 1633ca5aed5c56cc833600552add496d5d29ef8c (patch) | |
tree | c9f996ff0c6556cfcf2a43a9854784ad4b0d838d /ishtar/ishtar_base/forms_items.py | |
parent | 4ca3fed66033054172407bb56cd4c6edb7df06fb (diff) | |
download | Ishtar-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.py | 57 |
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',) |