From 2d8b96a6b8eff120a8292c8a212cc5fc6b9104e4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 17 Jun 2021 23:15:42 +0200 Subject: [PATCH 1/7] setting to control visibility of price --- InvenTree/common/models.py | 7 +++++++ .../order/templates/order/order_wizard/select_parts.html | 1 + InvenTree/templates/InvenTree/settings/part.html | 1 + 3 files changed, 9 insertions(+) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index ec76475901..d19f0662dd 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -205,6 +205,13 @@ class InvenTreeSetting(models.Model): 'validator': bool, }, + 'PART_SHOW_PRICE_IN_FORMS': { + 'name': _('Show Price in Forms'), + 'description': _('Display part price in some forms'), + 'default': True, + 'validator': bool, + }, + 'REPORT_DEBUG_MODE': { 'name': _('Debug Mode'), 'description': _('Generate reports in debug mode (HTML output)'), diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index 28b4a36213..90fb63a080 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -4,6 +4,7 @@ {% load i18n %} {% block form %} +{% settings_value 'PART_SHOW_PRICE_IN_FORMS' as show_price %}

{% trans "Step 1 of 2 - Select Part Suppliers" %} diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index e359acdfc2..cb4726bdc4 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -20,6 +20,7 @@ {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DUPLICATE_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_EDIT_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_SHOW_QUANTITY_IN_FORMS" icon="fa-hashtag" %} + {% include "InvenTree/settings/setting.html" with key="PART_SHOW_PRICE_IN_FORMS" icon="fa-dollar-sign" %} {% include "InvenTree/settings/setting.html" with key="PART_RECENT_COUNT" icon="fa-clock" %} {% include "InvenTree/settings/setting.html" with key="PART_TEMPLATE" icon="fa-clone" %} From a3a623a5ca3b27771d40ea77ac4f35aa59e8270e Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 17 Jun 2021 23:24:32 +0200 Subject: [PATCH 2/7] update-button for modal, repeat 1st step on use --- InvenTree/order/views.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index c8ec42d3e7..4a8e576a6d 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -1004,6 +1004,15 @@ class OrderParts(AjaxView): return ctx + def get_data(self): + """ enrich respone json data """ + data = super().get_data() + # if in selection-phase, add a button to update the prices + if getattr(self, 'form_step', 'select_parts') == 'select_parts': + data['buttons'] = [{'name': 'update_price', 'title': _('Update prices')}] # set buttons + data['hideErrorMessage'] = '1' # hide the error message + return data + def get_suppliers(self): """ Calculates a list of suppliers which the user will need to create POs for. This is calculated AFTER the user finishes selecting the parts to order. @@ -1238,9 +1247,10 @@ class OrderParts(AjaxView): valid = False if form_step == 'select_parts': - # No errors? Proceed to PO selection form - if part_errors is False: + # No errors? and the price-update button was not used to submit? Proceed to PO selection form + if part_errors is False and 'act-btn_update_price' not in request.POST: self.ajax_template_name = 'order/order_wizard/select_pos.html' + self.form_step = 'select_purchase_orders' # set step (important for get_data) else: self.ajax_template_name = 'order/order_wizard/select_parts.html' From f0dd543ffabe29f39e7e72e6c7895ff5c81a5da6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 17 Jun 2021 23:44:22 +0200 Subject: [PATCH 3/7] render price in oer-modal if enabled in settings --- .../order/templates/order/order_wizard/select_parts.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index 90fb63a080..99a6fe1b54 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -4,6 +4,7 @@ {% load i18n %} {% block form %} +{% default_currency as currency %} {% settings_value 'PART_SHOW_PRICE_IN_FORMS' as show_price %}

@@ -50,7 +51,13 @@ From 2cbdeae914eb9766c88e7370f450b77233366efb Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 18 Jun 2021 00:18:45 +0200 Subject: [PATCH 4/7] style-fix --- InvenTree/common/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index d19f0662dd..9d92583e1a 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -205,7 +205,7 @@ class InvenTreeSetting(models.Model): 'validator': bool, }, - 'PART_SHOW_PRICE_IN_FORMS': { + 'PART_SHOW_PRICE_IN_FORMS': { 'name': _('Show Price in Forms'), 'description': _('Display part price in some forms'), 'default': True, From 452d2004ce81535a6de54080b6f99f5982da2d95 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 19 Jun 2021 23:46:31 +0200 Subject: [PATCH 5/7] added handling for no supplier price --- InvenTree/order/templates/order/order_wizard/select_parts.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index 99a6fe1b54..5bd67a4baa 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -54,7 +54,7 @@ From b4412ef575a4142dd0fd3653c72035f464b6764b Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 20 Jun 2021 13:32:52 +0200 Subject: [PATCH 6/7] also show prices of the value 0 --- InvenTree/order/templates/order/order_wizard/select_parts.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index 5bd67a4baa..a02113fa18 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -54,7 +54,7 @@ From a3517b9313b28c462df901efc8ad6669daebabbf Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 20 Jun 2021 18:52:55 +0200 Subject: [PATCH 7/7] fixes: response data stays persistent throughout views --- InvenTree/InvenTree/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index 06aec54c18..17caeb872d 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -337,7 +337,7 @@ class AjaxMixin(InvenTreeRoleMixin): # Do nothing by default pass - def renderJsonResponse(self, request, form=None, data={}, context=None): + def renderJsonResponse(self, request, form=None, data=None, context=None): """ Render a JSON response based on specific class context. Args: @@ -349,6 +349,9 @@ class AjaxMixin(InvenTreeRoleMixin): Returns: JSON response object """ + # a empty dict as default can be dangerous - set it here if empty + if not data: + data = {} if not request.is_ajax(): return HttpResponseRedirect('/')