From 28de2183eaf6bbe9c4da412ca0cfb5bfc293bfd3 Mon Sep 17 00:00:00 2001 From: Frederic van der Essen Date: Thu, 24 Jul 2014 15:21:54 +0200 Subject: [PATCH] [IMP] point_of_sale: report errors when loading the point of sale with a traceback and a nice popup --- addons/point_of_sale/static/src/js/models.js | 28 +++++++++---- addons/point_of_sale/static/src/js/widgets.js | 41 +++++++++++++++---- 2 files changed, 52 insertions(+), 17 deletions(-) diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index e35c31a4ea6..28b0b3188f1 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -328,23 +328,35 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal if( model.model ){ new instance.web.Model(model.model).query(fields).filter(domain).context(context).all() .then(function(result){ - $.when(model.loaded(self,result,tmp)) - .then(function(){ load_model(index + 1); }, - function(err){ loaded.reject(err); }); + try{ // catching exceptions in model.loaded(...) + $.when(model.loaded(self,result,tmp)) + .then(function(){ load_model(index + 1); }, + function(err){ loaded.reject(err); }); + }catch(err){ + loaded.reject(err); + } },function(err){ loaded.reject(err); }); }else if( model.loaded ){ - $.when(model.loaded(self,tmp)) - .then( function(){ load_model(index +1); }, - function(err){ loaded.reject(err); }); + try{ // catching exceptions in model.loaded(...) + $.when(model.loaded(self,tmp)) + .then( function(){ load_model(index +1); }, + function(err){ loaded.reject(err); }); + }catch(err){ + loaded.reject(err); + } }else{ load_model(index + 1); } } } - - load_model(0); + + try{ + load_model(0); + }catch(err){ + loaded.reject(err); + } return loaded; }, diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index d686a29785d..0f846b9d924 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -1020,17 +1020,40 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa 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']) - .pipe( _.bind(function(res){ - return instance.session.rpc('/web/action/load', {'action_id': res[0]['res_id']}) - .pipe(_.bind(function(result){ - var action = result.result; - this.do_action(action); - }, this)); - }, self)); + }).fail(function(err){ // error when loading models data from the backend + self.loading_error(err); }); }, + loading_error: function(err){ + var self = this; + + var message = err.message; + var comment = err.stack; + + if(err.message === 'XmlHttpRequestError '){ + message = 'Network Failure (XmlHttpRequestError)'; + comment = 'The Point of Sale could not be loaded due to a network problem.\n Please check your internet connection.'; + }else if(err.message === 'OpenERP Server Error'){ + message = err.data.message; + comment = err.data.debug; + } + + if( typeof comment !== 'string' ){ + comment = 'Traceback not available.'; + } + + var popup = $(QWeb.render('ErrorTracebackPopupWidget',{ + widget: { message: message, comment: comment }, + })); + + popup.find('.button').click(function(){ + self.close(); + }); + + popup.css({ zindex: 9001 }); + + popup.appendTo(this.$el); + }, loading_progress: function(fac){ this.$('.loader .loader-feedback').removeClass('oe_hidden'); this.$('.loader .progress').css({'width': ''+Math.floor(fac*100)+'%'});