From 231a669fe53db16315abb2ea624e6f18a4dff831 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 8 Sep 2019 23:53:09 +1000 Subject: [PATCH] Export stock based on supplier --- .../templates/company/detail_stock.html | 14 +++++ InvenTree/stock/templates/stock/location.html | 28 +++++----- InvenTree/stock/views.py | 52 +++++++++++++++---- 3 files changed, 69 insertions(+), 25 deletions(-) diff --git a/InvenTree/company/templates/company/detail_stock.html b/InvenTree/company/templates/company/detail_stock.html index 95c7d1f6d1..43966810b8 100644 --- a/InvenTree/company/templates/company/detail_stock.html +++ b/InvenTree/company/templates/company/detail_stock.html @@ -27,4 +27,18 @@ ] }); + $("#stock-export").click(function() { + launchModalForm("{% url 'stock-export-options' %}", { + submit_text: "Export", + success: function(response) { + var url = "{% url 'stock-export' %}"; + + url += "?format=" + response.format; + url += "&supplier={{ company.id }}"; + + location.href = url; + }, + }); + }); + {% endblock %} \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 9878aa56f6..6a0d05cfcc 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -68,23 +68,21 @@ }); $("#stock-export").click(function() { - launchModalForm("{% url 'stock-export-options' %}", - { - submit_text: "Export", - success: function(response) { - var url = "{% url 'stock-export' %}"; - - url += "?format=" + response.format; - url += "&cascade=" + response.cascade; - - {% if location %} - url += "&location={{ location.id }}"; - {% endif %} + launchModalForm("{% url 'stock-export-options' %}", { + submit_text: "Export", + success: function(response) { + var url = "{% url 'stock-export' %}"; + + url += "?format=" + response.format; + url += "&cascade=" + response.cascade; + + {% if location %} + url += "&location={{ location.id }}"; + {% endif %} - location.href = url; - } + location.href = url; } - ); + }); }); $('#location-create').click(function () { diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index c831cd76a9..6d924361a8 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -24,6 +24,7 @@ from datetime import datetime import tablib +from company.models import Company from part.models import Part from .models import StockItem, StockLocation, StockItemTracking @@ -164,33 +165,59 @@ class StockExport(AjaxView): def get(self, request, *args, **kwargs): export_format = request.GET.get('format', 'csv').lower() - cascade = str2bool(request.GET.get('cascade', True)) - location = None + + # Check if a particular location was specified loc_id = request.GET.get('location', None) - path = 'All-Locations' - + location = None + if loc_id: try: location = StockLocation.objects.get(pk=loc_id) - path = location.pathstring.replace('/', ':') except (ValueError, StockLocation.DoesNotExist): - location = None + pass + + # Check if a particular supplier was specified + sup_id = request.GET.get('supplier', None) + supplier = None + + if sup_id: + try: + supplier = Company.objects.get(pk=sup_id) + except (ValueError, Company.DoesNotExist): + pass + + # Check if a particular part was specified + part_id = request.GET.get('part', None) + part = None + + if part_id: + try: + part = Part.objects.get(pk=part_id) + except (ValueError, Part.DoesNotExist): + pass if export_format not in GetExportFormats(): export_format = 'csv' - filename = 'InvenTree_Stocktake_{loc}_{date}.{fmt}'.format( - loc=path, + filename = 'InvenTree_Stocktake_{date}.{fmt}'.format( date=datetime.now().strftime("%d-%b-%Y"), fmt=export_format ) if location: + # CHeck if locations should be cascading + cascade = str2bool(request.GET.get('cascade', True)) stock_items = location.get_stock_items(cascade) else: cascade = True stock_items = StockItem.objects.all() + if part: + stock_items = stock_items.filter(part=part) + + if supplier: + stock_items = stock_items.filter(supplier_part__supplier=supplier) + # Filter out stock items that are not 'in stock' stock_items = stock_items.filter(customer=None) stock_items = stock_items.filter(belongs_to=None) @@ -235,8 +262,13 @@ class StockExport(AjaxView): line.append('') line.append('') - line.append(item.location.pk) - line.append(item.location.name) + if item.location: + line.append(item.location.pk) + line.append(item.location.name) + else: + line.append('') + line.append('') + line.append(item.quantity) line.append(item.batch) line.append(item.serial)