From 5bd178db63db3ff05165fc131960f198b2fbbca3 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 26 Feb 2019 20:14:22 +0100 Subject: QR code: QR code export, display on ODT and PDF --- ishtar_common/views.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'ishtar_common/views.py') diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 61bae69e2..5f5b0be42 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -19,12 +19,14 @@ import csv import datetime +import importlib import json import logging -import importlib +import os +import unicodecsv import unicodedata -import unicodecsv +from django.apps import apps from django.conf import settings from django.contrib.auth import logout from django.contrib.auth.decorators import login_required @@ -38,7 +40,7 @@ from django.http import HttpResponse, Http404, HttpResponseRedirect, \ from django.shortcuts import redirect, render from django.utils.decorators import method_decorator from django.utils.translation import ugettext, ugettext_lazy as _ -from django.views.generic import ListView, UpdateView, TemplateView +from django.views.generic import ListView, TemplateView, View from django.views.generic.edit import CreateView, DeleteView, FormView, \ UpdateView from extra_views import ModelFormSetView @@ -1010,6 +1012,29 @@ class DisplayItemView(IshtarMixin, LoginRequiredMixin, TemplateView): return data +class QRCodeView(IshtarMixin, LoginRequiredMixin, View): + def get(self, request, *args, **kwargs): + 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) + item = model.objects.get(pk=kwargs.get("pk")) + assert hasattr(item, 'qrcode') + except (LookupError, model.DoesNotExist, AssertionError): + raise Http404() + + if not item.qrcode or not item.qrcode.name: + item.generate_qrcode(request=self.request) + + if not item.qrcode or not item.qrcode.name: # generation has failed + raise Http404() + + with open(settings.MEDIA_ROOT + os.sep + item.qrcode.name, "rb") as f: + return HttpResponse(f.read(), content_type="image/png") + + class GlobalVarEdit(IshtarMixin, AdminLoginRequiredMixin, ModelFormSetView): template_name = 'ishtar/formset.html' model = models.GlobalVar -- cgit v1.2.3