diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html index 42bc51bb2f..2fb96e88e3 100644 --- a/InvenTree/build/templates/build/detail.html +++ b/InvenTree/build/templates/build/detail.html @@ -546,14 +546,6 @@ $('#allocate-selected-items').click(function() { ); }); -$("#btn-order-parts").click(function() { - launchModalForm("/order/purchase-order/order-parts/", { - data: { - build: {{ build.id }}, - }, - }); -}); - {% endif %} enableSidebar('buildorder'); diff --git a/InvenTree/company/templates/company/detail.html b/InvenTree/company/templates/company/detail.html index 8168c65609..4474278613 100644 --- a/InvenTree/company/templates/company/detail.html +++ b/InvenTree/company/templates/company/detail.html @@ -333,14 +333,6 @@ orderParts( parts, ); - - return; - - launchModalForm("/order/purchase-order/order-parts/", { - data: { - parts: parts, - }, - }); }); {% endif %} @@ -404,14 +396,16 @@ var parts = []; selections.forEach(function(item) { - parts.push(item.part); + var part = item.part_detail; + parts.push(part); }); - launchModalForm("/order/purchase-order/order-parts/", { - data: { - parts: parts, - }, - }); + orderParts( + parts, + { + supplier: {{ company.pk }}, + } + ); }); {% endif %} diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js index d489ffd1c7..1b197a2766 100644 --- a/InvenTree/templates/js/translated/order.js +++ b/InvenTree/templates/js/translated/order.js @@ -485,9 +485,16 @@ function orderParts(parts_list, options={}) { var parts = []; + var parts_seen = {}; + parts_list.forEach(function(part) { if (part.purchaseable) { - parts.push(part); + + // Prevent duplicates + if (!(part.pk in parts_seen)) { + parts_seen[part.pk] = true; + parts.push(part); + } } }); @@ -622,24 +629,40 @@ function orderParts(parts_list, options={}) { `; + // Construct API filters for the SupplierPart field + var supplier_part_filters = { + supplier_detail: true, + part_detail: true, + }; + + if (options.supplier) { + supplier_part_filters.supplier = options.supplier; + } + + // Construct API filtres for the PurchaseOrder field + var order_filters = { + status: {{ PurchaseOrderStatus.PENDING }}, + supplier_detail: true, + }; + + if (options.supplier) { + order_filters.supplier = options.supplier; + } + constructFormBody({}, { preFormContent: html, title: '{% trans "Order Parts" %}', preventSubmit: true, closeText: '{% trans "Close" %}', afterRender: function(fields, opts) { - // TODO parts.forEach(function(part) { - var filters = { - part: part.pk, - supplier_detail: true, - part_detail: true, - }; + // Filter by base part + supplier_part_filters.part = part.pk; if (part.manufacturer_part) { // Filter by manufacturer part - filters.manufacturer_part = part.manufacturer_part; + supplier_part_filters.manufacturer_part = part.manufacturer_part; } // Configure the "supplier part" field @@ -650,7 +673,7 @@ function orderParts(parts_list, options={}) { required: true, type: 'related field', auto_fill: true, - filters: filters, + filters: supplier_part_filters, noResults: function(query) { return '{% trans "No matching supplier parts" %}'; } @@ -664,10 +687,7 @@ function orderParts(parts_list, options={}) { required: true, type: 'related field', auto_fill: false, - filters: { - status: {{ PurchaseOrderStatus.PENDING }}, - supplier_detail: true, - }, + filters: order_filters, noResults: function(query) { return '{% trans "No matching purchase orders" %}'; }