2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-09 07:00:56 +00:00

Feature: Supplier part pack size (#3644)

* Adds 'pack_size' field to SupplierPart model

* Edit pack_size for SupplierPart via API

* Display pack size in supplier part page template

* Improve table ordering for SupplierPart table

* Fix for API filtering

- Need to use custom filter class

* Adds functionality to duplicate an existing SupplierPart

* Bump API version number

* Display annotation of pack size in purchase order line item table

* Display additional information in part purchase order table

* Add UOM to purchase order table

* Improve receive items functionality

* Indicate quantity which will be received in modal form

* Update the received quantity as the user changes the value

* Take  the pack_size into account when receiving line items

* Take supplierpart pack size into account when receiving line items

* Add "pack size" column to purchase order line item table

* Tweak supplier part table

* Update 'on_order' queryset annotation to take pack_size into account

- May god have mercy on my soul

* Adds a unit test to validate that the on_order queryset annotation is working as expected

* Update Part.on_order method to take pack_size into account

- Check in existing unit test also

* Fix existing unit tests

- Previous unit test was actually in error
- Logic for calculating "on_order" was broked

* More unit tests for receiving items against a purchase order

* Allow pack_size < 1

* Display pack size when adding / editing PurchaseOrderLineItem

* Fix bug in part purchase order table

* Update part purchase order table again

* Exclude notificationmessage when exporting dataset

* Also display pack size when ordering parts from secondary form

* javascript linting

* Change user facing strings to "Pack Quantity"
This commit is contained in:
Oliver
2022-09-08 09:49:14 +10:00
committed by GitHub
parent 890c998420
commit 198ac9b275
17 changed files with 567 additions and 60 deletions

View File

@ -16,6 +16,7 @@
deleteManufacturerParts,
deleteManufacturerPartParameters,
deleteSupplierParts,
duplicateSupplierPart,
editCompany,
loadCompanyTable,
loadManufacturerPartTable,
@ -130,7 +131,8 @@ function supplierPartFields(options={}) {
},
packaging: {
icon: 'fa-box',
}
},
pack_size: {},
};
if (options.part) {
@ -198,6 +200,39 @@ function createSupplierPart(options={}) {
}
/*
* Launch a modal form to duplicate an existing SupplierPart instance
*/
function duplicateSupplierPart(part, options={}) {
var fields = options.fields || supplierPartFields();
// Retrieve information for the supplied part
inventreeGet(`/api/company/part/${part}/`, {}, {
success: function(data) {
// Remove fields which we do not want to duplicate
delete data['pk'];
delete data['available'];
delete data['availability_updated'];
constructForm(`/api/company/part/`, {
method: 'POST',
fields: fields,
title: '{% trans "Duplicate Supplier Part" %}',
data: data,
onSuccess: function(response) {
handleFormSuccess(response, options);
}
});
}
});
}
/*
* Launch a modal form to edit an existing SupplierPart instance
*/
function editSupplierPart(part, options={}) {
var fields = options.fields || supplierPartFields();
@ -865,6 +900,7 @@ function loadSupplierPartTable(table, url, options) {
switchable: params['part_detail'],
sortable: true,
field: 'part_detail.full_name',
sortName: 'part',
title: '{% trans "Part" %}',
formatter: function(value, row) {
@ -915,6 +951,7 @@ function loadSupplierPartTable(table, url, options) {
visible: params['manufacturer_detail'],
switchable: params['manufacturer_detail'],
sortable: true,
sortName: 'manufacturer',
field: 'manufacturer_detail.name',
title: '{% trans "Manufacturer" %}',
formatter: function(value, row) {
@ -933,6 +970,7 @@ function loadSupplierPartTable(table, url, options) {
visible: params['manufacturer_detail'],
switchable: params['manufacturer_detail'],
sortable: true,
sortName: 'MPN',
field: 'manufacturer_part_detail.MPN',
title: '{% trans "MPN" %}',
formatter: function(value, row) {
@ -943,8 +981,24 @@ function loadSupplierPartTable(table, url, options) {
}
}
},
{
field: 'description',
title: '{% trans "Description" %}',
sortable: false,
},
{
field: 'packaging',
title: '{% trans "Packaging" %}',
sortable: true,
},
{
field: 'pack_size',
title: '{% trans "Pack Quantity" %}',
sortable: true,
},
{
field: 'link',
sortable: false,
title: '{% trans "Link" %}',
formatter: function(value) {
if (value) {
@ -954,21 +1008,11 @@ function loadSupplierPartTable(table, url, options) {
}
}
},
{
field: 'description',
title: '{% trans "Description" %}',
sortable: false,
},
{
field: 'note',
title: '{% trans "Notes" %}',
sortable: false,
},
{
field: 'packaging',
title: '{% trans "Packaging" %}',
sortable: false,
},
{
field: 'in_stock',
title: '{% trans "In Stock" %}',
@ -976,7 +1020,7 @@ function loadSupplierPartTable(table, url, options) {
},
{
field: 'available',
title: '{% trans "Available" %}',
title: '{% trans "Availability" %}',
sortable: true,
formatter: function(value, row) {
if (row.availability_updated) {