item pdf download view (#8220)
This commit is contained in:
parent
764199ed2a
commit
c51fdf226a
|
@ -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):
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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'),
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in New Issue