diff options
| -rw-r--r-- | app/dispatch/templates/dispatch/loads/detail.html | 3 | ||||
| -rw-r--r-- | app/dispatch/urls.py | 2 | ||||
| -rw-r--r-- | app/dispatch/views.py | 30 |
3 files changed, 33 insertions, 2 deletions
diff --git a/app/dispatch/templates/dispatch/loads/detail.html b/app/dispatch/templates/dispatch/loads/detail.html index fff9cf2..d8feea3 100644 --- a/app/dispatch/templates/dispatch/loads/detail.html +++ b/app/dispatch/templates/dispatch/loads/detail.html @@ -72,7 +72,8 @@ <td>{{p.description}}</td> <td class="right-align"> <a class="btn red" href="{% url 'paperwork_delete' object.id p.id %}">Delete</a> - <a class="btn green" target="_blank" href="{{p.document.url}}">Download</a> + <!-- <a class="btn green" target="_blank" href="{{p.document.url}}">Download</a> --> + <a class="btn green" href="{% url 'paperwork_download' load.id p.id %}">Download</a> </td> </tr> {% endfor %} diff --git a/app/dispatch/urls.py b/app/dispatch/urls.py index 816faae..c0723e2 100644 --- a/app/dispatch/urls.py +++ b/app/dispatch/urls.py @@ -30,5 +30,7 @@ urlpatterns = [ url(r'^loads/upload/(?P<load_id>\d+)$', views.PaperworkUpload, name='paperwork_upload'), url(r'^loads/(?P<load_id>\d+)/paperwork/delete/(?P<pk>\d+)$', \ views.PaperworkDelete, name='paperwork_delete'), + url(r'^loads/(?P<load_id>\d+)/paperwork/dl/(?P<pk>\d+)$', \ + views.PaperworkDownload, name='paperwork_download'), ] diff --git a/app/dispatch/views.py b/app/dispatch/views.py index 05a8c2c..4a8a18b 100644 --- a/app/dispatch/views.py +++ b/app/dispatch/views.py @@ -1,5 +1,6 @@ from django.shortcuts import render, redirect -# from django.http import HttpResponse +from django.http import HttpResponse +from django.utils.encoding import smart_str # from django.template import loader from django.core.urlresolvers import reverse # import django.contrib.auth as auth @@ -17,6 +18,7 @@ from django.contrib.auth.mixins import UserPassesTestMixin from datetime import datetime, timedelta from django.utils import formats from dateutil import rrule +import re, os def home(request): return redirect(reverse('load_list')) @@ -272,3 +274,29 @@ def PaperworkDelete(request, load_id, pk): print(e) return redirect(reverse('load_detail', kwargs={'pk': load_id})) + +# Specifically for downloading with the filename set to the description of the +# load +def PaperworkDownload(request, load_id, pk): + try: + load = Load.objects.get(pk=load_id) + paperwork = Paperwork.objects.get(pk=pk) + + if os.path.exists(paperwork.document.path): + with open(paperwork.document.path, 'rb') as fh: + try: + exp = re.compile('\.[^.]*$', re.IGNORECASE) + ext = exp.findall(paperwork.document.path) + ext = ext[0] + except Exception as e: + print(e) + ext = '.pdf' + + desc = load.description.replace('"', '') + + response = HttpResponse(fh.read(), content_type='application/force-download') + response['Content-Disposition'] = 'attachment; filename="{}"'.format(smart_str(desc + ext)) + response['X-Sendfile'] = smart_str(paperwork.document.path) + return response + except Exception as e: + print(e) |
