diff options
-rw-r--r-- | ishtar/ishtar_base/forms.py | 24 | ||||
-rw-r--r-- | ishtar/ishtar_base/forms_items.py | 29 | ||||
-rw-r--r-- | ishtar/ishtar_base/models.py | 17 |
3 files changed, 56 insertions, 14 deletions
diff --git a/ishtar/ishtar_base/forms.py b/ishtar/ishtar_base/forms.py index 9faba2ac9..85c4371d4 100644 --- a/ishtar/ishtar_base/forms.py +++ b/ishtar/ishtar_base/forms.py @@ -191,6 +191,9 @@ class Wizard(NamedUrlSessionFormWizard): continue if hasattr(base_form, 'fields') and key in base_form.fields: lbl = base_form.fields[key].label + if hasattr(base_form, 'associated_labels') \ + and key in base_form.associated_labels: + lbl = base_form.associated_labels[key] if not lbl: continue value = cleaned_data[key] @@ -198,15 +201,24 @@ class Wizard(NamedUrlSessionFormWizard): continue if type(value) == bool: if value == True: - value = _("Yes") + value = _(u"Yes") elif value == False: - value = _("No") + value = _(u"No") elif key in associated_models: - item = associated_models[key].objects.get(pk=value) - if hasattr(item, 'short_label'): - value = item.short_label() + values = [] + if "," in unicode(value): + values = unicode(value).split(",") else: - value = unicode(item) + values = [value] + rendered_values = [] + for val in values: + item = associated_models[key].objects.get(pk=val) + if hasattr(item, 'short_label'): + value = item.short_label() + else: + value = unicode(item) + rendered_values.append(value) + value = u" ; ".join(rendered_values) form_datas.append((lbl, value, '')) if form_datas: datas.append((form.form_label, form_datas)) diff --git a/ishtar/ishtar_base/forms_items.py b/ishtar/ishtar_base/forms_items.py index a89dc7cf1..44886cc32 100644 --- a/ishtar/ishtar_base/forms_items.py +++ b/ishtar/ishtar_base/forms_items.py @@ -23,6 +23,8 @@ Items forms definitions import datetime from django import forms +from django.shortcuts import render_to_response +from django.template import RequestContext from django.core import validators from django.core.exceptions import ObjectDoesNotExist from django.utils.safestring import mark_safe @@ -187,8 +189,8 @@ class BaseTreatmentForm(forms.Form): 'location':models.Warehouse} treatment_type = forms.ChoiceField(label=_(u"Treatment type"), choices=[]) person = forms.IntegerField(label=_(u"Person"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-person'), associated_model=models.Person), + 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( @@ -212,6 +214,7 @@ class BaseTreatmentForm(forms.Form): class ItemMultipleFormSelection(forms.Form): form_label = _(u"Upstream items") associated_models = {'items':models.Item} + associated_labels = {'items':_(u"Items")} items = forms.CharField(label="", required=False, widget=widgets.JQueryJqGrid(reverse_lazy('get-item'), ItemSelect(), models.Item, multiple=True, multiple_cols=[2, 3, 4]), @@ -328,7 +331,23 @@ treatment_creation_wizard = TreatmentWizard([ ######################## class PackagingWizard(TreatmentWizard): - pass + 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) + items = dct.pop('items') + treatment = models.Treatment(**dct) + treatment.save() + for item in items: + new = item.duplicate(request.user) + item.downstream_treatment = treatment + item.save() + new.upstream_treatment = treatment + new.save() + res = render_to_response('wizard_done.html', {}, + context_instance=RequestContext(request)) + return return_object and (obj, res) or res + class BasePackagingForm(forms.Form): form_label = _(u"Packaging") @@ -337,8 +356,8 @@ class BasePackagingForm(forms.Form): 'location':models.Warehouse} treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput) person = forms.IntegerField(label=_(u"Person"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-person'), associated_model=models.Person), + 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( diff --git a/ishtar/ishtar_base/models.py b/ishtar/ishtar_base/models.py index ee22b9973..af1d38f05 100644 --- a/ishtar/ishtar_base/models.py +++ b/ishtar/ishtar_base/models.py @@ -994,6 +994,18 @@ class Item(BaseHistorizedItem, OwnPerms): dating = models.ForeignKey(Dating, verbose_name=_(u"Dating")) history = HistoricalRecords() + def duplicate(self, user): + dct = dict([(attr, getattr(self, attr)) for attr in ('order', 'label', + 'description', 'material_type', 'volume', 'weight', + 'item_number', 'dating')]) + dct['order'] += 1 + dct['history_modifier'] = user + new = self.__class__(**dct) + new.save() + for base_item in self.base_items.all(): + new.base_items.add(base_item) + return new + class Meta: verbose_name = _(u"Item") verbose_name_plural = _(u"Items") @@ -1143,9 +1155,8 @@ class Container(LightHistorizedItem): verbose_name_plural = _(u"Containers") def __unicode__(self): - lbl = self.reference - lbl += u" - %s" % unicode(self.container_type) - lbl += u" (%s)" % unicode(self.location) + lbl = u" - ".join((self.reference, unicode(self.container_type), + unicode(self.location))) return lbl if settings.COUNTRY == 'fr': |