2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-20 22:06:28 +00:00

Cleanup get_required_parts function

This commit is contained in:
Oliver Walters
2020-10-23 22:49:46 +11:00
parent 5db043ab4b
commit 076d5c4f7f
4 changed files with 34 additions and 15 deletions

View File

@ -931,13 +931,26 @@ class Part(MPTTModel):
self.bom_items.all().delete()
def required_parts(self):
""" Return a list of parts required to make this part (list of BOM items) """
parts = []
def getRequiredParts(self, recursive=False, parts=set()):
"""
Return a list of parts required to make this part (i.e. BOM items).
Args:
recursive: If True iterate down through sub-assemblies
parts: Set of parts already found (to prevent recursion issues)
"""
for bom_item in self.bom_items.all().select_related('sub_part'):
sub_part = bom_item.sub_part
if sub_part not in parts:
parts.add(sub_part)
if recursive:
sub_part.getRequiredParts(recursive=True, parts=parts)
for bom in self.bom_items.all().select_related('sub_part'):
parts.append(bom.sub_part)
return parts
def get_allowed_bom_items(self):

View File

@ -2127,7 +2127,7 @@ class BomItemCreate(AjaxCreateView):
query = query.filter(active=True)
# Eliminate any options that are already in the BOM!
query = query.exclude(id__in=[item.id for item in part.required_parts()])
query = query.exclude(id__in=[item.id for item in part.getRequiredParts()])
form.fields['sub_part'].queryset = query
@ -2195,7 +2195,7 @@ class BomItemEdit(AjaxUpdateView):
except ValueError:
sub_part_id = -1
existing = [item.pk for item in part.required_parts()]
existing = [item.pk for item in part.getRequiredParts()]
if sub_part_id in existing:
existing.remove(sub_part_id)