From 909f30658bd76f338a21108d770edca517683cc2 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 30 Apr 2019 13:35:06 +0200 Subject: Label generation: view to generate labels --- ishtar_common/views.py | 54 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 5 deletions(-) (limited to 'ishtar_common/views.py') diff --git a/ishtar_common/views.py b/ishtar_common/views.py index a45d4ad08..65ea70685 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1018,17 +1018,25 @@ class DisplayItemView(IshtarMixin, TemplateView): return data -class QRCodeView(IshtarMixin, LoginRequiredMixin, View): - def get(self, request, *args, **kwargs): +class DynamicModelView: + def get_model(self, kwargs): + app = kwargs.get('app').replace('-', "_") model_name = "".join( [part.capitalize() for part in kwargs.get('model_name').split('-')] ) - app = kwargs.get('app').replace('-', "_") try: - model = apps.get_model(app, model_name) + return apps.get_model(app, model_name) + except LookupError: + raise Http404() + + +class QRCodeView(DynamicModelView, IshtarMixin, LoginRequiredMixin, View): + def get(self, request, *args, **kwargs): + model = self.get_model(kwargs) + try: item = model.objects.get(pk=kwargs.get("pk")) assert hasattr(item, 'qrcode') - except (LookupError, model.DoesNotExist, AssertionError): + except (model.DoesNotExist, AssertionError): raise Http404() if not item.qrcode or not item.qrcode.name: @@ -1041,6 +1049,42 @@ class QRCodeView(IshtarMixin, LoginRequiredMixin, View): return HttpResponse(f.read(), content_type="image/png") +class GenerateLabelView(IshtarMixin, LoginRequiredMixin, View): + def get(self, request, *args, **kwargs): + template_slug = kwargs.get('template_slug') + try: + tpl = models.DocumentTemplate.objects.get( + slug=template_slug, available=True, + for_labels=True + ) + except models.DocumentTemplate.DoesNotExist: + raise Http404() + app, __, model_name = tpl.associated_model.klass.split(".") + model = apps.get_model(app, model_name) + # rights are managed by get_item + get_list = get_item( + model, None, model.SLUG, own_table_cols=["id"])( + request, no_link=True, no_limit=True) + try: + objects = [ + model.objects.get(pk=int(dct["id"])) + for dct in json.loads(get_list.content.decode("utf-8"))["rows"] + ] + except model.DoesNotExist: + raise Http404() + document = tpl.publish_labels(objects) + if not document: + return HttpResponse(content_type='text/plain') + with open(document, "rb") as f: + response = HttpResponse( + f.read(), + content_type="application/vnd.oasis.opendocument.text" + ) + response['Content-Disposition'] = 'attachment; filename={}'.format( + document.split(os.sep)[-1]) + return response + + class GlobalVarEdit(IshtarMixin, AdminLoginRequiredMixin, ModelFormSetView): template_name = 'ishtar/formset.html' model = models.GlobalVar -- cgit v1.2.3