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

View File

@ -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 %}

View File

@ -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={}) {
</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({}, {
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" %}';
}