From 1dc2636e456a4d5d6364f7ee46788d7f8b46cf66 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 14 Jan 2021 15:20:42 +1100 Subject: [PATCH] Add option to show part quantity in various forms Enabling this option can make BOM item forms *very* slow! --- InvenTree/common/models.py | 7 +++++++ InvenTree/part/forms.py | 12 +++++++++++- InvenTree/part/models.py | 8 +++++++- InvenTree/templates/InvenTree/settings/part.html | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 5c04f9a7e9..4a6bde8bfe 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -160,6 +160,13 @@ class InvenTreeSetting(models.Model): 'validator': bool, }, + 'PART_SHOW_QUANTITY_IN_FORMS': { + 'name': _('Show Quantity in Forms'), + 'description': _('Display available part quantity in some forms'), + 'default': True, + 'validator': bool, + }, + 'STOCK_ENABLE_EXPIRY': { 'name': _('Stock Expiry'), 'description': _('Enable stock expiry functionality'), diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 1ac62161a5..16518937ae 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -13,6 +13,8 @@ from mptt.fields import TreeNodeChoiceField from django import forms from django.utils.translation import ugettext as _ +import common.models + from .models import Part, PartCategory, PartAttachment, PartRelated from .models import BomItem from .models import PartParameterTemplate, PartParameter @@ -23,8 +25,16 @@ from .models import PartSellPriceBreak class PartModelChoiceField(forms.ModelChoiceField): """ Extending string representation of Part instance with available stock """ + def label_from_instance(self, part): - return f'{part} - {part.available_stock}' + + label = str(part) + + # Optionally display available part quantity + if common.models.InvenTreeSetting.get_setting('PART_SHOW_QUANTITY_IN_FORMS'): + label += f" - {part.available_stock}" + + return label class PartImageForm(HelperForm): diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 8c88adf747..a45220c7ab 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -1990,7 +1990,13 @@ class BomItem(models.Model): Return the available stock items for the referenced sub_part """ - query = self.sub_part.stock_items.filter(StockModels.StockItem.IN_STOCK_FILTER).aggregate( + query = self.sub_part.stock_items.all() + + query = query.prefetch_related([ + 'sub_part__stock_items', + ]) + + query = query.filter(StockModels.StockItem.IN_STOCK_FILTER).aggregate( available=Coalesce(Sum('quantity'), 0) ) diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index fe46911dae..9174b2f127 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -18,6 +18,7 @@ {% include "InvenTree/settings/setting.html" with key="PART_IPN_REGEX" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DUPLICATE_IPN" %} + {% include "InvenTree/settings/setting.html" with key="PART_SHOW_QUANTITY_IN_FORMS" icon="fa-hashtag" %} {% include "InvenTree/settings/setting.html" with key="PART_TEMPLATE" icon="fa-clone" %} {% include "InvenTree/settings/setting.html" with key="PART_ASSEMBLY" icon="fa-tools" %}