diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index f867a03cf..5a3f90da6 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1062,18 +1062,64 @@ class QRCodeView(DynamicModelView, IshtarMixin, LoginRequiredMixin, View): return HttpResponse(f.read(), content_type="image/png") -class GenerateLabelView(IshtarMixin, LoginRequiredMixin, View): +class GenerateView(IshtarMixin, LoginRequiredMixin, View): + def get_template(self, template_slug): + try: + return models.DocumentTemplate.objects.get( + slug=template_slug, available=True, + for_labels=False + ) + except models.DocumentTemplate.DoesNotExist: + raise Http404() + + def publish(self, tpl, objects): + return tpl.publish(objects[0]) + + def get_items(self, request, model): + item_pk = self.kwargs.get('item_pk') + try: + object = model.objects.get(pk=item_pk) + if not object.can_view(request): + raise Http404() + except model.DoesNotExist: + raise Http404() + return [object] + def get(self, request, *args, **kwargs): template_slug = kwargs.get('template_slug') + tpl = self.get_template(template_slug) + app, __, model_name = tpl.associated_model.klass.split(".") + model = apps.get_model(app, model_name) + objects = self.get_items(request, model) + if not objects: + return HttpResponse(content_type='text/plain') + document = self.publish(tpl, 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 GenerateLabelView(GenerateView): + def get_template(self, template_slug): try: - tpl = models.DocumentTemplate.objects.get( + return 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) + + def publish(self, tpl, objects): + return tpl.publish_labels(objects) + + def get_items(self, request, model): # rights are managed by get_item get_list = get_item( model, None, model.SLUG, own_table_cols=["id"])( @@ -1085,17 +1131,7 @@ class GenerateLabelView(IshtarMixin, LoginRequiredMixin, View): ] 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 + return objects class GlobalVarEdit(IshtarMixin, AdminLoginRequiredMixin, ModelFormSetView): |