diff --git a/InvenTree/order/admin.py b/InvenTree/order/admin.py index 44d26ea3f2..05598928a7 100644 --- a/InvenTree/order/admin.py +++ b/InvenTree/order/admin.py @@ -2,8 +2,12 @@ from __future__ import unicode_literals from django.contrib import admin + from import_export.admin import ImportExportModelAdmin +from import_export.resources import ModelResource +from import_export.fields import Field + from .models import PurchaseOrder, PurchaseOrderLineItem @@ -18,8 +22,28 @@ class PurchaseOrderAdmin(ImportExportModelAdmin): ) +class POLineItemResource(ModelResource): + """ Class for managing import / export of POLineItem data """ + + part_name = Field(attribute='part__part__name', readonly=True) + + manufacturer = Field(attribute='part__manufacturer', readonly=True) + + MPN = Field(attribute='part__MPN', readonly=True) + + SKU = Field(attribute='part__SKU', readonly=True) + + class Meta: + model = PurchaseOrderLineItem + skip_unchanged = True + report_skipped = False + clean_model_instances = True + + class PurchaseOrderLineItemAdmin(ImportExportModelAdmin): + resource_class = POLineItemResource + list_display = ( 'order', 'part', diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index ef79a4d39b..9eff4d11c3 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -12,7 +12,6 @@ from django.contrib.auth.models import User from django.urls import reverse from django.utils.translation import ugettext as _ -import tablib from datetime import datetime from stock.models import StockItem @@ -126,54 +125,6 @@ class PurchaseOrder(Order): related_name='+' ) - def export_to_file(self, **kwargs): - """ Export order information to external file """ - - file_format = kwargs.get('format', 'csv').lower() - - data = tablib.Dataset(headers=[ - 'Line', - 'Part', - 'Description', - 'Manufacturer', - 'MPN', - 'Order Code', - 'Quantity', - 'Received', - 'Reference', - 'Notes', - ]) - - idx = 0 - - for item in self.lines.all(): - - line = [] - - line.append(idx) - - if item.part: - line.append(item.part.part.name) - line.append(item.part.part.description) - - line.append(item.part.manufacturer) - line.append(item.part.MPN) - line.append(item.part.SKU) - - else: - line += [[] * 5] - - line.append(item.quantity) - line.append(item.received) - line.append(item.reference) - line.append(item.notes) - - idx += 1 - - data.append(line) - - return data.export(file_format) - def get_absolute_url(self): return reverse('purchase-order-detail', kwargs={'pk': self.id}) diff --git a/InvenTree/order/tests.py b/InvenTree/order/tests.py index c271e0be43..351c152472 100644 --- a/InvenTree/order/tests.py +++ b/InvenTree/order/tests.py @@ -139,13 +139,3 @@ class OrderTest(TestCase): order.receive_line_item(line, loc, line.quantity, user=None) self.assertEqual(order.status, OrderStatus.COMPLETE) - - def test_export(self): - """ Test order exporting """ - - order = PurchaseOrder.objects.get(pk=1) - - output = order.export_to_file(format='csv') - - self.assertIn('M2x4 LPHS', output) - self.assertIn('Line,Part,Description', output) diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index fafd313022..86a231075e 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -14,6 +14,7 @@ from django.forms import HiddenInput import logging from .models import PurchaseOrder, PurchaseOrderLineItem +from .admin import POLineItemResource from build.models import Build from company.models import Company, SupplierPart from stock.models import StockItem, StockLocation @@ -165,7 +166,9 @@ class PurchaseOrderExport(AjaxView): fmt=export_format ) - filedata = order.export_to_file(format=export_format) + dataset = POLineItemResource().export(queryset=order.lines.all()) + + filedata = dataset.export(format=export_format) return DownloadFile(filedata, filename)