diff options
| author | Frederic van der Essen <fva@openerp.com / fvdessen+o@gmail.com> | 2014-07-24 15:21:54 +0200 |
|---|---|---|
| committer | Frederic van der Essen <fva@openerp.com / fvdessen+o@gmail.com> | 2014-07-24 15:21:54 +0200 |
| commit | 6d87dfb0046d6f4ae48d04a1c0996bc9716fe39f (patch) | |
| tree | 72c81f6bb4f0e345cb1ac7ba95b847c6fbb8b0c8 /addons | |
| parent | 62c7482a2dc1b608df3fbd728bd6742dc0488a6e (diff) | |
[IMP] point_of_sale: report errors when loading the point of sale with a traceback and a nice popup
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/point_of_sale/static/src/js/models.js | 28 | ||||
| -rw-r--r-- | 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 50120f9d9df..84aa163f632 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -1024,17 +1024,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)+'%'}); |
