summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeep Patel <dep@odoo.com>2019-01-11 08:54:20 +0000
committerDeep Patel <dep@odoo.com>2019-01-11 08:54:26 +0000
commit4704128dc4bb10f6d6492a459f7ae140be212d7c (patch)
treea8b2820930cb7e61f35ca8376ebc2b22ad30994e
parenta00e6f3dd132953fc028795756ead12cc6b03e29 (diff)
[IMP] point_of_sale : add keyboard events on pos product selection interface
Keyboard Shortcuts: Numbers on the keypads (0 to 9), Backspace and Delete related to task: #33518 closes odoo/odoo#17162
-rw-r--r--addons/point_of_sale/static/src/js/models.js24
-rw-r--r--addons/point_of_sale/static/src/js/screens.js30
2 files changed, 53 insertions, 1 deletions
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index a6886c08ae1..6f2e65654f0 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -2717,6 +2717,22 @@ exports.NumpadState = Backbone.Model.extend({
});
this.trigger('set_value',this.get('buffer'));
},
+ positiveSign: function() {
+ var oldBuffer;
+ oldBuffer = this.get('buffer');
+ if (oldBuffer[0] === '-'){
+ this.set({buffer: oldBuffer.substr(1)});
+ this.trigger('set_value',this.get('buffer'));
+ }
+ },
+ negativeSign: function() {
+ var oldBuffer;
+ oldBuffer = this.get('buffer');
+ if (oldBuffer[0] !== '-'){
+ this.set({buffer: "-" + oldBuffer});
+ this.trigger('set_value',this.get('buffer'));
+ }
+ },
changeMode: function(newMode) {
this.set({
buffer: "0",
@@ -2730,7 +2746,13 @@ exports.NumpadState = Backbone.Model.extend({
});
},
resetValue: function(){
- this.set({buffer:'0'});
+ if(this.get('buffer') === "") {
+ this.trigger('set_value','remove');
+ }
+ else {
+ this.set({ buffer: "" });
+ this.trigger('set_value',this.get('buffer'));
+ }
},
});
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index 4bf06abdc6b..d13cdc2f9fd 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -1016,6 +1016,7 @@ var ProductScreenWidget = ScreenWidget.extend({
if (this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard) {
this.chrome.widget.keyboard.connect($(this.el.querySelector('.searchbox input')));
}
+ $(document).on('keydown.productscreen',this._onKeypadKeyDown.bind(this));
},
close: function(){
@@ -1023,6 +1024,35 @@ var ProductScreenWidget = ScreenWidget.extend({
if(this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard){
this.chrome.widget.keyboard.hide();
}
+ $(document).off('keydown.productscreen',this._onKeypadKeyDown.bind(this));
+ },
+
+ _onKeypadKeyDown: function (ev) {
+ //prevent input and textarea keydown event
+ if(!_.contains(["INPUT", "TEXTAREA"], $(ev.target).prop('tagName'))) {
+ if ((ev.key >= "0" && ev.key <= "9") || ev.key === "."){
+ this.numpad.state.appendNewChar(ev.key)
+ }
+ else {
+ switch (ev.key){
+ case "Backspace":
+ this.numpad.state.deleteLastChar();
+ break;
+ case "Delete":
+ this.numpad.state.resetValue();
+ break;
+ case ",":
+ this.numpad.state.appendNewChar(".");
+ break;
+ case "+":
+ this.numpad.state.positiveSign();
+ break;
+ case "-":
+ this.numpad.state.negativeSign();
+ break;
+ }
+ }
+ }
},
});
gui.define_screen({name:'products', widget: ProductScreenWidget});