From 2c3fa1c48bed8472d07bac44e9038ce3b74cc469 Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Wed, 16 Jul 2014 17:11:18 +0200 Subject: [PATCH 01/21] [IMP] point_of_sale: add an error sound to the error popups --- addons/point_of_sale/static/src/js/screens.js | 3 +++ .../point_of_sale/static/src/sounds/error.wav | Bin 0 -> 25190 bytes 2 files changed, 3 insertions(+) create mode 100644 addons/point_of_sale/static/src/sounds/error.wav diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 2f2f5e57312..48fa00e1d70 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -348,6 +348,8 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa var self = this; this._super(); + $('body').append(''); + if( text && (text.message || text.comment) ){ this.$('.message').text(text.message); this.$('.comment').text(text.comment); @@ -375,6 +377,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa show: function(barcode){ this._super(); this.$('.barcode').text(barcode); + }, }); diff --git a/addons/point_of_sale/static/src/sounds/error.wav b/addons/point_of_sale/static/src/sounds/error.wav new file mode 100644 index 0000000000000000000000000000000000000000..472f39107190844ac725defe4aa9fd6fefa4d9dc GIT binary patch literal 25190 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 F{|B~-GC%+T literal 0 HcmV?d00001 From 75a6bcaee473ff641c2a6e5ec9eb6a19e7a4bdc2 Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Thu, 17 Jul 2014 17:20:56 +0200 Subject: [PATCH 02/21] [IMP] point_of_sale: a little explaination of how the barcode pattern system works --- addons/point_of_sale/point_of_sale_view.xml | 34 ++++++++++++++++----- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 51fa0738076..520c22db9c7 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -679,13 +679,33 @@ - - - - - - - + +

+ Barcode Patterns allow to match barcodes to actions or to embed information such as price and quantity in the barcode. + Barcode Patterns only work with EAN13 barcodes. +

+

+ Each type of barcode accepts a list of patterns seprated by commas. A scanned + barcode will be attributed to a type if it matches one of its patterns. + The patterns take the form of EAN13 barcodes. Numbers in the pattern must match + the number in the scanned barcode. A 'x' or a '*' in a pattern will match + any one number. If the patterns are shorter than EAN13 barcodes, they are assumed + to be prefixes and match at the beginning. Weight, Price and Discount patterns also + tell how the weight, price or discount is encoded in the barcode. 'N' indicate the + positions where the integer part is en encoded, and 'D' where the decimals are encoded. + If multiple pattern match one barcode, the longest pattern with the less 'x' or '*' is + considered the matching one. If a barcode matches no pattern it will not be found in + the POS. +

+ + + + + + + + +
From ac47f95bad3f4aab6ec0e4c57f93a68056772caa Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Thu, 17 Jul 2014 17:51:27 +0200 Subject: [PATCH 03/21] [IMP] point_of_sale: improved rendering speed of the partner list --- addons/point_of_sale/static/src/js/screens.js | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 48fa00e1d70..e2db20decc5 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -560,6 +560,11 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa module.ClientListScreenWidget = module.ScreenWidget.extend({ template: 'ClientListScreenWidget', + init: function(parent, options){ + this._super(parent, options); + this.partner_cache = new module.DomCache(); + }, + show_leftpane: false, auto_back: true, @@ -590,7 +595,6 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa } this.$('.client-list-contents').delegate('.client-line','click',function(event){ - console.log('uh'); self.line_select(event,$(this),parseInt($(this).data('id'))); }); @@ -631,14 +635,24 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this.$('.searchbox input').focus(); }, render_list: function(partners){ - var contents = this.$('.client-list-contents'); - contents.empty(); + var contents = this.$el[0].querySelector('.client-list-contents'); + contents.innerHtml = ""; for(var i = 0, len = partners.length; i < len; i++){ - var clientline = $(QWeb.render('ClientLine',{partner:partners[i]})); - if( partners[i] === this.new_client ){ - clientline.addClass('highlight'); + var partner = partners[i]; + var clientline = this.partner_cache.get_node(partner.id); + if(!clientline){ + var clientline_html = QWeb.render('ClientLine',{partner:partners[i]}); + var clientline = document.createElement('tbody'); + clientline.innerHTML = clientline_html; + clientline = clientline.childNodes[1]; + this.partner_cache.cache_node(partner.id,clientline); } - contents.append(clientline); + if( partners === this.new_client ){ + clientline.classList.add('highlight'); + }else{ + clientline.classList.remove('highlight'); + } + contents.appendChild(clientline); } }, save_changes: function(){ From 4f0d454217a68d180d62074e4b08cfc4b15eccb4 Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Fri, 18 Jul 2014 13:28:22 +0200 Subject: [PATCH 04/21] [FIX] point_of_sale: order invoicing was broken --- addons/point_of_sale/static/src/js/models.js | 75 ++++++------------- addons/point_of_sale/static/src/js/widgets.js | 4 +- 2 files changed, 26 insertions(+), 53 deletions(-) diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 92276db60de..17278ed1bd9 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -324,20 +324,21 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal // it returns a deferred that succeeds after having tried to send the order and all the other pending orders. push_order: function(order) { var self = this; - this.proxy.log('push_order',order.export_as_JSON()); - var order_id = this.db.add_order(order.export_as_JSON()); + + if(order){ + this.proxy.log('push_order',order.export_as_JSON()); + this.db.add_order(order.export_as_JSON()); + } + var pushed = new $.Deferred(); - this.set('synch',{state:'connecting', pending:self.db.get_orders().length}); - this.flush_mutex.exec(function(){ - var flushed = self._flush_all_orders(); + var flushed = self._flush_orders(self.db.get_orders()); - flushed.always(function(){ + flushed.always(function(ids){ + console.log('pushed orders:',ids); pushed.resolve(); }); - - return flushed; }); return pushed; }, @@ -361,8 +362,6 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal var order_id = this.db.add_order(order.export_as_JSON()); - this.set('synch',{state:'connecting', pending:self.db.get_orders().length}); - this.flush_mutex.exec(function(){ var done = new $.Deferred(); // holds the mutex @@ -373,7 +372,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal // things will happen as a duplicate will be sent next time // so we must make sure the server detects and ignores duplicated orders - var transfer = self._flush_order(order_id, {timeout:30000, to_invoice:true}); + var transfer = self._flush_orders([self.db.get_order(order_id)], {timeout:30000, to_invoice:true}); transfer.fail(function(){ invoiced.reject('error-transfer'); @@ -382,10 +381,12 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal // on success, get the order id generated by the server transfer.pipe(function(order_server_id){ + // generate the pdf and download it self.pos_widget.do_action('point_of_sale.pos_invoice_report',{additional_context:{ active_ids:order_server_id, }}); + invoiced.resolve(); done.resolve(); }); @@ -397,62 +398,33 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal return invoiced; }, - // attemps to send all pending orders ( stored in the pos_db ) to the server, - // and remove the successfully sent ones from the db once - // it has been confirmed that they have been sent correctly. - flush: function() { + // wrapper around the _save_to_server that updates the synch status widget + _flush_orders: function(orders, options) { var self = this; - var flushed = new $.Deferred(); - this.flush_mutex.exec(function(){ - var done = new $.Deferred(); + this.set('synch',{ state: 'connecting', pending: orders.length}); - self._flush_all_orders() - .done( function(){ flushed.resolve();}) - .fail( function(){ flushed.reject(); }) - .always(function(){ done.resolve(); }); - - return done; - }); - - return flushed; - }, - - // attempts to send the locally stored order of id 'order_id' - // the sending is asynchronous and can take some time to decide if it is successful or not - // it is therefore important to only call this method from inside a mutex - // this method returns a deferred indicating wether the sending was successful or not - // there is a timeout parameter which is set to 2 seconds by default. - _flush_order: function( order_id, options) { - return this._flush_all_orders([this.db.get_order(order_id)], options); - }, - - // attempts to send all the locally stored orders. As with _flush_order, it should only be - // called from within a mutex. - // this method returns a deferred that always succeeds when all orders have been tried to be sent, - // even if none of them could actually be sent. - _flush_all_orders: function () { - var self = this; - self.set('synch', { - state: 'connecting', - pending: self.get('synch').pending - }); - return self._save_to_server(self.db.get_orders()).done(function () { + return self._save_to_server(orders, options).done(function (server_ids) { var pending = self.db.get_orders().length; + self.set('synch', { state: pending ? 'connecting' : 'connected', pending: pending }); + + return server_ids; }); }, // send an array of orders to the server // available options: // - timeout: timeout for the rpc call in ms + // returns a deferred that resolves with the list of + // server generated ids for the sent orders _save_to_server: function (orders, options) { if (!orders || !orders.length) { var result = $.Deferred(); - result.resolve(); + result.resolve([]); return result; } @@ -474,10 +446,11 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal shadow: !options.to_invoice, timeout: timeout } - ).then(function () { + ).then(function (server_ids) { _.each(orders, function (order) { self.db.remove_order(order.id); }); + return server_ids; }).fail(function (unused, event){ // prevent an error popup creation by the rpc failure // we want the failure to be silent as we send the orders in the background diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index 5db12165737..66130a7740c 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -840,7 +840,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa self.set_status(synch.state, synch.pending); }); this.$el.click(function(){ - self.pos.flush(); + self.pos.push_order(); }); }, }); @@ -1005,7 +1005,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa self.$('.loader').animate({opacity:0},1500,'swing',function(){self.$('.loader').addClass('oe_hidden');}); - self.pos.flush(); + self.pos.push_order(); }).fail(function(){ // error when loading models data from the backend return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_pos_session_opening']], ['res_id']) From 8e212eb6fb0e70c270d0ccbc3f958ef193c65b85 Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Fri, 18 Jul 2014 14:30:13 +0200 Subject: [PATCH 05/21] [FIX] point_of_sale: it was impossible to delete a pos session --- addons/point_of_sale/point_of_sale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index ba00cf57094..805ce104221 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -394,7 +394,7 @@ class pos_session(osv.osv): for obj in self.browse(cr, uid, ids, context=context): for statement in obj.statement_ids: statement.unlink(context=context) - return True + return super(pos_session, self).unlink(cr, uid, ids, context=context) def open_cb(self, cr, uid, ids, context=None): From 85d697670c452b262baff2069ece9083ee60d243 Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Tue, 22 Jul 2014 14:33:32 +0200 Subject: [PATCH 06/21] [IMP] point_of_sale: show traceback popup when there is a server error when posting orders (which should NEVER happen !) --- addons/point_of_sale/point_of_sale.py | 1 + addons/point_of_sale/static/src/css/pos.css | 7 +++++++ addons/point_of_sale/static/src/js/models.js | 8 +++++++- addons/point_of_sale/static/src/js/screens.js | 3 +++ addons/point_of_sale/static/src/js/widgets.js | 4 ++++ addons/point_of_sale/static/src/xml/pos.xml | 14 ++++++++++++++ 6 files changed, 36 insertions(+), 1 deletion(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 805ce104221..46e4438a12a 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -553,6 +553,7 @@ class pos_order(osv.osv): orders_to_save = [o for o in orders if o['data']['name'] not in existing_references] order_ids = [] + for tmp_order in orders_to_save: to_invoice = tmp_order['to_invoice'] order = tmp_order['data'] diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css index 30939636b23..9836e5d9280 100644 --- a/addons/point_of_sale/static/src/css/pos.css +++ b/addons/point_of_sale/static/src/css/pos.css @@ -1665,6 +1665,13 @@ td { font-size: 18px; margin: 0px 16px; } +.pos .popup .comment.traceback { + height: 264px; + overflow: auto; + font-size: 14px; + text-align: left; + font-family: 'Inconsolata'; +} .pos .popup .footer{ position:absolute; bottom:0; diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 17278ed1bd9..222d5663621 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -451,7 +451,13 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal self.db.remove_order(order.id); }); return server_ids; - }).fail(function (unused, event){ + }).fail(function (error, event){ + if(error.code === 200 ){ // Business Logic Error, not a connection problem + self.pos_widget.screen_selector.show_popup('error-traceback',{ + message: error.data.message, + comment: error.data.debug + }); + } // prevent an error popup creation by the rpc failure // we want the failure to be silent as we send the orders in the background event.preventDefault(); diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index e2db20decc5..ca09719a2f0 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -367,6 +367,9 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa }, }); + module.ErrorTracebackPopupWidget = module.ErrorPopupWidget.extend({ + template:'ErrorTracebackPopupWidget', + }); module.ErrorSessionPopupWidget = module.ErrorPopupWidget.extend({ template:'ErrorSessionPopupWidget', diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index 66130a7740c..cc9a8fe9e3a 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -1082,6 +1082,9 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa this.error_invoice_transfer_popup = new module.ErrorInvoiceTransferPopupWidget(this, {}); this.error_invoice_transfer_popup.appendTo(this.$el); + this.error_traceback_popup = new module.ErrorTracebackPopupWidget(this,{}); + this.error_traceback_popup.appendTo(this.$el); + this.confirm_popup = new module.ConfirmPopupWidget(this,{}); this.confirm_popup.appendTo(this.$el); @@ -1139,6 +1142,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa 'choose-receipt': this.choose_receipt_popup, 'error-no-client': this.error_no_client_popup, 'error-invoice-transfer': this.error_invoice_transfer_popup, + 'error-traceback': this.error_traceback_popup, 'confirm': this.confirm_popup, }, default_screen: 'products', diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index 929212cce8d..93f008ffab2 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -635,6 +635,20 @@ + + + +