diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 368dee2f1a..0d85b533f8 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -822,7 +822,32 @@ class BomList(generics.ListCreateAPIView): part = params.get('part', None) if part is not None: - queryset = queryset.filter(part=part) + """ + If we are filtering by "part", there are two cases to consider: + + a) Bom items which are defined for *this* part + b) Inherited parts which are defined for a *parent* part + + So we need to construct two queries! + """ + + # First, check that the part is actually valid! + try: + part = Part.objects.get(pk=part) + + # Construct a filter for matching the provided part + local_part_filter = Q(part=part) + + # Construct a filter for matching inherited items from parent parts + parent_parts = part.get_ancestors(include_self=False) + parent_ids = [p.pk for p in parent_parts] + + parent_part_filter = Q(part__pk__in=parent_ids, inherited=True) + + queryset = queryset.filter(local_part_filter | parent_part_filter) + + except (ValueError, Part.DoesNotExist): + pass # Filter by sub-part? sub_part = params.get('sub_part', None) diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 16518937ae..85a851e235 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -331,6 +331,7 @@ class EditBomItemForm(HelperForm): 'reference', 'overage', 'note', + 'inherited', 'optional', ] diff --git a/InvenTree/templates/js/bom.js b/InvenTree/templates/js/bom.js index 50608e4053..bbaca2c04b 100644 --- a/InvenTree/templates/js/bom.js +++ b/InvenTree/templates/js/bom.js @@ -254,6 +254,18 @@ function loadBomTable(table, options) { }); */ + cols.push({ + field: 'optional', + title: '{% trans "Optional" %}', + searchable: false, + }); + + cols.push({ + field: 'inherited', + title: '{% trans "Inherited" %}', + searchable: false, + }); + cols.push( { 'field': 'can_build', diff --git a/InvenTree/templates/js/table_filters.js b/InvenTree/templates/js/table_filters.js index 81f72fb26d..4c802446fc 100644 --- a/InvenTree/templates/js/table_filters.js +++ b/InvenTree/templates/js/table_filters.js @@ -44,6 +44,10 @@ function getAvailableTableFilters(tableKey) { type: 'bool', title: '{% trans "Validated" %}', }, + inherited: { + type: 'bool', + title: '{% trans "Inherited" %}', + } }; }