diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-08-28 16:53:58 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-08-28 16:53:58 +0200 | 
| commit | 65125fa79ab69a5b5b091f73141558e5a8bf8587 (patch) | |
| tree | 3fb29419d4703fcc224df4265466cd9000502ba4 /ishtar_common/views.py | |
| parent | db76313a941d9d859e023e300b672628d761b4a1 (diff) | |
| download | Ishtar-65125fa79ab69a5b5b091f73141558e5a8bf8587.tar.bz2 Ishtar-65125fa79ab69a5b5b091f73141558e5a8bf8587.zip  | |
Publish action for generic items
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):  | 
