From bd30ac037b96f1d333d350a9af370ee096950203 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 7 Jul 2019 11:22:01 +1000 Subject: [PATCH] Generate a list of allowed BOM items and pass to the form template --- InvenTree/part/models.py | 12 ++++++++++++ .../part/templates/part/bom_upload/select_parts.html | 3 +++ InvenTree/part/views.py | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index cc5bfc0db1..b0a96c8759 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -678,6 +678,18 @@ class Part(models.Model): parts.append(bom.sub_part) return parts + def get_allowed_bom_items(self): + """ Return a list of parts which can be added to a BOM for this part. + + - Exclude parts which are not 'component' parts + - Exclude parts which this part is in the BOM for + """ + + parts = Part.objects.filter(component=True) + parts = parts.exclude(id__in=[part.id for part in self.used_in.all()]) + + return parts + @property def supplier_count(self): """ Return the number of supplier parts available for this part """ diff --git a/InvenTree/part/templates/part/bom_upload/select_parts.html b/InvenTree/part/templates/part/bom_upload/select_parts.html index cfdf06ddc1..9904175be5 100644 --- a/InvenTree/part/templates/part/bom_upload/select_parts.html +++ b/InvenTree/part/templates/part/bom_upload/select_parts.html @@ -49,6 +49,9 @@ {% if item.column.guess == 'Part' %}
{{ item.cell }} diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 8183b44044..89ba6b2bf9 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -654,6 +654,7 @@ class BomUpload(FormView): bom_columns = [] bom_rows = [] missing_columns = [] + allowed_parts = [] def get_success_url(self): @@ -703,9 +704,16 @@ class BomUpload(FormView): ctx['bom_columns'] = self.bom_columns ctx['bom_rows'] = rows ctx['missing_columns'] = self.missing_columns + ctx['allowed_parts_list'] = self.allowed_parts return ctx + def getAllowedParts(self): + """ Return a queryset of parts which are allowed to be added to this BOM. + """ + + return self.part.get_allowed_bom_items() + def get(self, request, *args, **kwargs): """ Perform the initial 'GET' request. @@ -915,6 +923,7 @@ class BomUpload(FormView): self.request = request self.part = get_object_or_404(Part, pk=self.kwargs['pk']) + self.allowed_parts = self.getAllowedParts() self.form = self.get_form(self.get_form_class()) # Did the user POST a file named bom_file?