summaryrefslogtreecommitdiff
path: root/ishtar_common/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r--ishtar_common/forms.py102
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