diff options
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r-- | ishtar_common/forms_common.py | 68 |
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")), |