diff --git a/addons/barcodes/static/src/js/inherited_form_widget_button.js b/addons/barcodes/static/src/js/inherited_form_widget_button.js new file mode 100644 index 00000000000..6c85b9a92a8 --- /dev/null +++ b/addons/barcodes/static/src/js/inherited_form_widget_button.js @@ -0,0 +1,29 @@ +odoo.define('barcode.InheritedFormWidgetButton', function (require) { +"use strict"; + +var widgets = require('web.form_widgets'); +var BarcodeHandlerMixin = require('barcodes.BarcodeHandlerMixin'); + +// If the button has a barcode_trigger attribute, dynamically inherit +// BarcodeHandlerMixin and redefine on_barcode_scanned + +var ButtonBarcodeHandlerMixin = _.extend({}, BarcodeHandlerMixin, { + init: function(field_manager, node) { + if (node.attrs.barcode_trigger) { + BarcodeHandlerMixin.init.call(this, field_manager, node); + var self = this; + this.on_barcode_scanned = function(barcode) { + var match = barcode.match(/O-BTN\.(.+)/); + if (match && match[1] === self.node.attrs.barcode_trigger && self.$el.is(':visible')) { + self.on_click(); + } + }; + } else { + this._super(field_manager, node); + } + }, +}); + +widgets.WidgetButton.include(ButtonBarcodeHandlerMixin); + +}); diff --git a/addons/barcodes/views/templates.xml b/addons/barcodes/views/templates.xml index 1b36f049a9c..2fcab2ea6db 100644 --- a/addons/barcodes/views/templates.xml +++ b/addons/barcodes/views/templates.xml @@ -8,6 +8,7 @@ + diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js index 8a51e8aa480..54c57c6fd8c 100644 --- a/addons/web/static/src/js/views/form_widgets.js +++ b/addons/web/static/src/js/views/form_widgets.js @@ -1663,7 +1663,8 @@ core.form_tag_registry.add('button', WidgetButton); return { FieldChar: FieldChar, - FieldMonetary: FieldMonetary + FieldMonetary: FieldMonetary, + WidgetButton: WidgetButton }; });