diff options
Diffstat (limited to 'ishtar')
| -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': | 
