summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-04-30 13:35:06 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-06-17 13:21:27 +0200
commit909f30658bd76f338a21108d770edca517683cc2 (patch)
tree73cecce534117dd5c3a5a8e897b3d20a6a554146 /ishtar_common/views.py
parent04a1c3d2b7a7df4e2d0218e56b6c467a5d397f53 (diff)
downloadIshtar-909f30658bd76f338a21108d770edca517683cc2.tar.bz2
Ishtar-909f30658bd76f338a21108d770edca517683cc2.zip
Label generation: view to generate labels
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py54
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