summaryrefslogtreecommitdiff
path: root/addons/barcodes/static/src
diff options
context:
space:
mode:
authorAkash Bhavsar <abh@odoo.com>2017-06-26 17:24:01 +0530
committerAaron Bohy <aab@odoo.com>2017-08-25 15:54:56 +0200
commitb131e9b0ef458e8cc00b0a2eb6c1b4d8dfe889a0 (patch)
tree51589b025dffc424e6e67dfac5c11a35fe88ea42 /addons/barcodes/static/src
parent7095c32f1cd17a86606e4137ece8baa3034fe74a (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.js22
-rw-r--r--addons/barcodes/static/src/js/barcode_field.js2
-rw-r--r--addons/barcodes/static/src/js/barcode_form_view.js55
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');