diff -r 0150aa580c82 web/org.openbravo.mobile.core/source/model/ob-terminal-model.js
--- a/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js	Tue Oct 21 20:25:06 2014 +0000
+++ b/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js	Mon Nov 03 19:37:18 2014 +0530
@@ -991,63 +991,63 @@
   },
 
   setUserModelOnline: function (callback) {
+    OB.debug("next process:", callback);
     var me = this;
-    OB.Dal.initCache(OB.Model.User, [], null, null);
-    OB.Dal.initCache(OB.Model.LogClient, [], null, null);
-    OB.Dal.initCache(OB.Model.Session, [], null, null);
-    OB.Dal.find(OB.Model.User, {
-      'name': me.user
-    }, function (users) {
-      var user, session, date, savedPass;
-      if (users.models.length === 0) {
-        date = new Date().toString();
-        user = new OB.Model.User();
-        user.set('name', me.user);
-        user.set('id', OB.MobileApp.model.get('orgUserId'));
-        savedPass = me.generate_sha1(me.password + date);
-        user.set('password', savedPass);
-        user.set('created', date);
-        user.set('formatInfo', JSON.stringify(OB.Format));
-        me.usermodel = user;
-        OB.Dal.save(user, function () {
-          if (callback) {
-            callback();
-          }
-        }, function () {
-          OB.error(arguments);
-        }, true);
-      } else {
-        user = users.models[0];
-        me.usermodel = user;
-        if (me.password) {
-          //The password will only be recomputed in case it was properly entered
-          //(that is, if the call comes from the login page directly)
-          savedPass = me.generate_sha1(me.password + user.get('created'));
-          user.set('password', savedPass);
-          me.usermodel = user;
-        } else {
-          user = users.models[0];
-          me.usermodel = user;
-          if (me.password) {
-            //The password will only be recomputed in case it was properly entered
-            //(that is, if the call comes from the login page directly)
-            savedPass = me.generate_sha1(me.password + user.get('created'));
-            user.set('password', savedPass);
-          }
-        }
-        user.set('formatInfo', JSON.stringify(OB.Format));
-        OB.Dal.save(user, function () {
-          me.updateSession(user);
-          if (callback) {
-            callback();
-          }
-        }, function () {
-          OB.error(arguments);
-        });
-      }
-    }, function () {
-      OB.error(arguments);
-    });
+    OB.Dal.initCache(OB.Model.LogClient, [], function () {
+      OB.Dal.initCache(OB.Model.Session, [], function () {
+        OB.Dal.initCache(OB.Model.User, [], function () {
+          OB.Dal.find(OB.Model.User, {
+            'name': me.user
+          }, function (users) {
+            var user, session, date, savedPass;
+            if (users.models.length === 0) {
+              date = new Date().toString();
+              user = new OB.Model.User();
+              user.set('name', me.user);
+              user.set('id', OB.MobileApp.model.get('orgUserId'));
+              savedPass = me.generate_sha1(me.password + date);
+              user.set('password', savedPass);
+              user.set('created', date);
+              user.set('formatInfo', JSON.stringify(OB.Format));
+              me.usermodel = user;
+              OB.Dal.save(user, function () {
+                if (callback) {
+                  callback();
+                }
+              }, function () {
+                OB.MobileApp.model.loadingErrorsActions('setUserModelOnline I');
+                // TODO: an error is shown when the transaction fail because a constraints error that shouldn't appear and must be analyzed
+                // error shown: Table 'ad_user' save error: (6) could not execute statement due to a constaint failure (19 constraint failed)
+                // QUICK FIX: trying again fixes the problem
+                // me.setUserModelOnline(callback);
+                return;
+              }, true);
+            } else {
+              user = users.models[0];
+              me.usermodel = user;
+              if (me.password) {
+                //The password will only be recomputed in case it was properly entered
+                //(that is, if the call comes from the login page directly)
+                savedPass = me.generate_sha1(me.password + user.get('created'));
+                user.set('password', savedPass);
+              }
+              user.set('formatInfo', JSON.stringify(OB.Format));
+              OB.Dal.save(user, function () {
+                me.updateSession(user);
+                if (callback) {
+                  callback();
+                }
+              }, function () {
+                OB.MobileApp.model.loadingErrorsActions('setUserModelOnline II');
+                return;
+              });
+            }
+          }, function () {
+            OB.error("setUserModelOnline", arguments);
+          });
+        }, null);
+      }, null);
+    }, null);
   },
 
   /**
@@ -1179,4 +1179,4 @@
       OB.error(arguments);
     });
   }
-});
+});
\ No newline at end of file
