summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-03-06 11:41:54 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2020-03-06 11:44:44 +0100
commit3808df22596ff03e8b24c9b97506f68c86197c60 (patch)
tree87dc15b6b07b78eb8aed52a707c9adab5ae89a9f /ishtar_common/forms_common.py
parent2ebb25f9a93d9b840162ca035c243354a3169a87 (diff)
downloadIshtar-3808df22596ff03e8b24c9b97506f68c86197c60.tar.bz2
Ishtar-3808df22596ff03e8b24c9b97506f68c86197c60.zip
Sheet actions: add duplicate for site, operation, document and context record
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py68
1 files changed, 65 insertions, 3 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 7a6f2fe72..31eb5c7d2 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -1302,9 +1302,9 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):
not cleaned_data.get('image', None) and \
not cleaned_data.get('associated_file', None) and \
not cleaned_data.get('associated_url', None):
- raise forms.ValidationError(_(u"You should at least fill one of "
- u"this field: title, url, image or "
- u"file."))
+ raise forms.ValidationError(_("You should at least fill one of "
+ "this field: title, url, image or "
+ "file."))
for rel in models.Document.RELATED_MODELS:
if cleaned_data.get(rel, None):
return cleaned_data
@@ -1477,6 +1477,68 @@ class QADocumentFormMulti(QAForm):
return value
+class QADocumentDuplicateForm(IshtarForm):
+ qa_title = forms.CharField(label=_("Reference"), max_length=500,
+ required=False)
+ qa_source_type = forms.ChoiceField(label=_("Type"), choices=[],
+ required=False)
+
+ TYPES = [
+ FieldType('qa_source_type', models.SourceType),
+ ]
+
+ def __init__(self, *args, **kwargs):
+ self.user = None
+ if 'user' in kwargs:
+ self.user = kwargs.pop('user')
+ if hasattr(self.user, 'ishtaruser'):
+ self.user = self.user.ishtaruser
+ self.document = kwargs.pop('items')[0]
+ super(QADocumentDuplicateForm, self).__init__(*args, **kwargs)
+
+ self.fields['qa_title'].initial = self.document.title + str(
+ _(" - duplicate"))
+ if self.document.source_type:
+ self.fields['qa_source_type'].initial = self.document.source_type.pk
+
+ for related_key in models.Document.RELATED_MODELS_ALT:
+ related = getattr(self.document, related_key)
+ if not related.count():
+ continue
+ model = models.Document._meta.get_field(related_key).related_model
+ initial = []
+ for item in related.all():
+ initial.append(item.pk)
+ self.fields["qa_" + related_key] = widgets.Select2MultipleField(
+ model=model, remote=True, label=model._meta.verbose_name_plural,
+ required=False, long_widget=True, initial=initial
+ )
+
+ def save(self):
+ data = {"index": None}
+ for k in ["title"]:
+ data[k] = self.cleaned_data.get("qa_" + k, None)
+ if self.cleaned_data.get("qa_source_type", None):
+ try:
+ data["source_type"] = models.SourceType.objects.get(
+ pk=int(self.cleaned_data["qa_source_type"]), available=True)
+ except models.SourceType.DoesNotExist:
+ return
+ new = self.document.duplicate_item(self.user, data=data)
+ for related_key in models.Document.RELATED_MODELS_ALT:
+ getattr(new, related_key).clear()
+ values = self.cleaned_data.get("qa_" + related_key, [])
+ model = models.Document._meta.get_field(related_key).related_model
+ for value in values:
+ getattr(new, related_key).add(model.objects.get(pk=value))
+ new.skip_history_when_saving = True
+ new._cached_label_checked = False
+ new._search_updated = False
+ new._no_move = True
+ new.save() # regen of labels
+ return new
+
+
class QALockForm(forms.Form):
action = forms.ChoiceField(
label=_("Action"), choices=(('lock', _("Lock")),