summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/ishtar_base/forms.py24
-rw-r--r--ishtar/ishtar_base/forms_items.py29
-rw-r--r--ishtar/ishtar_base/models.py17
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':