Built motion from commit 95c3d5ad5.|1.0.29
[motion.git] / server / models / user.js
index 9d0daa9..e000bca 100644 (file)
@@ -9,7 +9,7 @@ module.exports = function(sequelize, DataTypes) {
   var User = sequelize.define('User', {
     name: {
       type: DataTypes.STRING,
-      unique: true,
+      unique: 'name',
       validate: {
         notEmpty: true,
         is: /^[A-Za-z0-9\.\_]+$/i
@@ -22,11 +22,10 @@ module.exports = function(sequelize, DataTypes) {
     fullname: {
       type: DataTypes.STRING,
       allowNull: false,
-      unique: true
     },
     email: {
       type: DataTypes.STRING,
-      unique: true,
+      unique: 'email',
       isEmail: true,
       set: function(email) {
         if (email) {
@@ -56,7 +55,7 @@ module.exports = function(sequelize, DataTypes) {
     },
     internal: {
       type: DataTypes.INTEGER(11),
-      unique: true,
+      unique: 'internal',
       set: function(internal) {
         this.setDataValue('internal', internal);
         this.setDataValue('accountcode', internal);
@@ -113,16 +112,16 @@ module.exports = function(sequelize, DataTypes) {
     voicePause: {
       type: DataTypes.BOOLEAN,
       defaultValue: false,
-      set: function(voicePause) {
-        this.setDataValue('voicePause', voicePause);
-        if (voicePause) {
-          this.setDataValue('queueStatus', 'paused');
-          this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
-        } else {
-          this.setDataValue('queueStatus', 'complete');
-          this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
-        }
-      }
+      // set: function(voicePause) {
+      //   this.setDataValue('voicePause', voicePause);
+      //   if (voicePause) {
+      //     this.setDataValue('queueStatus', 'paused');
+      //     this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+      //   } else {
+      //     this.setDataValue('queueStatus', 'complete');
+      //     this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+      //   }
+      // }
     },
     chatPause: {
       type: DataTypes.BOOLEAN,
@@ -324,11 +323,11 @@ module.exports = function(sequelize, DataTypes) {
         'PROHIB_FAILED_SCREEN', 'PROHIB'),
       allowNull: true,
     },
-    permit: {
+    deny: {
       type: DataTypes.STRING,
       allowNull: true,
     },
-    deny: {
+    permit: {
       type: DataTypes.STRING,
       allowNull: true,
     },
@@ -411,7 +410,7 @@ module.exports = function(sequelize, DataTypes) {
     allow: {
       type: DataTypes.STRING,
       allowNull: true,
-      defaultValue: 'alaw;ulaw;gsm'
+      defaultValue: 'ulaw;gsm'
     },
     autoframing: {
       type: DataTypes.ENUM('yes', 'no'),
@@ -738,10 +737,32 @@ module.exports = function(sequelize, DataTypes) {
     },
     phoneBarEnableRecording: {
       type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    showWebBar: {
+      type: DataTypes.BOOLEAN,
       defaultValue: false
+    },
+    phoneBarShowOmniDesktop: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    phoneBarRingInUse: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarDnd: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
+    },
+    phoneBarUnansweredCallBadge: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: true
     }
   }, {
     tableName: 'users',
+    charset: 'utf8',
+    collate: 'utf8_bin',
     instanceMethods: {
       /**
        * Authenticate - check if the passwords are the same
@@ -797,12 +818,12 @@ module.exports = function(sequelize, DataTypes) {
         through: models.UserHasModule,
         required: false
       });
+      User.belongsToMany(models.MailRoom, {
+        through: models.UserHasMailRoom,
+      });
       User.belongsToMany(models.Channel, {
         through: 'user_has_channels'
       });
-      User.belongsToMany(models.MailRoom, {
-        through: 'user_has_mail_rooms'
-      });
       User.belongsToMany(models.SmsRoom, {
         through: 'user_has_sms_rooms'
       });
@@ -898,7 +919,9 @@ module.exports = function(sequelize, DataTypes) {
           'fullcontact',
           'port',
           'lastms',
-          'description'
+          'description',
+          'callgroup',
+          'pickupgroup'
         ]
       });
 
@@ -929,6 +952,8 @@ module.exports = function(sequelize, DataTypes) {
           'port',
           'lastms',
           'description',
+          'callgroup',
+          'pickupgroup'
         ]
       });
       User.addScope('agent', {
@@ -988,7 +1013,16 @@ module.exports = function(sequelize, DataTypes) {
           'port',
           'lastms',
           'description',
-          'loginInPause'
+          'loginInPause',
+          'showWebBar',
+          'callgroup',
+          'pickupgroup',
+          'phoneBarShowOmniDesktop',
+          'phoneBarRingInUse',
+          'phoneBarDnd',
+          'phoneBarUnansweredCallBadge',
+          'phone',
+          'mobile'
         ]
       });
       User.addScope('telephone', {
@@ -997,9 +1031,25 @@ module.exports = function(sequelize, DataTypes) {
         }
       });
       User.addScope('queues', {
-        include: [models.VoiceQueue, models.ChatQueue, models.MailQueue,
-          models.FaxQueue, models.SmsQueue, models.OpenchannelQueue
-        ]
+        include: [{
+          model: models.VoiceQueue,
+          required: false
+        }, {
+          model: models.ChatQueue,
+          required: false
+        }, {
+          model: models.MailQueue,
+          required: false
+        }, {
+          model: models.FaxQueue,
+          required: false
+        }, {
+          model: models.SmsQueue,
+          required: false
+        }, {
+          model: models.OpenchannelQueue,
+          required: false
+        }]
       });
 
       User.addScope('checkPauseStatus', function(query) {
@@ -1054,12 +1104,18 @@ module.exports = function(sequelize, DataTypes) {
         }
         return scope;
       });
-      User.addScope('checkQueueStatus', function(query) {
+      User.addScope('checkQueueStatus', function(query) { //to be executed before checkOnlineStatus
         var scope = {
           where: {}
         };
         if (query.queueStatus) {
-          scope.where.queueStatus = query.queueStatus;
+          if (query.queueStatus === 'paused') {
+            scope.where.voicePause = true;
+          } else {
+            scope.where.queueStatus = query.queueStatus;
+            scope.where.voicePause = false;
+            query.online = 'true';
+          }
           delete query.queueStatus;
         }
         return scope;
@@ -1080,7 +1136,8 @@ module.exports = function(sequelize, DataTypes) {
             'pauseType',
             'phoneBarRemoteControl',
             'phoneBarRemoteControlPort',
-            'loginInPause'
+            'loginInPause',
+            'showWebBar'
           ],
           include: [{
             model: models.Module,