From c996469e842ef3541f5b1290d2541dd6d2f2844e Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 3 Sep 2020 12:30:35 +0200 Subject: Document QA: packaging - fix QA for search and edit --- ishtar_common/forms_common.py | 47 ++++++++++++++++++++++ ishtar_common/models.py | 26 ++++++++---- .../ishtar/forms/qa_document_packaging.html | 32 +++++++++++++++ ishtar_common/templates/ishtar/sheet_document.html | 4 +- ishtar_common/urls.py | 5 +++ ishtar_common/views.py | 31 ++++++++++++++ 6 files changed, 136 insertions(+), 9 deletions(-) create mode 100644 ishtar_common/templates/ishtar/forms/qa_document_packaging.html diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 991968e3b..49d1829bc 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -1745,6 +1745,53 @@ class QADocumentDuplicateForm(IshtarForm): return new +class QADocumentPackagingForm(IshtarForm): + container = forms.IntegerField( + label=_("Container"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-container'), + associated_model=Container, new=True), + validators=[models.valid_id(Container)]) + container_to_change = forms.ChoiceField( + label=_("Change "), required=True, + choices=( + ('current-and-reference', _(u"current and reference containers")), + ('reference', _(u"the reference container")), + ('current', _(u"the current container")), + ) + ) + + def __init__(self, *args, **kwargs): + self.confirm = False + self.user = None + if 'user' in kwargs: + self.user = kwargs.pop('user') + if hasattr(self.user, 'ishtaruser'): + self.user = self.user.ishtaruser + self.items = kwargs.pop('items') + + super(QADocumentPackagingForm, self).__init__(*args, **kwargs) + + def save(self, items, user): + container = Container.objects.get(pk=self.cleaned_data['container']) + container_to_change = self.cleaned_data.get('container_to_change', '') + container_attrs = [] + if container_to_change in ('reference', 'current-and-reference'): + container_attrs.append('container_ref') + if container_to_change in ('current', 'current-and-reference'): + container_attrs.append('container') + for document in items: + changed = False + for container_attr in container_attrs: + if getattr(document, container_attr) == container: + continue + setattr(document, container_attr, container) + changed = True + if changed: + document.history_modifier = user + document.save() + + class QALockForm(forms.Form): action = forms.ChoiceField( label=_("Action"), choices=(('lock', _("Lock")), diff --git a/ishtar_common/models.py b/ishtar_common/models.py index d9112b5e7..42b4c479a 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -5633,8 +5633,13 @@ class Document(BaseHistorizedItem, QRCodeItem, OwnPerms, ImageModel, QuickAction( url="document-qa-duplicate", icon_class="fa fa-clone", text=_("Duplicate"), target="one", - rights=['change_document', - 'change_own_document']), + rights=['change_document', 'change_own_document']), + QuickAction( + url="document-qa-packaging", icon_class="fa fa-gift", + text=_("Packaging"), target="many", + rights=['change_document', 'change_own_document'], + module='warehouse' + ), ] SERIALIZATION_FILES = ["image", "thumbnail", "associated_file"] @@ -5795,11 +5800,18 @@ class Document(BaseHistorizedItem, QRCodeItem, OwnPerms, ImageModel, # is_locked = self.is_locked(request.user) can_edit_document = self.can_do(request, 'change_document') - if can_edit_document: - actions += [ - (reverse("document-qa-duplicate", args=[self.pk]), - _("Duplicate"), "fa fa-clone", "", "", True), - ] + if not can_edit_document: + return actions + actions += [ + (reverse("document-qa-duplicate", args=[self.pk]), + _("Duplicate"), "fa fa-clone", "", "", True), + ] + if get_current_profile().warehouse: + actions.append( + (reverse("document-qa-packaging", args=[self.pk]), + _("Packaging"), + "fa fa-gift", "", "", True) + ) return actions @property diff --git a/ishtar_common/templates/ishtar/forms/qa_document_packaging.html b/ishtar_common/templates/ishtar/forms/qa_document_packaging.html new file mode 100644 index 000000000..02f60e6c0 --- /dev/null +++ b/ishtar_common/templates/ishtar/forms/qa_document_packaging.html @@ -0,0 +1,32 @@ +{% extends "ishtar/forms/qa_base.html" %} +{% load i18n inline_formset table_form %} + +{% block main_form %} + {% if form.non_field_errors %} + + {% endif %} + +

{% trans "Documents" %}

+ + +

{% trans "Packaging" %}

+ {% for hidden in form.hidden_fields %} + {{hidden}} + {% if hidden.errors %}
+ {{ hidden.errors }} +
{% endif %} + {% endfor %} +
+ {% with form.container as field %} + {% include "blocks/bs_field_snippet.html" %} + {% endwith %} + {% with form.container_to_change as field %} + {% include "blocks/bs_field_snippet.html" %} + {% endwith %} +
+{% endblock %} + diff --git a/ishtar_common/templates/ishtar/sheet_document.html b/ishtar_common/templates/ishtar/sheet_document.html index 0212b1695..598de5f76 100644 --- a/ishtar_common/templates/ishtar/sheet_document.html +++ b/ishtar_common/templates/ishtar/sheet_document.html @@ -83,8 +83,8 @@ {% if item.container or item.container_ref or item.item_number != 1 or item.duplicate %}

{% trans "Container" %}

- {% field_flex_detail "Container" item.container %} - {% field_flex_detail "Reference container" item.container_ref %} + {% field_flex_detail "Container" item.container 2 %} + {% field_flex_detail "Reference container" item.container_ref 2 %} {% if item.item_number != 1 %}{% field_flex "Item number" item.item_number %}{% endif %} {% if item.duplicate %}{% field_flex "Has a duplicate" item.duplicate %}{% endif %} {% endif %} diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 79c9676ed..5ec8d4ee5 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -333,6 +333,11 @@ urlpatterns += [ check_rights(['change_document', 'change_own_document'])( views.QADocumentDuplicateFormView.as_view()), name='document-qa-duplicate'), + url(r'^document-qa-packaging/(?P[0-9-]+)?/$', + check_rights(['change_document', 'change_own_document'])( + views.QADocumentPackagingFormView.as_view()), + name='document-qa-packaging'), + url(r'autocomplete-documenttag/$', views.autocomplete_documenttag, name='autocomplete-documenttag'), url(r'new-documenttag/(?:(?P[^/]+)/)?' diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 64219ba66..160653bbb 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1988,6 +1988,11 @@ class DocumentSelectView(IshtarMixin, LoginRequiredMixin, self.pk = form.cleaned_data['pk'] return super(DocumentSelectView, self).form_valid(form) + def get_form_kwargs(self): + kwargs = super(DocumentSelectView, self).get_form_kwargs() + kwargs["user"] = self.request.user + return kwargs + def get_context_data(self, **kwargs): data = super(DocumentSelectView, self).get_context_data(**kwargs) if self.request.GET and "open_item" in self.request.GET: @@ -2435,3 +2440,29 @@ class QADocumentDuplicateFormView(QAItemForm): return data +class QADocumentPackagingFormView(QAItemForm): + template_name = 'ishtar/forms/qa_document_packaging.html' + model = models.Document + form_class = forms.QADocumentPackagingForm + page_name = _(u"Packaging") + base_url = "document-qa-packaging" + + def dispatch(self, request, *args, **kwargs): + returned = super(QADocumentPackagingFormView, self).dispatch( + request, *args, **kwargs) + """ + for item in self.items: + if item.is_locked(request.user): + return HttpResponseRedirect(reverse("qa-not-available")) + """ + return returned + + def get_form_kwargs(self): + kwargs = super(QADocumentPackagingFormView, self).get_form_kwargs() + kwargs['user'] = self.request.user + kwargs['prefix'] = "qa-packaging" + return kwargs + + def form_valid(self, form): + form.save(self.items, self.request.user) + return HttpResponseRedirect(reverse("success")) -- cgit v1.2.3