diff --git a/pos_keyboard/__manifest__.py b/pos_keyboard/__manifest__.py index b309c77..e4f3966 100644 --- a/pos_keyboard/__manifest__.py +++ b/pos_keyboard/__manifest__.py @@ -8,7 +8,7 @@ 'images': ['images/keyboard.png'], 'category': 'Point Of Sale', 'license': 'LGPL-3', - 'version': '1.0.2', + 'version': '10.0.1.0.2', 'depends': ['point_of_sale'], "price": 15.00, "currency": "EUR", diff --git a/pos_keyboard/doc/changelog.rst b/pos_keyboard/doc/changelog.rst index 3f4888e..dd35f5f 100644 --- a/pos_keyboard/doc/changelog.rst +++ b/pos_keyboard/doc/changelog.rst @@ -3,6 +3,11 @@ Updates ======= +`1.1.0` +------- + +**New:** Added popup handling + `1.0.2` ------- diff --git a/pos_keyboard/static/src/js/pos.js b/pos_keyboard/static/src/js/pos.js index 9438971..0f73f12 100644 --- a/pos_keyboard/static/src/js/pos.js +++ b/pos_keyboard/static/src/js/pos.js @@ -1,57 +1,64 @@ -function pos_keyboard_widgets(instance, module){ +odoo.define('pos_keyboard.pos', function (require) { + "use strict"; - module.PosWidget.include({ + var core = require('web.core'); + var models = require('point_of_sale.models'); + var screens = require('point_of_sale.screens'); + + var _super_posmodel = models.PosModel.prototype; + models.PosModel = models.PosModel.extend({ + initialize: function (session, attributes) { + this.keypad = new Keypad({'pos': this}); + return _super_posmodel.initialize.call(this, session, attributes); + } + }); + + screens.NumpadWidget.include({ start: function() { - self = this; - resSuper = this._super(); - res = resSuper.done(function(e){ - self.pos.keypad.connect(); - self.pos.keypad.set_action_callback(function(data){ - self.keypad_action(data, self.pos.keypad.type); - }); - }); - return res; - }, - close: function() { this._super(); - this.pos.keypad.disconnect(); + var self = this; + this.pos.keypad.set_action_callback(function(data){ + self.keypad_action(data, self.pos.keypad.type); + }); }, keypad_action: function(data, type){ - var numpad = this.pos_widget.numpad; if (data.type === type.numchar){ - numpad.state.appendNewChar(data.val); + this.state.appendNewChar(data.val); } else if (data.type === type.bmode) { - numpad.state.changeMode(data.val); + this.state.changeMode(data.val); } else if (data.type === type.sign){ - numpad.clickSwitchSign(); + this.clickSwitchSign(); } else if (data.type === type.backspace){ - numpad.clickDeleteLastChar(); + this.clickDeleteLastChar(); } - }, + } }); - - var PosModelSuper = module.PosModel; - module.PosModel = module.PosModel.extend({ - initialize: function(session, attributes) { - this.keypad = new module.Keypad({'pos': this}); - PosModelSuper.prototype.initialize.call(this, session, attributes); - }, + + screens.PaymentScreenWidget.include({ + show: function(){ + this._super(); + this.pos.keypad.disconnect(); + }, + hide: function(){ + this._super(); + this.pos.keypad.connect(); + } }); - + // this module mimics a keypad-only cash register. Use connect() and // disconnect() to activate and deactivate it. - module.Keypad = instance.web.Class.extend({ + var Keypad = core.Class.extend({ init: function(attributes){ this.pos = attributes.pos; - this.pos_widget = this.pos.pos_widget; + /*this.pos_widget = this.pos.pos_widget;*/ this.type = { - numchar: 'number, dot', - bmode: 'qty, disc, price', - sign: '+, -', - backspace: 'backspace' + numchar: 'number, dot', + bmode: 'quantity, discount, price', + sign: '+, -', + backspace: 'backspace' }; this.data = { type: undefined, @@ -78,7 +85,7 @@ function pos_keyboard_widgets(instance, module){ reset_action_callback: function(){ this.action_callback = undefined; }, - + // starts catching keyboard events and tries to interpret keystrokes, // calling the callback when needed. connect: function(){ @@ -101,20 +108,11 @@ function pos_keyboard_widgets(instance, module){ 80: 'p', 83: 's', 68: 'd', 190: '.', 81: 'q', 96: '0', 97: '1', 98: '2', 99: '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9', - 106: '*', 107: '+', 109: '-', 110: '.', 111: '/', + 106: '*', 107: '+', 109: '-', 110: '.', 111: '/' }; - //cancel return to the previous page when press backspace - var rx = /INPUT|SELECT|TEXTAREA/i; - $(document).on("keydown keypress", function(e){ - if( e.which == 8 ){ // 8 == backspace - if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){ - e.preventDefault(); - } - } - }); - //usb keyboard keyup event + var rx = /INPUT|SELECT|TEXTAREA/i; var ok = false; var timeStamp = 0; $('body').on('keyup', '', function (e){ @@ -131,34 +129,39 @@ function pos_keyboard_widgets(instance, module){ var token = e.keyCode; if ((token >= 96 && token <= 105 || token == 110) || (token >= 48 && token <= 57 || token == 190)) { - self.data.type = type.numchar; - self.data.val = kc_lookup[token]; - is_number = true; - ok = true; - } + self.data.type = type.numchar; + self.data.val = kc_lookup[token]; + is_number = true; + ok = true; + } else if (token == KC_PLU || token == KC_PLU_1) { self.data.type = type.sign; ok = true; - } + } else if (token == KC_QTY || token == KC_QTY_1) { self.data.type = type.bmode; self.data.val = buttonMode.qty; ok = true; - } + } else if (token == KC_AMT || token == KC_AMT_1) { self.data.type = type.bmode; self.data.val = buttonMode.price; ok = true; - } + } else if (token == KC_DISC || token == KC_DISC_1) { self.data.type = type.bmode; self.data.val = buttonMode.disc; ok = true; - } + } else if (token == KC_BACKSPACE) { self.data.type = type.backspace; ok = true; - } + } + else { + self.data.type = undefined; + self.data.val = undefined; + ok = false; + } if (is_number) { if (timeStamp + 50 > new Date().getTime()) { @@ -180,13 +183,8 @@ function pos_keyboard_widgets(instance, module){ $('body').off('keyup', ''); } }); -} - -(function(){ - var _super = window.openerp.point_of_sale; - window.openerp.point_of_sale = function(instance){ - _super(instance); - var module = instance.point_of_sale; - pos_keyboard_widgets(instance, module); + + return { + Keypad: Keypad }; -})(); \ No newline at end of file +});