From 9a63364d5c3706d9dffc7890281c20a8ff70c476 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Thu, 3 Sep 2015 16:03:44 +0200 Subject: [PATCH] lingo: item pdf download view (#8220) --- combo/apps/lingo/models.py | 18 ++++++++++++++++-- .../lingo/templates/lingo/combo/items.html | 7 +++++++ combo/apps/lingo/urls.py | 5 ++++- combo/apps/lingo/views.py | 11 +++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/combo/apps/lingo/models.py b/combo/apps/lingo/models.py index cec8bfc8..f196a5b2 100644 --- a/combo/apps/lingo/models.py +++ b/combo/apps/lingo/models.py @@ -29,6 +29,7 @@ from django.db import models from django.forms import models as model_forms, Select from django.utils.translation import ugettext_lazy as _ from django.utils import timezone +from django.core.exceptions import PermissionDenied from ckeditor.fields import RichTextField @@ -52,7 +53,8 @@ def build_remote_item(data, regie): display_id=data['display_id'], total_amount=data.get('total_amount'), amount=data.get('amount'), - subject=data.get('label')) + subject=data.get('label'), + has_pdf=data.get('has_pdf')) class Regie(models.Model): @@ -106,6 +108,17 @@ class Regie(models.Model): return [build_remote_item(item, self) for item in items.get('data')] return [] + def download_item(self, request, item_id): + """ + downloads item's file + """ + if self.is_remote(): + if hasattr(request, 'session') and request.session.get('mellon_session'): + mellon = request.session.get('mellon_session') + url = self.webservice_url + '/invoice/%s/pdf' % item_id + return self.get_url(request, url, NameID=mellon['name_id_content']) + raise PermissionDenied + def as_api_dict(self): return {'slug': self.slug, 'label': self.label, @@ -144,7 +157,7 @@ class BasketItem(models.Model): class RemoteItem(object): def __init__(self, id, regie, creation_date, total_amount, - amount, display_id, subject): + amount, display_id, subject, has_pdf): self.id = id self.regie = regie self.creation_date = parser.parse(creation_date) @@ -152,6 +165,7 @@ class RemoteItem(object): self.display_id = display_id self.amount = amount self.subject = subject + self.has_pdf = has_pdf class Transaction(models.Model): diff --git a/combo/apps/lingo/templates/lingo/combo/items.html b/combo/apps/lingo/templates/lingo/combo/items.html index 4e249c44..304f941a 100644 --- a/combo/apps/lingo/templates/lingo/combo/items.html +++ b/combo/apps/lingo/templates/lingo/combo/items.html @@ -9,6 +9,7 @@ {% trans "Label" %} {% trans "Issue date" %} {% trans "Amount" %} + @@ -21,6 +22,12 @@ {{ amount }}€ {% endblocktrans %} + + {% if item.has_pdf %} + + {% trans "Download" %} + {% endif %} + {% endfor %} diff --git a/combo/apps/lingo/urls.py b/combo/apps/lingo/urls.py index 1f928564..f7b3e8ec 100644 --- a/combo/apps/lingo/urls.py +++ b/combo/apps/lingo/urls.py @@ -18,7 +18,8 @@ from django.conf.urls import patterns, url, include from combo.urls_utils import decorated_includes, manager_required -from .views import RegiesApiView, AddBasketItemApiView, PayView, CallbackView +from .views import (RegiesApiView, AddBasketItemApiView, PayView, CallbackView, + ItemDownloadView) from .manager_views import (RegieListView, RegieCreateView, RegieUpdateView, RegieDeleteView) @@ -39,4 +40,6 @@ urlpatterns = patterns('', url(r'^lingo/callback/(?P\w+)/$', CallbackView.as_view(), name='lingo-callback'), url(r'^manage/lingo/', decorated_includes(manager_required, include(lingo_manager_urls))), + url(r'^lingo/item/(?P[\w,-]+)/(?P[\w,-]+)/pdf$', + ItemDownloadView.as_view(), name='download-item-pdf'), ) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index 671317c1..12e10ced 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -160,3 +160,14 @@ class CallbackView(View): # ignore errors, it will be retried later on if it fails pass return HttpResponseRedirect('/') + + +class ItemDownloadView(View): + http_method_names = [u'get'] + + def get(self, request, *args, **kwargs): + regie = Regie.objects.get(pk=kwargs['regie_id']) + data = regie.download_item(request, kwargs['item_id']) + r = HttpResponse(data, content_type='application/pdf') + r['Content-Disposition'] = 'attachment; filename="%(item_id)s.pdf"' % kwargs + return r