diff options
| author | Akash Bhavsar <abh@odoo.com> | 2017-06-26 17:24:01 +0530 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-08-25 15:54:56 +0200 |
| commit | b131e9b0ef458e8cc00b0a2eb6c1b4d8dfe889a0 (patch) | |
| tree | 51589b025dffc424e6e67dfac5c11a35fe88ea42 /addons/barcodes/static/src | |
| parent | 7095c32f1cd17a86606e4137ece8baa3034fe74a (diff) | |
[FIX] barcodes: fix several issues when scanning barcodes
Since the new views, most of the barcodes feature was
broken. This commit re-enables the support of commands like
'edit', 'save', 'cancel', 'previous' and 'next'.
Also changed javascript event handler to jquery event handler to
make barcodes testable in phantomjs.
Diffstat (limited to 'addons/barcodes/static/src')
| -rw-r--r-- | addons/barcodes/static/src/js/barcode_events.js | 22 | ||||
| -rw-r--r-- | addons/barcodes/static/src/js/barcode_field.js | 2 | ||||
| -rw-r--r-- | addons/barcodes/static/src/js/barcode_form_view.js | 55 |
3 files changed, 55 insertions, 24 deletions
diff --git a/addons/barcodes/static/src/js/barcode_events.js b/addons/barcodes/static/src/js/barcode_events.js index 04c03a41308..0f13c59fe66 100644 --- a/addons/barcodes/static/src/js/barcode_events.js +++ b/addons/barcodes/static/src/js/barcode_events.js @@ -77,13 +77,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { 'bubbles': old_event.bubbles, 'cancelable': old_event.cancelable, }; - try { - new_event = new Event("keypress", params); - } catch(error) { - // For IE >= 9, use new CustomEvent(), instead of new Event() - new_event = new CustomEvent("keypress", params); - } - + new_event = $.Event('keypress', params); new_event.viewArg = old_event.viewArg; new_event.ctrl = old_event.ctrl; new_event.alt = old_event.alt; @@ -96,7 +90,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { new_event.which = old_event.which; new_event.dispatched_by_barcode_reader = true; - old_event.target.dispatchEvent(new_event); + $(old_event.target).trigger(new_event); } } }, @@ -173,17 +167,17 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { }, start: function(prevent_key_repeat){ - document.body.addEventListener('keypress', this.__handler, true); + $('body').bind("keypress", this.__handler); if (prevent_key_repeat === true) { - document.body.addEventListener('keydown', this.__keydown_handler, true); - document.body.addEventListener('keyup', this.__keyup_handler, true); + $('body').bind("keydown", this.__keydown_handler); + $('body').bind('keyup', this.__keyup_handler); } }, stop: function(){ - document.body.removeEventListener('keypress', this.__handler, true); - document.body.removeEventListener('keydown', this.__keydown_handler, true); - document.body.removeEventListener('keyup', this.__keyup_handler, true); + $('body').unbind("keypress", this.__handler); + $('body').unbind("keydown", this.__keydown_handler); + $('body').unbind('keyup', this.__keyup_handler); }, }); diff --git a/addons/barcodes/static/src/js/barcode_field.js b/addons/barcodes/static/src/js/barcode_field.js index aa31b4d8261..9b0f2391e3a 100644 --- a/addons/barcodes/static/src/js/barcode_field.js +++ b/addons/barcodes/static/src/js/barcode_field.js @@ -40,7 +40,7 @@ var FieldFloatScannable = basicFields.FieldFloat.extend({ */ _onKeypress: function (e) { /* only simulate a keypress if it has been previously prevented */ - if (e.originalEvent.dispatched_by_barcode_reader !== true) { + if (e.dispatched_by_barcode_reader !== true) { e.preventDefault(); this.$input.blur(); return; diff --git a/addons/barcodes/static/src/js/barcode_form_view.js b/addons/barcodes/static/src/js/barcode_form_view.js index 69a59fdaafa..37fa34dcf95 100644 --- a/addons/barcodes/static/src/js/barcode_form_view.js +++ b/addons/barcodes/static/src/js/barcode_form_view.js @@ -26,19 +26,21 @@ FormController.include({ this.activeBarcode = { form_view: { commands: { - 'O-CMD.NEW': 'createRecord', - 'O-CMD.EDIT': 'toEditMode', - 'O-CMD.CANCEL': 'discardChange', - 'O-CMD.SAVE': function () { return this.saveRecord({reload: true}); }, - // 'O-CMD.PAGER-PREV': - // 'O-CMD.PAGER-NEXT': - } - } + 'O-CMD.EDIT': this._onEdit.bind(this), + 'O-CMD.CANCEL': this._onDiscard.bind(this), + 'O-CMD.SAVE': this._onCommandSave.bind(this), + 'O-CMD.PAGER-PREV': this._onCommandPrevious.bind(this), + 'O-CMD.PAGER-NEXT': this._onCommandNext.bind(this), + }, + }, }; this.barcodeMutex = new concurrency.Mutex(); this._barcodeStartListening(); }, + /** + * @override + */ destroy: function () { this._barcodeStopListening(); this._super(); @@ -70,6 +72,8 @@ FormController.include({ } }, /** + * Returns true iff the given barcode matches the given record (candidate). + * * @private * @param {Object} candidate: record in the x2m * @param {string} barcode sent by the scanner (string generate from keypress series) @@ -128,7 +132,7 @@ FormController.include({ */ _getBarCodeRecord: function (record, barcode, activeBarcode) { var self = this; - if (!activeBarcode.fieldName) { + if (!activeBarcode.fieldName || !record.data[activeBarcode.fieldName]) { return; } return _.find(record.data[activeBarcode.fieldName].data, function (record) { @@ -239,6 +243,24 @@ FormController.include({ }, /** * @private + */ + _onCommandNext: function () { + return this.mutex.exec(function () {}).then(this.pager.next.bind(this.pager)); + }, + /** + * @private + */ + _onCommandPrevious: function () { + return this.mutex.exec(function () {}).then(this.pager.previous.bind(this.pager)); + }, + /** + * @private + */ + _onCommandSave: function () { + return this.saveRecord(); + }, + /** + * @private * @param {KeyEvent} event */ _quantityListener: function (event) { @@ -359,6 +381,21 @@ FormRenderer.include({ } return $button; }, + /** + * Add barcode event handler + * + * @override + * @private + * @param {Object} node + * @returns {jQueryElement} + */ + _renderTagButton: function (node) { + var $button = this._super.apply(this, arguments); + if (node.attrs.barcode_trigger) { + this._barcodeButtonHandler($button, node); + } + return $button; + } }); BarcodeEvents.ReservedBarcodePrefixes.push('O-BTN'); |
