From 846899fa53c584a744bcef4fc9fdaf8e8c000a49 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 4 Mar 2022 00:45:30 +1100 Subject: [PATCH] Adds ability to download purchase order line item table --- InvenTree/order/api.py | 31 +++++++++++++++++++++- InvenTree/templates/js/translated/order.js | 6 ++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index 66c61bd0d7..2d079f8d45 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -16,10 +16,11 @@ from rest_framework.response import Response from company.models import SupplierPart from InvenTree.filters import InvenTreeOrderingFilter -from InvenTree.helpers import str2bool +from InvenTree.helpers import str2bool, DownloadFile from InvenTree.api import AttachmentMixin from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus +from order.admin import POLineItemResource import order.models as models import order.serializers as serializers from part.models import Part @@ -370,6 +371,34 @@ class POLineItemList(generics.ListCreateAPIView): return queryset + def list(self, request, *args, **kwargs): + + queryset = self.filter_queryset(self.get_queryset()) + + # Check if we wish to export the queried data to a file + export_format = request.query_params.get('export', None) + + if export_format: + export_format = str(export_format).strip().lower() + + if export_format in ['csv', 'tsv', 'xls', 'xlsx']: + dataset = POLineItemResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + + filename = f"InvenTree_PurchaseOrderData.{export_format}" + + return DownloadFile(filedata, filename) + + page = self.paginate_queryset(queryset) + + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + filter_backends = [ rest_filters.DjangoFilterBackend, filters.SearchFilter, diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js index f20d244cc0..b4757e2494 100644 --- a/InvenTree/templates/js/translated/order.js +++ b/InvenTree/templates/js/translated/order.js @@ -1051,7 +1051,7 @@ function loadPurchaseOrderLineItemTable(table, options={}) { var target = options.filter_target || '#filter-list-purchase-order-lines'; - setupFilterList('purchaseorderlineitem', $(table), target); + setupFilterList('purchaseorderlineitem', $(table), target, {download: true}); function setupCallbacks() { if (options.allow_edit) { @@ -1078,7 +1078,7 @@ function loadPurchaseOrderLineItemTable(table, options={}) { }); } }); - }) + }); // Callback for "edit" button $(table).find('.button-line-edit').click(function() { @@ -2583,7 +2583,7 @@ function loadSalesOrderLineItemTable(table, options={}) { fields: fields, data: data, title: '{% trans "Duplicate Line Item" %}', - onSuccess: function(response) { + onSuccess: function(response) { $(table).bootstrapTable('refresh'); } });