summaryrefslogtreecommitdiff
path: root/ishtar_common
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
parent04a1c3d2b7a7df4e2d0218e56b6c467a5d397f53 (diff)
downloadIshtar-909f30658bd76f338a21108d770edca517683cc2.tar.bz2
Ishtar-909f30658bd76f338a21108d770edca517683cc2.zip
Label generation: view to generate labels
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/urls.py2
-rw-r--r--ishtar_common/views.py54
-rw-r--r--ishtar_common/views_item.py30
3 files changed, 67 insertions, 19 deletions
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index eae297af7..99d80e7ad 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -42,6 +42,8 @@ urlpatterns = [
views.DisplayItemView.as_view(), name='display-item'),
url(r'qrcode/(?P<app>[-a-z]+)/(?P<model_name>[-a-z]+)/(?P<pk>\d+)/',
views.QRCodeView.as_view(), name='qrcode-item'),
+ url(r'^generate-labels/(?P<template_slug>[-a-z0-9]+)/',
+ views.GenerateLabelView.as_view(), name='generate-labels'),
url(r'person_search/(?P<step>.+)?$',
check_rights(['add_person'])(
views.person_search_wizard), name='person_search'),
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
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 557058728..01475f6ae 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1243,7 +1243,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
:return:
"""
def func(request, data_type='json', full=False, force_own=False,
- col_names=None, **dct):
+ col_names=None, no_link=False, no_limit=False, **dct):
available_perms = []
if specific_perms:
available_perms = specific_perms[:]
@@ -1395,8 +1395,9 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
if data_type == 'json-map': # other limit for map
row_nb = settings.ISHTAR_MAP_MAX_ITEMS
- if request_items.get('no_limit', False):
- row_nb = None
+ if no_limit or (data_type == 'json-map' and
+ request_items.get('no_limit', False)):
+ row_nb = None
dct_request_items = {}
@@ -1471,7 +1472,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
dct, pinned_search = _manage_default_search(
dct, request, model, default_name, my_base_request,
my_relative_session_names)
- else:
+ elif func_name:
request.session[func_name] = dct
for k in request_keys:
@@ -1762,19 +1763,20 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
data = json.dumps(_format_geojson(datas, lnk))
return HttpResponse(data, content_type='application/json')
for data in datas:
- try:
- lnk_template = link_template
- lnk = lnk_template % reverse('show-' + default_name,
- args=[data[0], ''])
- except NoReverseMatch:
- logger.warning(
- '**WARN "show-' + default_name + '" args ('
- + str(data[0]) + ") url not available")
- lnk = ''
res = {
'id': data[0],
- 'link': lnk
}
+ if not no_link:
+ try:
+ lnk_template = link_template
+ lnk = lnk_template % reverse('show-' + default_name,
+ args=[data[0], ''])
+ except NoReverseMatch:
+ logger.warning(
+ '**WARN "show-' + default_name + '" args ('
+ + str(data[0]) + ") url not available")
+ lnk = ''
+ res["link"] = lnk
for idx, value in enumerate(data[1:]):
if value:
table_col = table_cols[idx]