diff --git a/InvenTree/order/admin.py b/InvenTree/order/admin.py index 8ab8b832ef..a1e1b74256 100644 --- a/InvenTree/order/admin.py +++ b/InvenTree/order/admin.py @@ -135,6 +135,23 @@ class PurchaseOrderExtraLineResource(ModelResource): model = PurchaseOrderExtraLine +class SalesOrderResource(ModelResource): + """ + Class for managing import / export of SalesOrder data + """ + + # Add number of line items + line_items = Field(attribute='line_count', widget=widgets.IntegerWidget(), readonly=True) + + # Is this order overdue? + overdue = Field(attribute='is_overdue', widget=widgets.BooleanWidget(), readonly=True) + + class Meta: + model = SalesOrder + skip_unchanged = True + clean_model_instances = True + + class SalesOrderLineItemResource(ModelResource): """ Class for managing import / export of SalesOrderLineItem data diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index da037aa8b7..7c8a93125f 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -21,6 +21,7 @@ from InvenTree.api import AttachmentMixin, APIDownloadMixin from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus from order.admin import PurchaseOrderResource, PurchaseOrderLineItemResource +from order.admin import SalesOrderResource import order.models as models import order.serializers as serializers from part.models import Part @@ -583,7 +584,7 @@ class SalesOrderAttachmentDetail(generics.RetrieveUpdateDestroyAPIView, Attachme serializer_class = serializers.SalesOrderAttachmentSerializer -class SalesOrderList(generics.ListCreateAPIView): +class SalesOrderList(APIDownloadMixin, generics.ListCreateAPIView): """ API endpoint for accessing a list of SalesOrder objects. @@ -633,6 +634,15 @@ class SalesOrderList(generics.ListCreateAPIView): return queryset + def download_queryset(self, queryset, export_format): + dataset = SalesOrderResource().export(queryset=queryset) + + filedata = dataset.export(export_format) + + filename = f"InvenTree_SalesOrders.{export_format}" + + return DownloadFile(filedata, filename) + def filter_queryset(self, queryset): """ Perform custom filtering operations on the SalesOrder queryset. diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js index dcd7307628..372dc70a9a 100644 --- a/InvenTree/templates/js/translated/order.js +++ b/InvenTree/templates/js/translated/order.js @@ -2093,7 +2093,9 @@ function loadSalesOrderTable(table, options) { options.url = options.url || '{% url "api-so-list" %}'; - setupFilterList('salesorder', $(table)); + var target = '#filter-list-salesorder'; + + setupFilterList('salesorder', $(table), target, {download: true}); $(table).inventreeTable({ url: options.url,