|
@@ -0,0 +1,263 @@
|
|
|
+openerp.aces_pos_keyboard = function (instance) {
|
|
|
+ var _t = instance.web._t;
|
|
|
+ var QWeb = instance.web.qweb;
|
|
|
+
|
|
|
+ var round_di = instance.web.round_decimals;
|
|
|
+ var round_pr = instance.web.round_precision;
|
|
|
+
|
|
|
+ var models = instance.point_of_sale.PosModel.prototype.models;
|
|
|
+ for (var i = 0; i < models.length; i++) {
|
|
|
+ var model = models[i];
|
|
|
+ if (model.model === 'res.company') {
|
|
|
+ model.fields.push('pos_price');
|
|
|
+ model.fields.push('pos_quantity');
|
|
|
+ model.fields.push('pos_discount');
|
|
|
+ model.fields.push('pos_search');
|
|
|
+ model.fields.push('pos_next');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ instance.point_of_sale.ReceiptScreenWidget = instance.point_of_sale.ReceiptScreenWidget.extend({
|
|
|
+ show: function(){
|
|
|
+ this._super();
|
|
|
+ var self = this;
|
|
|
+ var next = self.pos.company.pos_next;
|
|
|
+ this.handler_new_order = function(e){
|
|
|
+ if(String.fromCharCode(e.which) === next){ // for ASCII of 'n' character
|
|
|
+ self.finishOrder();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ $('body').on('keypress', this.handler_new_order);
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ var _super_order = instance.point_of_sale.Order.prototype;
|
|
|
+ instance.point_of_sale.Order = instance.point_of_sale.Order.extend({
|
|
|
+ addProduct: function(product, options){
|
|
|
+ var self = this;
|
|
|
+ _super_order.addProduct.call(this, product, options);
|
|
|
+ this.numpad_state = this.pos.pos_widget.numpad.state;
|
|
|
+ this.numpad_state.set('mode', 'quantity');
|
|
|
+ this.pos.pos_widget.numpad.changedMode();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ instance.point_of_sale.ProductListWidget = instance.point_of_sale.ProductListWidget.extend({
|
|
|
+ defaults: {
|
|
|
+ buffer: "0",
|
|
|
+ mode: "quantity"
|
|
|
+ },
|
|
|
+ init: function(parent, options) {
|
|
|
+ var self = this;
|
|
|
+ this._super(parent,options);
|
|
|
+ var order_widget = this.pos;
|
|
|
+ this.state = new instance.point_of_sale.NumpadState();
|
|
|
+ var timeStamp = 0;
|
|
|
+ var ok = true;
|
|
|
+
|
|
|
+ this.handler_find_operation = function(e){
|
|
|
+ var token = String.fromCharCode(e.which);
|
|
|
+ var cashregisters = self.pos.cashregisters;
|
|
|
+ var paymentLines_keys = [];
|
|
|
+ var qty = self.pos.company.pos_quantity || '';
|
|
|
+ var search = self.pos.company.pos_search || '';
|
|
|
+ var discount = self.pos.company.pos_discount || '';
|
|
|
+ var price = self.pos.company.pos_price || '';
|
|
|
+
|
|
|
+ if (!(token == discount || token == price || (e.which >= 48 && e.which <= 57)
|
|
|
+ || e.which == 190 || token == qty || token == search || e.which == 8)) {
|
|
|
+ var flag = true;
|
|
|
+ _.each(cashregisters, function(paymentline){
|
|
|
+ if (paymentline.journal.shortcut_key && paymentline.journal.shortcut_key == String.fromCharCode(e.which)) {
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (flag) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var order = self.pos.get('selectedOrder');
|
|
|
+ oldBuffer = self.get('buffer');
|
|
|
+ if (oldBuffer === '0' || oldBuffer == undefined) {
|
|
|
+ self.set({
|
|
|
+ buffer: String.fromCharCode(e.which)
|
|
|
+ });
|
|
|
+ } else if (oldBuffer === '-0') {
|
|
|
+ self.set({
|
|
|
+ buffer: "-" + String.fromCharCode(e.which)
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ self.set({
|
|
|
+ buffer: (self.get('buffer')) + String.fromCharCode(e.which)
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ var cashregisters = self.pos.cashregisters;
|
|
|
+ var paymentLines = order.get('paymentLines');
|
|
|
+ var paymentLines_keys = [];
|
|
|
+ _.each(cashregisters, function(paymentline){
|
|
|
+ if (paymentline.journal.shortcut_key) {
|
|
|
+ paymentLines_keys.push(paymentline.journal.shortcut_key);
|
|
|
+ }
|
|
|
+ if (paymentline.journal.shortcut_key && paymentline.journal.shortcut_key == String.fromCharCode(e.which)) {
|
|
|
+ var newPaymentline = new instance.point_of_sale.Paymentline({},{cashregister:paymentline, pos:self.pos});
|
|
|
+ if(paymentline.journal.type !== 'cash'){
|
|
|
+ newPaymentline.set_amount( Math.max(order.getDueLeft(),0) );
|
|
|
+ }
|
|
|
+
|
|
|
+ paymentLines.add(newPaymentline);
|
|
|
+ order.selectPaymentline(newPaymentline);
|
|
|
+ self.pos_widget.screen_selector.set_current_screen('payment');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (e.which == 8 && order.getSelectedLine()) {
|
|
|
+ if(self.get('buffer') === ""){
|
|
|
+ if(self.get('mode') === 'quantity'){
|
|
|
+ order.getSelectedLine().set_quantity('remove');
|
|
|
+ }else if( self.get('mode') === 'discount'){
|
|
|
+ order.getSelectedLine().set_discount(self.get('buffer'));
|
|
|
+ }else if( self.get('mode') === 'price'){
|
|
|
+ order.getSelectedLine().set_unit_price(self.get('buffer'));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ var newBuffer = "";
|
|
|
+ self.set({ buffer: newBuffer });
|
|
|
+ if(self.get('mode') === 'quantity'){
|
|
|
+ if(self.get('buffer') === "") {
|
|
|
+ order.getSelectedLine().set_quantity('remove');
|
|
|
+ } else {
|
|
|
+ order.getSelectedLine().set_quantity(self.get('buffer'));
|
|
|
+ }
|
|
|
+ }else if( self.get('mode') === 'discount'){
|
|
|
+ order.getSelectedLine().set_discount(self.get('buffer'));
|
|
|
+ }else if( self.get('mode') === 'price'){
|
|
|
+ order.getSelectedLine().set_unit_price(self.get('buffer'));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (token == search) {
|
|
|
+ $( "div.searchbox" ).find( "input" ).focus();
|
|
|
+ return
|
|
|
+ } else if (token == discount) {
|
|
|
+ order_widget.pos_widget.numpad.state.set('mode', 'discount');
|
|
|
+ self.set({
|
|
|
+ buffer: "0",
|
|
|
+ mode: 'discount'
|
|
|
+ });
|
|
|
+ order_widget.pos_widget.numpad.changedMode();
|
|
|
+ } else if (token == qty) {
|
|
|
+ order_widget.pos_widget.numpad.state.set('mode', 'quantity');
|
|
|
+ self.set({
|
|
|
+ buffer: "0",
|
|
|
+ mode: 'quantity'
|
|
|
+ });
|
|
|
+ order_widget.pos_widget.numpad.changedMode();
|
|
|
+ } else if (token == price) {
|
|
|
+ order_widget.pos_widget.numpad.state.set('mode', 'price');
|
|
|
+ self.set({
|
|
|
+ buffer: "0",
|
|
|
+ mode: 'price'
|
|
|
+ });
|
|
|
+ order_widget.pos_widget.numpad.changedMode();
|
|
|
+ } else if (order.getSelectedLine() && e.which != 113 && e.which != 100 && e.which != 112 &&
|
|
|
+ $.inArray(String.fromCharCode(e.which), paymentLines_keys) == -1) {
|
|
|
+ var mode = order_widget.pos_widget.numpad.state.get('mode');
|
|
|
+ if( mode === 'quantity'){
|
|
|
+ if (order.getSelectedLine().get_quantity() == 1 || order.getSelectedLine().get_quantity() == 0 ) {
|
|
|
+ if (self.get('buffer').length >= 1) {
|
|
|
+ if ((self.get('buffer').length == 2 || self.get('buffer').length == 3) && self.get('buffer').slice(0,1) == '1') {
|
|
|
+ order.getSelectedLine().set_quantity(self.get('buffer'));
|
|
|
+ } else {
|
|
|
+ var qty = self.get('buffer').split('');
|
|
|
+ self.set({
|
|
|
+ buffer: qty[qty.length-1],
|
|
|
+ mode: 'quantity'
|
|
|
+ });
|
|
|
+ order.getSelectedLine().set_quantity(qty[qty.length-1]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ order.getSelectedLine().set_quantity(self.get('buffer'));
|
|
|
+ }
|
|
|
+ }else if( mode === 'discount'){
|
|
|
+ order.getSelectedLine().set_discount(self.get('buffer'));
|
|
|
+ }else if( mode === 'price'){
|
|
|
+ order.getSelectedLine().set_unit_price(self.get('buffer'));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ $('body').on('keypress', function(e){
|
|
|
+ var order = self.pos.get('selectedOrder');
|
|
|
+ var focus = $(":focus");
|
|
|
+ if(focus.length > 0){
|
|
|
+ if(focus[0].type){
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (timeStamp + 50 > new Date().getTime()) {
|
|
|
+ ok = false;
|
|
|
+ } else {
|
|
|
+ ok = true;
|
|
|
+ }
|
|
|
+ timeStamp = new Date().getTime();
|
|
|
+ setTimeout(function(){
|
|
|
+ if (ok) {self.handler_find_operation(e);}
|
|
|
+ }, 50);
|
|
|
+ });
|
|
|
+
|
|
|
+ var rx = /INPUT|SELECT|TEXTAREA/i;
|
|
|
+ $('body').on("keydown keypress", function(e){
|
|
|
+ var order = self.pos.get('selectedOrder');
|
|
|
+ if( e.which == 8 && order.getSelectedLine() ){ // 8 == backspace
|
|
|
+ if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
|
|
|
+ e.preventDefault();
|
|
|
+ if (self.get('mode') == 'quantity') {
|
|
|
+ self.set({
|
|
|
+ buffer: self.get('buffer').slice(0,-1),
|
|
|
+ mode: 'quantity'
|
|
|
+ });
|
|
|
+ qty = self.get('buffer')
|
|
|
+ if (qty == '' && order.getSelectedLine().get_quantity() == 0) {
|
|
|
+ qty = 'remove';
|
|
|
+ }
|
|
|
+ order.getSelectedLine().set_quantity(qty);
|
|
|
+ }
|
|
|
+ if (self.get('mode') == 'discount') {
|
|
|
+ self.set({
|
|
|
+ buffer: self.get('buffer').slice(0,-1),
|
|
|
+ mode: 'discount'
|
|
|
+ });
|
|
|
+ order.getSelectedLine().set_discount(self.get('buffer'));
|
|
|
+ }
|
|
|
+ if (self.get('mode') == 'price') {
|
|
|
+ self.set({
|
|
|
+ buffer: self.get('buffer').slice(0,-1),
|
|
|
+ mode: 'price'
|
|
|
+ });
|
|
|
+ order.getSelectedLine().set_unit_price(self.get('buffer'));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (e.which == 8) {
|
|
|
+ if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
|
|
|
+ e.preventDefault();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ var _super_ProductCategoriesWidget = instance.point_of_sale.ProductCategoriesWidget.prototype;
|
|
|
+ instance.point_of_sale.ProductCategoriesWidget = instance.point_of_sale.ProductCategoriesWidget.extend({
|
|
|
+ // empties the content of the search box
|
|
|
+ clear_search: function(){
|
|
|
+ _super_ProductCategoriesWidget.clear_search.call(this);
|
|
|
+ var input = this.el.querySelector('.searchbox input');
|
|
|
+ input.value = '';
|
|
|
+ input.blur();
|
|
|
+ },
|
|
|
+ });
|
|
|
+}
|