diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py
index 92e5c1522c..9095d4af07 100644
--- a/InvenTree/common/models.py
+++ b/InvenTree/common/models.py
@@ -1429,6 +1429,13 @@ class InvenTreeUserSetting(BaseInvenTreeSetting):
'validator': bool,
},
+ 'SEARCH_HIDE_INACTIVE_PARTS': {
+ 'name': _("Hide Inactive Parts"),
+ 'description': _('Excluded inactive parts from search preview window'),
+ 'default': False,
+ 'validator': bool,
+ },
+
'SEARCH_PREVIEW_SHOW_CATEGORIES': {
'name': _('Search Categories'),
'description': _('Display part categories in search preview window'),
@@ -1443,6 +1450,13 @@ class InvenTreeUserSetting(BaseInvenTreeSetting):
'validator': bool,
},
+ 'SEARCH_PREVIEW_HIDE_UNAVAILABLE_STOCK': {
+ 'name': _('Hide Unavailable Stock Items'),
+ 'description': _('Exclude stock items which are not available from the search preview window'),
+ 'validator': bool,
+ 'default': False,
+ },
+
'SEARCH_PREVIEW_SHOW_LOCATIONS': {
'name': _('Search Locations'),
'description': _('Display stock locations in search preview window'),
@@ -1464,6 +1478,13 @@ class InvenTreeUserSetting(BaseInvenTreeSetting):
'validator': bool,
},
+ 'SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS': {
+ 'name': _('Exclude Inactive Purchase Orders'),
+ 'description': _('Exclude inactive purchase orders from search preview window'),
+ 'default': True,
+ 'validator': bool,
+ },
+
'SEARCH_PREVIEW_SHOW_SALES_ORDERS': {
'name': _('Search Sales Orders'),
'description': _('Display sales orders in search preview window'),
@@ -1471,6 +1492,13 @@ class InvenTreeUserSetting(BaseInvenTreeSetting):
'validator': bool,
},
+ 'SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS': {
+ 'name': _('Exclude Inactive Sales Orders'),
+ 'description': _('Exclude inactive sales orders from search preview window'),
+ 'validator': bool,
+ 'default': True,
+ },
+
'SEARCH_PREVIEW_RESULTS': {
'name': _('Search Preview Results'),
'description': _('Number of results to show in each section of the search preview window'),
@@ -1478,13 +1506,6 @@ class InvenTreeUserSetting(BaseInvenTreeSetting):
'validator': [int, MinValueValidator(1)]
},
- 'SEARCH_HIDE_INACTIVE_PARTS': {
- 'name': _("Hide Inactive Parts"),
- 'description': _('Hide inactive parts in search preview window'),
- 'default': False,
- 'validator': bool,
- },
-
'PART_SHOW_QUANTITY_IN_FORMS': {
'name': _('Show Quantity in Forms'),
'description': _('Display available part quantity in some forms'),
diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py
index 7f6f6dbe40..f46f1007a5 100644
--- a/InvenTree/common/tests.py
+++ b/InvenTree/common/tests.py
@@ -163,10 +163,19 @@ class SettingsTest(TestCase):
"""
for key, setting in InvenTreeSetting.SETTINGS.items():
- self.run_settings_check(key, setting)
+
+ try:
+ self.run_settings_check(key, setting)
+ except Exception as exc:
+ print(f"run_settings_check failed for global setting '{key}'")
+ raise exc
for key, setting in InvenTreeUserSetting.SETTINGS.items():
- self.run_settings_check(key, setting)
+ try:
+ self.run_settings_check(key, setting)
+ except Exception as exc:
+ print(f"run_settings_check failed for user setting '{key}'")
+ raise exc
def test_defaults(self):
"""
diff --git a/InvenTree/templates/InvenTree/settings/user_search.html b/InvenTree/templates/InvenTree/settings/user_search.html
index 1883110b80..f18fb5816c 100644
--- a/InvenTree/templates/InvenTree/settings/user_search.html
+++ b/InvenTree/templates/InvenTree/settings/user_search.html
@@ -15,16 +15,19 @@
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_PARTS" user_setting=True icon='fa-shapes' %}
+ {% include "InvenTree/settings/setting.html" with key="SEARCH_HIDE_INACTIVE_PARTS" user_setting=True icon='fa-eye-slash' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_CATEGORIES" user_setting=True icon='fa-sitemap' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_STOCK" user_setting=True icon='fa-boxes' %}
+ {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_HIDE_UNAVAILABLE_STOCK" user_setting=True icon='fa-eye-slash' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_LOCATIONS" user_setting=True icon='fa-sitemap' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_COMPANIES" user_setting=True icon='fa-building' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_PURCHASE_ORDERS" user_setting=True icon='fa-shopping-cart' %}
+ {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS" user_setting=True icon='fa-eye-slash' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_SALES_ORDERS" user_setting=True icon='fa-truck' %}
+ {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS" user_setting=True icon='fa-eye-slash' %}
{% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_RESULTS" user_setting=True icon='fa-search' %}
- {% include "InvenTree/settings/setting.html" with key="SEARCH_HIDE_INACTIVE_PARTS" user_setting=True icon='fa-eye-slash' %}
diff --git a/InvenTree/templates/js/translated/search.js b/InvenTree/templates/js/translated/search.js
index 4db310a062..9758ee2ff9 100644
--- a/InvenTree/templates/js/translated/search.js
+++ b/InvenTree/templates/js/translated/search.js
@@ -122,14 +122,22 @@ function updateSearch() {
if (user_settings.SEARCH_PREVIEW_SHOW_STOCK) {
// Search for matching stock items
+
+ var filters = {
+ part_detail: true,
+ location_detail: true,
+ };
+
+ if (user_settings.SEARCH_PREVIEW_HIDE_UNAVAILABLE_STOCK) {
+ // Only show 'in stock' items in the preview windoww
+ filters.in_stock = true;
+ }
+
addSearchQuery(
'stock',
'{% trans "Stock Items" %}',
'{% url "api-stock-list" %}',
- {
- part_detail: true,
- location_detail: true,
- },
+ filters,
renderStockItem,
{
url: '/stock/item',
@@ -167,15 +175,21 @@ function updateSearch() {
}
if (user_settings.SEARCH_PREVIEW_SHOW_PURCHASE_ORDERS) {
+
+ var filters = {
+ supplier_detail: true,
+ };
+
+ if (user_settings.SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS) {
+ filters.outstanding = true;
+ }
+
// Search for matching purchase orders
addSearchQuery(
'purchaseorder',
'{% trans "Purchase Orders" %}',
'{% url "api-po-list" %}',
- {
- supplier_detail: true,
- outstanding: true,
- },
+ filters,
renderPurchaseOrder,
{
url: '/order/purchase-order',
@@ -184,15 +198,22 @@ function updateSearch() {
}
if (user_settings.SEARCH_PREVIEW_SHOW_SALES_ORDERS) {
+
+ var filters = {
+ customer_detail: true,
+ };
+
+ // Hide inactive (not "outstanding" orders)
+ if (user_settings.SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS) {
+ filters.outstanding = true;
+ }
+
// Search for matching sales orders
addSearchQuery(
'salesorder',
'{% trans "Sales Orders" %}',
'{% url "api-so-list" %}',
- {
- customer_detail: true,
- outstanding: true,
- },
+ filters,
renderSalesOrder,
{
url: '/order/sales-order',