diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-02-26 20:14:22 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:38:57 +0200 | 
| commit | c33e49777af11ad8cadc311833136cbaf5872962 (patch) | |
| tree | c644209eb81804406bfc5f014713dc1f62bc5ad4 /ishtar_common | |
| parent | 01945a4aeca368458236cf022b64be2b3539e66b (diff) | |
| download | Ishtar-c33e49777af11ad8cadc311833136cbaf5872962.tar.bz2 Ishtar-c33e49777af11ad8cadc311833136cbaf5872962.zip | |
QR code: QR code export, display on ODT and PDF
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models.py | 3 | ||||
| -rw-r--r-- | ishtar_common/static/media/style_basic.css | 14 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/window_nav.html | 9 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/sheet.html | 31 | ||||
| -rw-r--r-- | ishtar_common/urls.py | 2 | ||||
| -rw-r--r-- | ishtar_common/views.py | 31 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 3 | 
7 files changed, 70 insertions, 23 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 9b5185be4..247ab4f61 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1572,6 +1572,7 @@ class FixAssociated(object):  class QRCodeItem(models.Model, ImageContainerModel): +    HAS_QR_CODE = True      qrcode = models.ImageField(upload_to=get_image_path, blank=True, null=True,                                 max_length=255) @@ -1582,7 +1583,7 @@ class QRCodeItem(models.Model, ImageContainerModel):          url = self.get_absolute_url()          site = Site.objects.get_current()          if request: -            scheme = self.request.scheme +            scheme = request.scheme          else:              if secure:                  scheme = "https" diff --git a/ishtar_common/static/media/style_basic.css b/ishtar_common/static/media/style_basic.css index bfd89dfca..051543ea9 100644 --- a/ishtar_common/static/media/style_basic.css +++ b/ishtar_common/static/media/style_basic.css @@ -54,10 +54,18 @@ td{      margin:0;      padding:0;      padding-top:4px; -    text-align:right; +    text-align: right;      border:1px solid #EEE;      border-top:none;      font-size:0.9em; +    background-color: #ddd; +} + +.window-table-head td{ +    text-align: left; +    border:0 solid transparent; +    font-size: 1em; +    background-color: transparent;  }  .link{ @@ -92,10 +100,6 @@ p{      margin:0.2em;  } -td{ -    background-color: #ddd; -} -  #pdffooter, #pdfheader{      text-align:center;  } diff --git a/ishtar_common/templates/ishtar/blocks/window_nav.html b/ishtar_common/templates/ishtar/blocks/window_nav.html index a53e62b0d..92fa15352 100644 --- a/ishtar_common/templates/ishtar/blocks/window_nav.html +++ b/ishtar_common/templates/ishtar/blocks/window_nav.html @@ -71,15 +71,18 @@                     aria-labelledby="dropdown-sheet-export-{{window_id}}">                    <a class="dropdown-item" href='{% url show_url item.pk "odt" %}'                       title='{% trans "Export as OpenOffice.org file"%}'> -                      ODT <i class="fa fa-file-word-o" aria-hidden="true"></i> +                      <i class="fa fa-file-word-o" aria-hidden="true"></i> ODT                    </a>                    <a class="dropdown-item" href='{% url show_url item.pk "pdf" %}'                       title='{% trans "Export as PDF file"%}'> -                      PDF <i class="fa fa-file-pdf-o" aria-hidden="true"></i> +                      <i class="fa fa-file-pdf-o" aria-hidden="true"></i> PDF                    </a>{% for template_name, template_url in extra_templates %}                    <a class="dropdown-item" href='{{template_url}}'> -                      {{template_name}} <i class="fa fa-file-word-o" aria-hidden="true"></i> +                      <i class="fa fa-file-word-o" aria-hidden="true"></i> {{template_name}}                    </a>{% endfor %} +                  {% if item.HAS_QR_CODE %}<a class="dropdown-item" href='{% url "qrcode-item" item.APP item.MODEL item.pk %}' target="_blank"> +                     <i class="fa fa-qrcode" aria-hidden="true"></i> {% trans "QR Code" %}  +                  </a>{% endif %}                </div>            </div> diff --git a/ishtar_common/templates/ishtar/sheet.html b/ishtar_common/templates/ishtar/sheet.html index e937f1474..6b9c97948 100644 --- a/ishtar_common/templates/ishtar/sheet.html +++ b/ishtar_common/templates/ishtar/sheet.html @@ -8,28 +8,37 @@  </head>  <body>  {% endblock %} -    <div class="card sheet" id="{{window_id}}"> + +    {% if output != "ODT" and output != "PDF" %}      <div class="card-header" data-sheet-id="{{sheet_id}}" role="tab" id='head-{{window_id}}'>        <div class="row">            <div class="col-9"> -              {% if output != "ODT" and output != "PDF"%}                <h5 class="mb-0">                  <a class="card-label" data-toggle="collapse"                      href="#collapse-{{window_id}}" aria-expanded="true"                     aria-controls="collapse-{{window_id}}"> -              {% else %} -              <h2> -              {% endif %} +    {% else %} +      {% if item.qrcode.name %} +      <table class="window-table-head"> +        <tr> +          <td> <img class="qrcode" src="{{BASE_URL}}{{item.qrcode.url}}"> </td> +          <td> +      {% endif %} +            <h2> +    {% endif %}                      {% block head_title %}{% endblock %} -              {% if output == "ODT" or output == "PDF"%} -              </h2> -              {% else %} +    {% if output == "ODT" or output == "PDF" %} +            </h2> +      {% if item.qrcode.name %} +          </td> +        </tr> +      </table> +      {% endif %} +    {% else %}                  </a>                </h5> -              {% endif %}            </div> -          {% if output != "ODT" and output != "PDF"%}            <div class='col-2 text-center'>                <a href='#' class='previous_page'>                  <span class="fa-stack"> @@ -53,8 +62,8 @@                </span>              </a>            </div> -          {% endif %}        </div> +      {% endif %}        {% block header_title %}{% endblock %}      </div> diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index aea419d08..957b1bfb3 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -40,6 +40,8 @@ urlpatterns = [      url(r'shortcut_menu/', views.shortcut_menu, name='shortcut-menu'),      url(r'display/(?P<item_type>\w+)/(?P<pk>\d+)/',          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'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 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 diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index ffbbbb936..16128feba 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -218,6 +218,9 @@ def show_item(model, name, extra_dct=None, model_for_perms=None):                      item.history_date = historized[0].history_date                  if len(historized) > 1:                      dct['previous'] = historized[1].history_date +        if doc_type in ("odt", "pdf") and hasattr(item, 'qrcode') \ +                and (not item.qrcode or not item.qrcode.name): +            item.generate_qrcode(request=request)          dct['item'], dct['item_name'] = item, name          # add context          if extra_dct: | 
