diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 54 | 
1 files changed, 49 insertions, 5 deletions
| 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 | 
