From 2c969ef1c60dfc6854e3e0e92e3f5dd40904a9f4 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 8 Sep 2019 10:57:19 +1000 Subject: [PATCH] View for exporting stocktake / stock list (cherry picked from commit bdad2d6178a14322ef225d08b13db86b6d7d0909) --- InvenTree/stock/urls.py | 2 ++ InvenTree/stock/views.py | 38 +++++++++++++++++++++++++++++++++++++- Makefile | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index 76fbaae669..19dbecd88a 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -51,6 +51,8 @@ stock_urls = [ url(r'^adjust/?', views.StockAdjust.as_view(), name='stock-adjust'), + url(r'^export/?', views.StockExport.as_view(), name='stock-export'), + # Individual stock items url(r'^item/(?P\d+)/', include(stock_item_detail_urls)), diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 1431cb3693..46d33e534e 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -18,7 +18,7 @@ from InvenTree.views import AjaxView from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView from InvenTree.views import QRCodeView -from InvenTree.helpers import str2bool +from InvenTree.helpers import str2bool, DownloadFile from InvenTree.helpers import ExtractSerialNumbers from datetime import datetime @@ -119,6 +119,42 @@ class StockLocationQRCode(QRCodeView): return None +class StockExport(AjaxView): + """ Export stock data from a particular location. + Returns a file containing stock information for that location. + """ + + model = StockItem + + def get(self, request, *args, **kwargs): + + location = None + loc_id = request.GET.get('location', None) + path = 'All-Locations' + + if loc_id: + try: + location = StockLocation.objects.get(pk=loc_id) + path = location.pathstring.replace('/', ':') + except (ValueError, StockLocation.DoesNotExist): + pass + + export_format = request.GET.get('format', 'csv').lower() + + if export_format not in ['csv', 'xls', 'xslx']: + export_format = 'csv' + + filename = 'InvenTree_Stocktake_{loc}_{date}.{fmt}'.format( + loc=path, + date=datetime.now().strftime("%d-%b-%Y"), + fmt=export_format + ) + + filedata = "" + + return DownloadFile(filedata, filename) + + class StockItemQRCode(QRCodeView): """ View for displaying a QR code for a StockItem object """ diff --git a/Makefile b/Makefile index 38446635da..f6b054dab0 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ test: # Run code coverage coverage: python3 InvenTree/manage.py check - coverage run InvenTree/manage.py test build common company order part stock InvenTree + coverage run InvenTree/manage.py test build common company order part stock InvenTree coverage html # Install packages required to generate code docs