2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-05-01 13:06:45 +00:00

Order parts from "supplier parts" page

- Prevent duplicate parts from loading
This commit is contained in:
Oliver Walters 2022-05-03 16:52:23 +10:00
parent c0163a476f
commit 28f3244574
3 changed files with 41 additions and 35 deletions

View File

@ -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 %} {% endif %}
enableSidebar('buildorder'); enableSidebar('buildorder');

View File

@ -333,14 +333,6 @@
orderParts( orderParts(
parts, parts,
); );
return;
launchModalForm("/order/purchase-order/order-parts/", {
data: {
parts: parts,
},
});
}); });
{% endif %} {% endif %}
@ -404,14 +396,16 @@
var parts = []; var parts = [];
selections.forEach(function(item) { selections.forEach(function(item) {
parts.push(item.part); var part = item.part_detail;
parts.push(part);
}); });
launchModalForm("/order/purchase-order/order-parts/", { orderParts(
data: { parts,
parts: parts, {
}, supplier: {{ company.pk }},
}); }
);
}); });
{% endif %} {% endif %}

View File

@ -485,9 +485,16 @@ function orderParts(parts_list, options={}) {
var parts = []; var parts = [];
var parts_seen = {};
parts_list.forEach(function(part) { parts_list.forEach(function(part) {
if (part.purchaseable) { 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={}) {
</table> </table>
`; `;
// 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({}, { constructFormBody({}, {
preFormContent: html, preFormContent: html,
title: '{% trans "Order Parts" %}', title: '{% trans "Order Parts" %}',
preventSubmit: true, preventSubmit: true,
closeText: '{% trans "Close" %}', closeText: '{% trans "Close" %}',
afterRender: function(fields, opts) { afterRender: function(fields, opts) {
// TODO
parts.forEach(function(part) { parts.forEach(function(part) {
var filters = { // Filter by base part
part: part.pk, supplier_part_filters.part = part.pk;
supplier_detail: true,
part_detail: true,
};
if (part.manufacturer_part) { if (part.manufacturer_part) {
// Filter by 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 // Configure the "supplier part" field
@ -650,7 +673,7 @@ function orderParts(parts_list, options={}) {
required: true, required: true,
type: 'related field', type: 'related field',
auto_fill: true, auto_fill: true,
filters: filters, filters: supplier_part_filters,
noResults: function(query) { noResults: function(query) {
return '{% trans "No matching supplier parts" %}'; return '{% trans "No matching supplier parts" %}';
} }
@ -664,10 +687,7 @@ function orderParts(parts_list, options={}) {
required: true, required: true,
type: 'related field', type: 'related field',
auto_fill: false, auto_fill: false,
filters: { filters: order_filters,
status: {{ PurchaseOrderStatus.PENDING }},
supplier_detail: true,
},
noResults: function(query) { noResults: function(query) {
return '{% trans "No matching purchase orders" %}'; return '{% trans "No matching purchase orders" %}';
} }