lingo: item pdf download view (#8220)

This commit is contained in:
Serghei Mihai 2015-09-03 16:03:44 +02:00 committed by Frédéric Péters
parent d078408b57
commit 9a63364d5c
4 changed files with 38 additions and 3 deletions

View File

@ -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):

View File

@ -9,6 +9,7 @@
<td>{% trans "Label" %}</td>
<td>{% trans "Issue date" %}</td>
<td>{% trans "Amount" %}</td>
<td></td>
</tr>
</thead>
<tbody>
@ -21,6 +22,12 @@
{{ amount }}€
{% endblocktrans %}
</td>
<td>
{% if item.has_pdf %}
<a href="{% url 'download-item-pdf' regie_id=item.regie.pk item_id=item.id %}" class="icon-pdf">
{% trans "Download" %}</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>

View File

@ -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<regie_pk>\w+)/$', CallbackView.as_view(), name='lingo-callback'),
url(r'^manage/lingo/', decorated_includes(manager_required,
include(lingo_manager_urls))),
url(r'^lingo/item/(?P<regie_id>[\w,-]+)/(?P<item_id>[\w,-]+)/pdf$',
ItemDownloadView.as_view(), name='download-item-pdf'),
)

View File

@ -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