From cdde0f8c433d344c0725af5fe090f6ed99891e23 Mon Sep 17 00:00:00 2001 From: Oliver Walters <oliver.henry.walters@gmail.com> Date: Sun, 16 Aug 2020 11:12:21 +1000 Subject: [PATCH] Add URL endpoint for downloading PDF labels --- InvenTree/stock/urls.py | 1 + InvenTree/stock/views.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index b48795b86e..c886f8ccaa 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -59,6 +59,7 @@ stock_urls = [ url(r'^item/new/?', views.StockItemCreate.as_view(), name='stock-item-create'), url(r'^item/test-report-download/', views.StockItemTestReportDownload.as_view(), name='stock-item-test-report-download'), + url(r'^item/print-stock-labels/', views.StockItemPrintLabels.as_view(), name='stock-item-print-labels'), # URLs for StockItem attachments url(r'^item/attachment/', include([ diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 56a3abaaad..5a5cba9126 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -28,6 +28,7 @@ from datetime import datetime from company.models import Company, SupplierPart from part.models import Part from report.models import TestReport +from label.models import StockItemLabel from .models import StockItem, StockLocation, StockItemTracking, StockItemAttachment, StockItemTestResult from .admin import StockItemResource @@ -295,6 +296,44 @@ class StockItemReturnToStock(AjaxUpdateView): return self.renderJsonResponse(request, self.get_form(), data) +class StockItemPrintLabels(AjaxView): + """ + View for printing labels and returning a PDF + + Requires the following arguments to be passed as URL params: + + items: List of valid StockItem pk values + label: Valid pk of a StockItemLabel template + """ + + def get(self, request, *args, **kwargs): + + label = request.GET.get('label', None) + + try: + label = StockItemLabel.objects.get(pk=label) + except (ValueError, StockItemLabel.DoesNotExist): + raise ValidationError({'label': 'Invalid label ID'}) + + item_pks = request.GET.getlist('items[]') + + items = [] + + for pk in item_pks: + try: + item = StockItem.objects.get(pk=pk) + items.append(item) + except (ValueError, StockItem.DoesNotExist): + pass + + if len(items) == 0: + raise ValidationError({'items': 'Must provide valid stockitems'}) + + pdf = label.render(items).getbuffer() + + return DownloadFile(pdf, 'stock_labels.pdf', content_type='application/pdf') + + class StockItemDeleteTestData(AjaxUpdateView): """ View for deleting all test data