diff --git a/js/grocy.js b/js/grocy.js index 8f2e9daf..079660d1 100644 --- a/js/grocy.js +++ b/js/grocy.js @@ -503,29 +503,6 @@ class GrocyClass ); } - ScanModeSubmit(singleUnit = true) - { - if (BoolVal(this.UserSettings.scan_mode_purchase_enabled)) - { - if (singleUnit) - { - $("#display_amount").val(1); - $(".input-group-productamountpicker").trigger("change"); - } - - this.FrontendHelpers.ValidateForm("purchase-form"); - if (document.getElementById("purchase-form").checkValidity() === true) - { - $('#save-purchase-button').click(); - } - else - { - toastr.warning(this.translate("Scan mode is on but not all required fields could be populated automatically")); - this.UISound.Error(); - } - } - } - GetUriParam(key) { var currentUri = window.location.search.substring(1); @@ -540,6 +517,7 @@ class GrocyClass return currentParam[1] === undefined ? true : decodeURIComponent(currentParam[1]); } } + return undefined; } UpdateUriParam(key, value) diff --git a/js/helpers/frontend.js b/js/helpers/frontend.js index 8f2356f7..1c4faf12 100644 --- a/js/helpers/frontend.js +++ b/js/helpers/frontend.js @@ -160,8 +160,14 @@ class GrocyFrontendHelpers ValidateForm(formId) { + var form = null; + var ret = false; + + if (formId instanceof $) + form = formId; + else + form = this.$scope("#" + formId); - var form = this.$scope("#" + formId); if (form.length == 0) { return; @@ -170,6 +176,7 @@ class GrocyFrontendHelpers if (form[0].checkValidity() === true) { form.find(':submit').removeClass('disabled'); + ret = true; } else { @@ -177,6 +184,7 @@ class GrocyFrontendHelpers } form.addClass('was-validated'); + return ret; } BeginUiBusy(formId = null) @@ -471,6 +479,33 @@ class GrocyFrontendHelpers }); }); } + + ScanModeSubmit(singleUnit = true) + { + if (singleUnit) + { + this.$scope("#display_amount").val(1); + this.$scope(".input-group-productamountpicker").trigger("change"); + } + + var form = this.$scope('form[data-scanmode="enabled"]'); + + if (form.length == 0) + { + console.warn("ScanModeSubmit was triggered but no form[data-scanmode=\"enabled\"] was found in scope " + this.scopeSelector); + return; + } + + if (this.ValidateForm(form) === true) + { + form.find('button[data-scanmode="submit"]').click(); + } + else + { + toastr.warning(this.translate("Scan mode is on but not all required fields could be populated automatically")); + this.UISound.Error(); + } + } } export { GrocyFrontendHelpers }; \ No newline at end of file diff --git a/js/viewjs/consume.js b/js/viewjs/consume.js index 19ad3c15..0a4067e7 100644 --- a/js/viewjs/consume.js +++ b/js/viewjs/consume.js @@ -300,9 +300,11 @@ function consumeView(Grocy, scope = null) } ); - if ($scope('#product_id').attr("barcode") == "null") + if (BoolVal(Grocy.UserSettings.scan_mode_consume_enabled) && + $scope('#product_id').attr("barcode") == "null") { - Grocy.ScanModeSubmit(); + + Grocy.FrontendHelpers.ScanModeSubmit(); } }, function(xhr) @@ -409,7 +411,8 @@ function consumeView(Grocy, scope = null) $scope(".input-group-productamountpicker").trigger("change"); Grocy.FrontendHelpers.ValidateForm('consume-form'); RefreshLocaleNumberInput(); - Grocy.ScanModeSubmit(false); + if (BoolVal(Grocy.UserSettings.scan_mode_consume_enabled)) + Grocy.FrontendHelpers.ScanModeSubmit(false); } } }, diff --git a/js/viewjs/productform.js b/js/viewjs/productform.js index b0e7b79c..e8615629 100644 --- a/js/viewjs/productform.js +++ b/js/viewjs/productform.js @@ -14,6 +14,7 @@ function productformView(Grocy, scope = null) // preload some views. Grocy.PreloadView("productgroupform"); + Grocy.PreloadView("productbarcodeform"); var shoppinglocationpicker = Grocy.Use("shoppinglocationpicker"); var userfields = Grocy.Use("userfieldsform"); diff --git a/js/viewjs/purchase.js b/js/viewjs/purchase.js index 7e313c54..dbdda2d9 100644 --- a/js/viewjs/purchase.js +++ b/js/viewjs/purchase.js @@ -398,8 +398,8 @@ function purchaseView(Grocy, scope = null) RefreshLocaleNumberInput(); } } - - Grocy.ScanModeSubmit(false); + if (BoolVal(Grocy.UserSettings.scan_mode_purchase_enabled)) + Grocy.FrontendHelpers.ScanModeSubmit(false); }, function(xhr) { @@ -410,7 +410,8 @@ function purchaseView(Grocy, scope = null) else { $scope("#purchase-form").removeAttr("data-used-barcode"); - Grocy.ScanModeSubmit(); + if (BoolVal(Grocy.UserSettings.scan_mode_purchase_enabled)) + Grocy.FrontendHelpers.ScanModeSubmit(); } $scope('#display_amount').trigger("keyup"); diff --git a/views/consume.blade.php b/views/consume.blade.php index d00e84d3..5ac91227 100644 --- a/views/consume.blade.php +++ b/views/consume.blade.php @@ -51,7 +51,7 @@ $classes = $embedded ? '' : 'col-md-6 col-xl-4';
-
@include('components.productpicker', array( @@ -138,7 +138,7 @@ $classes = $embedded ? '' : 'col-md-6 col-xl-4'; )) @endif - @if(GROCY_FEATURE_FLAG_STOCK_PRODUCT_OPENED_TRACKING) diff --git a/views/purchase.blade.php b/views/purchase.blade.php index 3195ac39..9c85a86a 100644 --- a/views/purchase.blade.php +++ b/views/purchase.blade.php @@ -51,7 +51,7 @@ $classes = $embedded ? '' : 'col-md-6 col-xl-4';
- @include('components.productpicker', array( @@ -165,7 +165,7 @@ $classes = $embedded ? '' : 'col-md-6 col-xl-4'; @endif -