summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
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
commit65125fa79ab69a5b5b091f73141558e5a8bf8587 (patch)
tree3fb29419d4703fcc224df4265466cd9000502ba4 /ishtar_common/views.py
parentdb76313a941d9d859e023e300b672628d761b4a1 (diff)
downloadIshtar-65125fa79ab69a5b5b091f73141558e5a8bf8587.tar.bz2
Ishtar-65125fa79ab69a5b5b091f73141558e5a8bf8587.zip
Publish action for generic items
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py66
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):