diff options
Diffstat (limited to 'ishtar_common/forms.py')
| -rw-r--r-- | ishtar_common/forms.py | 102 | 
1 files changed, 102 insertions, 0 deletions
| diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 3dfcad09e..7fed8b1c2 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -26,6 +26,7 @@ import re  import types  from django import forms +from django.contrib.auth.models import User  from django.contrib.contenttypes.models import ContentType  from django.core.urlresolvers import reverse  from django.core import validators @@ -455,6 +456,8 @@ class IshtarForm(forms.Form):                  if not getattr(profile, profile_key):                      for field_key in self.PROFILE_FILTER[profile_key]:                          self.fields.pop(field_key) +        if getattr(self, 'confirm', False): +            return          for field in self.TYPES:              self._init_type(field)          for k in self.fields: @@ -510,6 +513,31 @@ class TableSelect(IshtarForm):          return self.fields.keys() +class HistorySelect(CustomForm, TableSelect): +    history_modifier = forms.IntegerField( +        label=_(u"Last modified by"), +        widget=widgets.JQueryAutoComplete( +            reverse_lazy('autocomplete-user'), +            associated_model=User), required=False +    ) +    modified_since = forms.DateField( +        label=_(u"Modified since"), widget=DatePicker, +        required=False) + +    def __init__(self, *args, **kwargs): +        super(HistorySelect, self).__init__(*args, **kwargs) +        field_order = self.fields.keys() +        current_fields = ["history_modifier", "modified_since"] +        fields = OrderedDict() +        for k in field_order: +            if k in current_fields: +                continue +            fields[k] = self.fields[k] +        for k in current_fields: +            fields[k] = self.fields[k] +        self.fields = fields + +  def get_now():      format = formats.get_format('DATE_INPUT_FORMATS')[0]      value = datetime.datetime.now().strftime(format) @@ -640,6 +668,80 @@ class ManageOldType(IshtarForm):          self.fields[field.key].help_text = field.get_help() +class QAForm(CustomForm, ManageOldType): +    MULTI = False +    SINGLE_FIELDS = [] +    REPLACE_FIELDS = [] + +    def __init__(self, *args, **kwargs): +        self.items = kwargs.pop('items') +        self.confirm = kwargs.pop('confirm') +        super(QAForm, self).__init__(*args, **kwargs) +        for k in self.fields.keys(): +            if self.MULTI and k in self.SINGLE_FIELDS: +                self.fields.pop(k) +                continue +            if self.confirm: +                if 'data' not in kwargs or not kwargs['data'].get(k, None): +                    self.fields.pop(k) +                    continue +                if getattr(self.fields[k].widget, 'allow_multiple_selected', +                           None): +                    self.fields[k].widget = forms.MultipleHiddenInput() +                else: +                    self.fields[k].widget = forms.HiddenInput() +                if k in kwargs['data'] and kwargs['data'][k]: +                    if hasattr(self, "_get_" + k): +                        self.fields[k].rendered_value = getattr( +                            self, "_get_" + k)(kwargs['data'][k]) +                    elif hasattr(self.fields[k], "choices"): +                        values = [] +                        for v in kwargs['data'].getlist(k): +                            values.append( +                                dict(self.fields[k].choices)[int(v)]) +                        self.fields[k].rendered_value = mark_safe( +                            u" ; ".join(values)) +            if k not in self.REPLACE_FIELDS: +                self.fields[k].label = unicode(self.fields[k].label) + \ +                                       unicode(u" - append to existing") +            else: +                self.fields[k].label = unicode(self.fields[k].label) + \ +                                       unicode(u" - replace") + +    def _set_value(self, item, base_key): +        value = self.cleaned_data[base_key] +        if not value: +            return +        key = base_key[len("qa_"):] +        field = item._meta.get_field(key) +        if getattr(field, 'related_model', None): +            if type(value) == list: +                value = [field.related_model.objects.get(pk=v) +                         for v in value] +            else: +                value = field.related_model.objects.get(pk=value) +        if getattr(field, 'many_to_many', None): +            if type(value) not in (list, tuple): +                value = [value] +            for v in value: +                getattr(item, key).add(v) +        else: +            if base_key not in self.REPLACE_FIELDS: +                if getattr(item, key): +                    value = getattr(item, key) + u"\n" + value +            setattr(item, key, value) + +    def save(self, items, user): +        for item in items: +            for base_key in self.cleaned_data: +                if hasattr(self, '_set_' + base_key): +                    getattr(self, '_set_' + base_key)(item, user) +                else: +                    self._set_value(item, base_key) +            item.history_modifier = user +            item.save() + +  class DocumentGenerationForm(forms.Form):      """      Form to generate document by choosing the template | 
