[IMP] point_of_sale: report errors when loading the point of sale with a traceback...
authorFrederic van der Essen <fva@openerp.com / fvdessen+o@gmail.com>
Thu, 24 Jul 2014 13:21:54 +0000 (15:21 +0200)
committerFrederic van der Essen <fva@openerp.com / fvdessen+o@gmail.com>
Tue, 5 Aug 2014 12:08:38 +0000 (14:08 +0200)
addons/point_of_sale/static/src/js/models.js
addons/point_of_sale/static/src/js/widgets.js

index e35c31a..28b0b31 100644 (file)
@@ -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;
         },
index d686a29..0f846b9 100644 (file)
@@ -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)+'%'});