From 5550c89b9aed725efe05f95d7f523828fe984bfe Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 14:44:31 +0000
Subject: [PATCH 01/24] make padding uniform
---
InvenTree/InvenTree/static/css/inventree.css | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css
index 632ec2e0e5..f3e1a558e2 100644
--- a/InvenTree/InvenTree/static/css/inventree.css
+++ b/InvenTree/InvenTree/static/css/inventree.css
@@ -545,6 +545,7 @@
.inventree-body {
width: 100%;
padding: 5px;
+ padding-right: 0;
}
.inventree-pre-content {
@@ -835,7 +836,7 @@ input[type="submit"] {
.panel {
box-shadow: 2px 2px #DDD;
- margin-bottom: 20px;
+ margin-bottom: .75rem;
background-color: #fff;
border: 1px solid #ccc;
}
From d604b2afff2b668bc8ca3a25bffafb4c4af7d667 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 14:44:46 +0000
Subject: [PATCH 02/24] make padding uniform
---
InvenTree/templates/base.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html
index 856deac4be..6378b6b2ee 100644
--- a/InvenTree/templates/base.html
+++ b/InvenTree/templates/base.html
@@ -83,7 +83,7 @@
-
+
{% block alerts %}
From 19a3568511ad75869c5917dfee2f6982baf52047 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 15:02:40 +0000
Subject: [PATCH 03/24] fix nav arranging on mobile
---
InvenTree/templates/navbar.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/InvenTree/templates/navbar.html b/InvenTree/templates/navbar.html
index 58c7b8ecb2..56cc4ed488 100644
--- a/InvenTree/templates/navbar.html
+++ b/InvenTree/templates/navbar.html
@@ -62,9 +62,9 @@
{% include "search_form.html" %}
-
+
{% if barcodes %}
-
+
From ad5ba96278bab7c3667579466f9387d9306f15f4 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 15:07:01 +0000
Subject: [PATCH 04/24] move toggler to the end
---
InvenTree/templates/navbar.html | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/InvenTree/templates/navbar.html b/InvenTree/templates/navbar.html
index 56cc4ed488..4578ac2db3 100644
--- a/InvenTree/templates/navbar.html
+++ b/InvenTree/templates/navbar.html
@@ -10,9 +10,6 @@
-
-
-
{% if roles.part.view %}
@@ -70,6 +67,11 @@
{% endif %}
+
+
+
+
+
-
From bbd723a17673feac250a6fe93b93752cd4b291c6 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 15:11:31 +0000
Subject: [PATCH 05/24] fix QR code alingment
---
InvenTree/InvenTree/static/css/inventree.css | 6 ------
InvenTree/templates/qr_code.html | 2 +-
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css
index f3e1a558e2..00041f0fae 100644
--- a/InvenTree/InvenTree/static/css/inventree.css
+++ b/InvenTree/InvenTree/static/css/inventree.css
@@ -125,12 +125,6 @@
align-content: center;
}
-.qr-container {
- width: 100%;
- align-content: center;
- object-fit: fill;
-}
-
.navbar {
border-bottom: 1px solid #ccc;
background-color: var(--secondary-color);
diff --git a/InvenTree/templates/qr_code.html b/InvenTree/templates/qr_code.html
index 8964ef02be..a39847629d 100644
--- a/InvenTree/templates/qr_code.html
+++ b/InvenTree/templates/qr_code.html
@@ -3,7 +3,7 @@
{% if qr_data %}
-
+
{% else %}
From 857cdd5aeac4004a269e4d82256a5eca2f799baa Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 17:41:11 +0000
Subject: [PATCH 06/24] Enlsigh is the base - always translated! Fixes #2257
---
InvenTree/templates/InvenTree/settings/user.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html
index d1baf1ba6e..867c8ef733 100644
--- a/InvenTree/templates/InvenTree/settings/user.html
+++ b/InvenTree/templates/InvenTree/settings/user.html
@@ -224,7 +224,7 @@
{% if lang_translated %}
{% blocktrans %}{{ lang_translated }}% translated{% endblocktrans %}
{% else %}
- {% trans 'No translations available' %}
+ {% if lang_code == 'en' %}-{% else %}{% trans 'No translations available' %}{% endif %}
{% endif %}
{% endfor %}
From cea466973a4886721a790610a2d4d88929f0675b Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 19:55:02 +0000
Subject: [PATCH 07/24] Check if language has enough translations Fixes #2257
---
InvenTree/templates/InvenTree/settings/user.html | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html
index 867c8ef733..2692d11c02 100644
--- a/InvenTree/templates/InvenTree/settings/user.html
+++ b/InvenTree/templates/InvenTree/settings/user.html
@@ -216,9 +216,12 @@
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
+ {% define 'alllang' in request.GET as ALL_LANG %}
{% for language in languages %}
{% define language.code as lang_code %}
{% define locale_stats|keyvalue:lang_code as lang_translated %}
+ {% define lang_translated > 10 or lang_code == 'en' as use_lang %}
+ {% if ALL_LANG or use_lang %}
{{ language.name_local }} ({{ lang_code }})
{% if lang_translated %}
@@ -227,11 +230,19 @@
{% if lang_code == 'en' %}-{% else %}{% trans 'No translations available' %}{% endif %}
{% endif %}
+ {% endif %}
{% endfor %}
+ {% trans "Some languages are have a low translation percentage." %}
+ {% if ALL_LANG %}
+ {% trans "Show only sufficent" %}
+ {% else %}
+ {% trans "Show them too" %}
+ {% endif %}
+
From dccc832779e9741f711880c945fbdfb30c2c5a15 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 20:41:29 +0000
Subject: [PATCH 08/24] fix logic
---
InvenTree/templates/InvenTree/settings/user.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html
index 2692d11c02..81c9af885e 100644
--- a/InvenTree/templates/InvenTree/settings/user.html
+++ b/InvenTree/templates/InvenTree/settings/user.html
@@ -216,7 +216,7 @@
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
- {% define 'alllang' in request.GET as ALL_LANG %}
+ {% if 'alllang' in request.GET %}{% define True as ALL_LANG %}{% endif %}
{% for language in languages %}
{% define language.code as lang_code %}
{% define locale_stats|keyvalue:lang_code as lang_translated %}
From 45b7bc0c5128a2dee7a5e8476ce8e1b261909983 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 20:41:52 +0000
Subject: [PATCH 09/24] always show the current language
---
InvenTree/templates/InvenTree/settings/user.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html
index 81c9af885e..4e882b5e19 100644
--- a/InvenTree/templates/InvenTree/settings/user.html
+++ b/InvenTree/templates/InvenTree/settings/user.html
@@ -220,7 +220,7 @@
{% for language in languages %}
{% define language.code as lang_code %}
{% define locale_stats|keyvalue:lang_code as lang_translated %}
- {% define lang_translated > 10 or lang_code == 'en' as use_lang %}
+ {% if lang_translated > 10 or lang_code == 'en' or lang_code == LANGUAGE_CODE %}{% define True as use_lang %}{% else %}{% define False as use_lang %}{% endif %}
{% if ALL_LANG or use_lang %}
{{ language.name_local }} ({{ lang_code }})
From 30aa07253786eb971d139b881ee16041c0b1f483 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 20:49:09 +0000
Subject: [PATCH 10/24] fix message
---
InvenTree/templates/InvenTree/settings/user.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html
index 4e882b5e19..890b26a07c 100644
--- a/InvenTree/templates/InvenTree/settings/user.html
+++ b/InvenTree/templates/InvenTree/settings/user.html
@@ -236,11 +236,11 @@
- {% trans "Some languages are have a low translation percentage." %}
+
{% trans "Some languages are not complete" %}
{% if ALL_LANG %}
- {% trans "Show only sufficent" %}
+ . {% trans "Show only sufficent" %}
{% else %}
- {% trans "Show them too" %}
+ and hidden. {% trans "Show them too" %}
{% endif %}
From 87539c7aaca0c5502d871dd22bbfb2483c0c3976 Mon Sep 17 00:00:00 2001
From: Matthias Mair
Date: Sat, 6 Nov 2021 20:59:02 +0000
Subject: [PATCH 11/24] select for languages should be wide enough
---
InvenTree/templates/InvenTree/settings/user.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html
index 890b26a07c..89fc67865a 100644
--- a/InvenTree/templates/InvenTree/settings/user.html
+++ b/InvenTree/templates/InvenTree/settings/user.html
@@ -212,7 +212,7 @@
{% trans "Select language" %}
-
- {% block content %}{% endblock %}
+
+
+ {% block content %}
+ {% endblock %}
+
diff --git a/InvenTree/templates/account/login.html b/InvenTree/templates/account/login.html
index 73c49e46c0..fbe48224b4 100644
--- a/InvenTree/templates/account/login.html
+++ b/InvenTree/templates/account/login.html
@@ -32,6 +32,7 @@ for a account and sign in below:{% endblocktrans %}
{% endif %}
+
{% trans "Sign In" %}
diff --git a/InvenTree/templates/account/logout.html b/InvenTree/templates/account/logout.html
index 7268599bb2..df37c76be4 100644
--- a/InvenTree/templates/account/logout.html
+++ b/InvenTree/templates/account/logout.html
@@ -14,6 +14,7 @@
{% if redirect_field_value %}
{% endif %}
+
{% trans "Back to Site" %}
{% trans 'Sign Out' %}
From ef75838ab808bfe4f510c4216b3ac73bd72d66c3 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 09:34:57 +1100
Subject: [PATCH 13/24] Properly display notifications when logging in
---
InvenTree/templates/base.html | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html
index 856deac4be..4321939b6c 100644
--- a/InvenTree/templates/base.html
+++ b/InvenTree/templates/base.html
@@ -190,6 +190,18 @@ $(document).ready(function () {
{% endif %}
moment.locale('{{ request.LANGUAGE_CODE }}');
+
+ // Account notifications
+ {% if messages %}
+ {% for message in messages %}
+ showMessage(
+ '{{ message }}',
+ {
+ style: 'info',
+ }
+ );
+ {% endfor %}
+ {% endif %}
});
From c9924470ad6a91f2ae2f543405ca353664e36c06 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 09:44:45 +1100
Subject: [PATCH 14/24] Replace dialog messages with alerts
---
InvenTree/templates/js/translated/forms.js | 40 +++++++++++++---------
1 file changed, 24 insertions(+), 16 deletions(-)
diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js
index a86b64d0e2..f5cf775f4f 100644
--- a/InvenTree/templates/js/translated/forms.js
+++ b/InvenTree/templates/js/translated/forms.js
@@ -347,10 +347,12 @@ function constructForm(url, options) {
constructCreateForm(OPTIONS.actions.POST, options);
} else {
// User does not have permission to POST to the endpoint
- showAlertDialog(
- '{% trans "Action Prohibited" %}',
- '{% trans "Create operation not allowed" %}'
- );
+ showMessage('{% trans "Action Prohibited" %}', {
+ style: 'danger',
+ details: '{% trans "Create operation not allowed" %}',
+ icon: 'fas fa-user-times',
+ });
+
console.log(`'POST action unavailable at ${url}`);
}
break;
@@ -360,10 +362,12 @@ function constructForm(url, options) {
constructChangeForm(OPTIONS.actions.PUT, options);
} else {
// User does not have permission to PUT/PATCH to the endpoint
- showAlertDialog(
- '{% trans "Action Prohibited" %}',
- '{% trans "Update operation not allowed" %}'
- );
+ showMessage('{% trans "Action Prohibited" %}', {
+ style: 'danger',
+ details: '{% trans "Update operation not allowed" %}',
+ icon: 'fas fa-user-times',
+ });
+
console.log(`${options.method} action unavailable at ${url}`);
}
break;
@@ -372,10 +376,12 @@ function constructForm(url, options) {
constructDeleteForm(OPTIONS.actions.DELETE, options);
} else {
// User does not have permission to DELETE to the endpoint
- showAlertDialog(
- '{% trans "Action Prohibited" %}',
- '{% trans "Delete operation not allowed" %}'
- );
+ showMessage('{% trans "Action Prohibited" %}', {
+ style: 'danger',
+ details: '{% trans "Delete operation not allowed" %}',
+ icon: 'fas fa-user-times',
+ });
+
console.log(`DELETE action unavailable at ${url}`);
}
break;
@@ -384,10 +390,12 @@ function constructForm(url, options) {
// TODO?
} else {
// User does not have permission to GET to the endpoint
- showAlertDialog(
- '{% trans "Action Prohibited" %}',
- '{% trans "View operation not allowed" %}'
- );
+ showMessage('{% trans "Action Prohibited" %}', {
+ style: 'danger',
+ details: '{% trans "View operation not allowed" %}',
+ icon: 'fas fa-user-times',
+ });
+
console.log(`GET action unavailable at ${url}`);
}
break;
From ac97edd18b8578eff4260f330034e93b59b1ee97 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 09:58:55 +1100
Subject: [PATCH 15/24] JS linting
---
InvenTree/templates/about.html | 6 +++---
InvenTree/templates/js/translated/forms.js | 1 -
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/InvenTree/templates/about.html b/InvenTree/templates/about.html
index 34d4bf25e4..34884da9d1 100644
--- a/InvenTree/templates/about.html
+++ b/InvenTree/templates/about.html
@@ -22,12 +22,12 @@
{% inventree_version %} {% include "clip.html" %}
{% inventree_is_development as dev %}
{% if dev %}
- {% trans "Development Version" %}
+ {% trans "Development Version" %}
{% else %}
{% if up_to_date %}
- {% trans "Up to Date" %}
+ {% trans "Up to Date" %}
{% else %}
- {% trans "Update Available" %}
+ {% trans "Update Available" %}
{% endif %}
{% endif %}
diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js
index f5cf775f4f..18ba08d512 100644
--- a/InvenTree/templates/js/translated/forms.js
+++ b/InvenTree/templates/js/translated/forms.js
@@ -19,7 +19,6 @@
renderStockLocation,
renderSupplierPart,
renderUser,
- showAlertDialog,
showAlertOrCache,
showApiError,
*/
From 8d5c3ab18a46c14ca9604f330f98c47b946be118 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 13:10:33 +1100
Subject: [PATCH 16/24] add extra icons for build order form
---
InvenTree/templates/js/translated/build.js | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js
index 499fde9bec..bcbbfcc6d1 100644
--- a/InvenTree/templates/js/translated/build.js
+++ b/InvenTree/templates/js/translated/build.js
@@ -43,11 +43,18 @@ function buildFormFields() {
}
},
sales_order: {
+ icon: 'fa-truck',
},
batch: {},
- target_date: {},
- take_from: {},
- destination: {},
+ target_date: {
+ icon: 'fa-calendar-alt',
+ },
+ take_from: {
+ icon: 'fa-sitemap',
+ },
+ destination: {
+ icon: 'fa-sitemap',
+ },
link: {
icon: 'fa-link',
},
From b2ae346343d9e9ce5f62399cb49dec9728c0d922 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 13:30:59 +1100
Subject: [PATCH 17/24] Provide model-level default function option
---
InvenTree/InvenTree/metadata.py | 15 ++++++++++++++-
InvenTree/build/models.py | 19 +++++++++++++++++--
InvenTree/order/models.py | 4 ++--
3 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/InvenTree/InvenTree/metadata.py b/InvenTree/InvenTree/metadata.py
index e7f78554f9..4294c943ba 100644
--- a/InvenTree/InvenTree/metadata.py
+++ b/InvenTree/InvenTree/metadata.py
@@ -98,7 +98,7 @@ class InvenTreeMetadata(SimpleMetadata):
Override get_serializer_info so that we can add 'default' values
to any fields whose Meta.model specifies a default value
"""
-
+
serializer_info = super().get_serializer_info(serializer)
model_class = None
@@ -108,6 +108,13 @@ class InvenTreeMetadata(SimpleMetadata):
model_fields = model_meta.get_field_info(model_class)
+ model_default_func = getattr(model_class, 'api_defaults', None)
+
+ if model_default_func:
+ model_default_values = model_class.api_defaults(self.request)
+ else:
+ model_default_values = {}
+
# Iterate through simple fields
for name, field in model_fields.fields.items():
@@ -123,6 +130,9 @@ class InvenTreeMetadata(SimpleMetadata):
serializer_info[name]['default'] = default
+ elif name in model_default_values:
+ serializer_info[name]['default'] = model_default_values[name]
+
# Iterate through relations
for name, relation in model_fields.relations.items():
@@ -141,6 +151,9 @@ class InvenTreeMetadata(SimpleMetadata):
if 'help_text' not in serializer_info[name] and hasattr(relation.model_field, 'help_text'):
serializer_info[name]['help_text'] = relation.model_field.help_text
+ if name in model_default_values:
+ serializer_info[name]['default'] = model_default_values[name]
+
except AttributeError:
pass
diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py
index 0dd6a404e5..4fe22f7e0e 100644
--- a/InvenTree/build/models.py
+++ b/InvenTree/build/models.py
@@ -47,7 +47,7 @@ def get_next_build_number():
"""
if Build.objects.count() == 0:
- return
+ return '0001'
build = Build.objects.exclude(reference=None).last()
@@ -100,13 +100,28 @@ class Build(MPTTModel, ReferenceIndexingMixin):
return reverse('api-build-list')
def api_instance_filters(self):
-
+
return {
'parent': {
'exclude_tree': self.pk,
}
}
+ @classmethod
+ def api_defaults(cls, request):
+ """
+ Return default values for this model when issuing an API OPTIONS request
+ """
+
+ defaults = {
+ 'reference': get_next_build_number(),
+ }
+
+ if request and request.user:
+ defaults['issued_by'] = request.user.pk
+
+ return defaults
+
def save(self, *args, **kwargs):
self.rebuild_reference_field()
diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py
index 0c45e3746a..42106a7376 100644
--- a/InvenTree/order/models.py
+++ b/InvenTree/order/models.py
@@ -37,7 +37,7 @@ def get_next_po_number():
"""
if PurchaseOrder.objects.count() == 0:
- return
+ return '0001'
order = PurchaseOrder.objects.exclude(reference=None).last()
@@ -66,7 +66,7 @@ def get_next_so_number():
"""
if SalesOrder.objects.count() == 0:
- return
+ return '0001'
order = SalesOrder.objects.exclude(reference=None).last()
From 35cfa387d1b62ab44bc7dd3e2a0a69b522a95982 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 13:38:03 +1100
Subject: [PATCH 18/24] Fixes navbar menu positioning for smaller screens
---
InvenTree/InvenTree/static/css/inventree.css | 4 ++++
InvenTree/templates/navbar.html | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css
index eda15bb820..cd9ce410de 100644
--- a/InvenTree/InvenTree/static/css/inventree.css
+++ b/InvenTree/InvenTree/static/css/inventree.css
@@ -130,6 +130,10 @@
box-shadow: 0px 5px 5px rgb(0 0 0 / 5%);
}
+.inventree-navbar-menu {
+ position: absolute !important;
+}
+
.navbar-brand {
float: left;
}
diff --git a/InvenTree/templates/navbar.html b/InvenTree/templates/navbar.html
index 4578ac2db3..eeb049d320 100644
--- a/InvenTree/templates/navbar.html
+++ b/InvenTree/templates/navbar.html
@@ -76,7 +76,7 @@
-
+
+{% setting_object 'STOCK_OWNERSHIP_CONTROL' as owner_control %}
+{% if owner_control.value == "True" %}
+ {% authorized_owners item.owner as owners %}
+{% endif %}
+
{% if owner_control.value == "False" or owner_control.value == "True" and user in owners or user.is_superuser %}
{% if roles.stock.change and not item.is_building %}
From 64f5007d3a2a4d0606dba2614d9d5119f3d49873 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 14:47:14 +1100
Subject: [PATCH 20/24] Fix missing actions for stock item
(cherry picked from commit c128438ebf8f97cc3dc6a8087c17375dfbd2fa4f)
---
InvenTree/stock/templates/stock/item_base.html | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html
index f64c9b0704..0f8d81203a 100644
--- a/InvenTree/stock/templates/stock/item_base.html
+++ b/InvenTree/stock/templates/stock/item_base.html
@@ -53,6 +53,12 @@
+
+{% setting_object 'STOCK_OWNERSHIP_CONTROL' as owner_control %}
+{% if owner_control.value == "True" %}
+ {% authorized_owners item.owner as owners %}
+{% endif %}
+
{% if owner_control.value == "False" or owner_control.value == "True" and user in owners or user.is_superuser %}
{% if roles.stock.change and not item.is_building %}
From cb075ed2c2b97e031a50c1529a769756fce6ff42 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 15:10:41 +1100
Subject: [PATCH 21/24] Fix logic for converting stock items to applicable
variants
---
InvenTree/part/models.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index 23aea29dbd..3ab616d96d 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -2050,10 +2050,10 @@ class Part(MPTTModel):
if self.variant_of:
parts.append(self.variant_of)
- siblings = self.get_siblings(include_self=False)
+ siblings = self.get_siblings(include_self=False)
- for sib in siblings:
- parts.append(sib)
+ for sib in siblings:
+ parts.append(sib)
filtered_parts = Part.objects.filter(pk__in=[part.pk for part in parts])
From 3d553cf7de30f71f8f81672d9adb3af2ed8977a9 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 16:49:15 +1100
Subject: [PATCH 22/24] Adds search capability to "owner" API
- Currently a bit of a hack, but it works...
---
InvenTree/users/api.py | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/InvenTree/users/api.py b/InvenTree/users/api.py
index 240d6aabc0..0bb51aab27 100644
--- a/InvenTree/users/api.py
+++ b/InvenTree/users/api.py
@@ -26,6 +26,37 @@ class OwnerList(generics.ListAPIView):
queryset = Owner.objects.all()
serializer_class = OwnerSerializer
+ def filter_queryset(self, queryset):
+ """
+ Implement text search for the "owner" model.
+
+ Note that an "owner" can be either a group, or a user,
+ so we cannot do a direct text search.
+
+ A "hack" here is to post-process the queryset and simply
+ remove any values which do not match.
+
+ It is not necessarily "efficient" to do it this way,
+ but until we determine a better way, this is what we have...
+ """
+
+ search_term = str(self.request.query_params.get('search', '')).lower()
+
+ queryset = super().filter_queryset(queryset)
+
+ if not search_term:
+ return queryset
+
+ results = []
+
+ # Extract search term f
+
+ for result in queryset.all():
+ if search_term in result.name().lower():
+ results.append(result)
+
+ return results
+
class OwnerDetail(generics.RetrieveAPIView):
"""
From ca0619a482126c894114f59d96736eaf0cd30e67 Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 16:53:15 +1100
Subject: [PATCH 23/24] Adds API filtering for the "user" list
---
InvenTree/users/api.py | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/InvenTree/users/api.py b/InvenTree/users/api.py
index 0bb51aab27..6b6b4afcfc 100644
--- a/InvenTree/users/api.py
+++ b/InvenTree/users/api.py
@@ -7,15 +7,16 @@ from django.core.exceptions import ObjectDoesNotExist
from django.conf.urls import url, include
-from rest_framework import generics, permissions
+from django_filters.rest_framework import DjangoFilterBackend
+
+from rest_framework import filters, generics, permissions
from rest_framework.views import APIView
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework import status
-from .serializers import UserSerializer, OwnerSerializer
-
-from .models import RuleSet, Owner, check_user_role
+from users.models import RuleSet, Owner, check_user_role
+from users.serializers import UserSerializer, OwnerSerializer
class OwnerList(generics.ListAPIView):
@@ -127,6 +128,18 @@ class UserList(generics.ListAPIView):
serializer_class = UserSerializer
permission_classes = (permissions.IsAuthenticated,)
+ filter_backends = [
+ DjangoFilterBackend,
+ filters.SearchFilter,
+ ]
+
+ search_fields = [
+ 'first_name',
+ 'last_name',
+ 'username',
+ ]
+
+
class GetAuthToken(APIView):
""" Return authentication token for an authenticated user. """
From f1eaeef949080205afa812644eac46d27b78b2fa Mon Sep 17 00:00:00 2001
From: Oliver
Date: Mon, 8 Nov 2021 16:53:43 +1100
Subject: [PATCH 24/24] PEP fixes
---
InvenTree/users/api.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/InvenTree/users/api.py b/InvenTree/users/api.py
index 6b6b4afcfc..222f284add 100644
--- a/InvenTree/users/api.py
+++ b/InvenTree/users/api.py
@@ -140,7 +140,6 @@ class UserList(generics.ListAPIView):
]
-
class GetAuthToken(APIView):
""" Return authentication token for an authenticated user. """