Built motion from commit 82438f7.|0.0.115
[motion.git] / server / models / user.js
index 69aca7d..26be9e1 100644 (file)
@@ -23,6 +23,7 @@ module.exports = function(sequelize, DataTypes) {
     fullname: {
       type: DataTypes.STRING,
       allowNull: false,
+      unique: true
     },
     email: {
       type: DataTypes.STRING,
@@ -117,10 +118,12 @@ module.exports = function(sequelize, DataTypes) {
         this.setDataValue('voicePause', voicePause);
         if (voicePause) {
           this.setDataValue('queueStatus', 'paused');
-          this.setDataValue('queueStatusAt', moment().format("YYYY-MM-DD HH:mm:ss"));
+          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"));
+          this.setDataValue('queueStatusAt', moment().format(
+            "YYYY-MM-DD HH:mm:ss"));
         }
       }
     },
@@ -140,6 +143,10 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.BOOLEAN,
       defaultValue: false
     },
+    openchannelPause: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
     pauseType: {
       type: DataTypes.STRING,
       defaultValue: 'Default Pause'
@@ -163,6 +170,10 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.INTEGER,
       defaultValue: 0
     },
+    openchannelCapacity: {
+      type: DataTypes.INTEGER,
+      defaultValue: 0
+    },
     phoneBarAutoAnswer: {
       type: DataTypes.BOOLEAN,
       defaultValue: false
@@ -220,7 +231,7 @@ module.exports = function(sequelize, DataTypes) {
     },
     phoneBarExpires: {
       type: DataTypes.INTEGER(5),
-      defaultValue: 3600
+      defaultValue: 120
     },
     phoneBarNameServer: {
       type: DataTypes.STRING,
@@ -232,7 +243,7 @@ module.exports = function(sequelize, DataTypes) {
     },
     phoneBarVADEnabled: {
       type: DataTypes.BOOLEAN,
-      defaultValue: true
+      defaultValue: false
     },
     phoneBarNoUDP: {
       type: DataTypes.BOOLEAN,
@@ -250,6 +261,14 @@ module.exports = function(sequelize, DataTypes) {
       type: DataTypes.BOOLEAN,
       defaultValue: false
     },
+    phoneBarRemoteControl: {
+      type: DataTypes.BOOLEAN,
+      defaultValue: false
+    },
+    phoneBarRemoteControlPort: {
+      type: DataTypes.INTEGER,
+      defaultValue: 9888
+    },
     chanspy: {
       type: DataTypes.BOOLEAN,
       defaultValue: false
@@ -764,7 +783,8 @@ module.exports = function(sequelize, DataTypes) {
       User.hasMany(models.Contact);
       User.hasMany(models.Action);
       User.belongsToMany(models.Module, {
-        through: 'user_has_modules'
+        through: models.UserHasModule,
+        required: false
       });
       User.belongsToMany(models.Channel, {
         through: 'user_has_channels'
@@ -772,27 +792,68 @@ module.exports = function(sequelize, DataTypes) {
       User.belongsToMany(models.MailRoom, {
         through: 'user_has_mail_rooms'
       });
+      User.belongsToMany(models.SmsRoom, {
+        through: 'user_has_sms_rooms'
+      });
+      User.belongsToMany(models.OpenchannelRoom, {
+        through: 'user_has_openchannel_rooms'
+      });
+      User.belongsToMany(models.FaxRoom, {
+        through: 'user_has_fax_rooms'
+      });
       User.belongsToMany(models.Team, {
         through: models.UserHasTeam
       });
-      User.belongsToMany(models.ChatRoom, {
-        through: models.UserHasChatRoom
+      User.belongsToMany(models.VoiceQueue, {
+        through: models.UserHasVoiceQueue,
+        required: false
+      });
+      User.belongsToMany(models.VoiceQueue, {
+        through: models.UserHasVoiceQueuePermit,
+        as: 'PVoiceQueues'
       });
       User.belongsToMany(models.MailQueue, {
         through: models.UserHasMailQueue,
         required: false
       });
+      User.belongsToMany(models.SmsQueue, {
+        through: models.UserHasSmsQueue,
+        required: false
+      });
+      User.belongsToMany(models.SmsQueue, {
+        through: models.UserHasSmsQueuePermit,
+        as: 'PSmsQueues'
+      });
+      User.belongsToMany(models.OpenchannelQueue, {
+        through: models.UserHasOpenchannelQueue,
+        required: false
+      });
+      User.belongsToMany(models.OpenchannelQueue, {
+        through: models.UserHasOpenchannelQueuePermit,
+        as: 'POpenchannelQueues'
+      });
+      User.belongsToMany(models.MailQueue, {
+        through: models.UserHasMailQueuePermit,
+        as: 'PMailQueues'
+      });
       User.belongsToMany(models.FaxQueue, {
         through: models.UserHasFaxQueue,
         required: false
       });
+      User.belongsToMany(models.FaxQueue, {
+        through: models.UserHasFaxQueuePermit,
+        as: 'PFaxQueues'
+      });
       User.belongsToMany(models.ChatQueue, {
         through: models.UserHasChatQueue,
         required: false
       });
-      User.belongsToMany(models.VoiceQueue, {
-        through: models.UserHasVoiceQueue,
-        required: false
+      User.belongsToMany(models.ChatQueue, {
+        through: models.UserHasChatQueuePermit,
+        as: 'PChatQueues'
+      });
+      User.belongsToMany(models.ChatRoom, {
+        through: models.UserHasChatRoom
       });
       User.belongsToMany(models.List, {
         through: models.UserHasList
@@ -805,37 +866,157 @@ module.exports = function(sequelize, DataTypes) {
       });
 
       // SCOPES MANAGEMENT
+      User.addScope('all', {
+        attributes: ['id',
+          'name',
+          'email',
+          'internal',
+          'fullname',
+          'role',
+          'online',
+          'userpic',
+          'accountcode',
+          'transport',
+          'host',
+          'role',
+          'nat',
+          'type',
+          'allow',
+          'lastLoginAt',
+          'ipaddr',
+          'fullcontact',
+          'port',
+          'lastms',
+          'description'
+        ]
+      });
+
+      // SCOPES MANAGEMENT
       User.addScope('user', {
         where: {
           role: {
             $in: ['admin', 'user']
           },
-        }
+        },
+        attributes: ['id',
+          'name',
+          'email',
+          'internal',
+          'fullname',
+          'role',
+          'userpic',
+          'accountcode',
+          'transport',
+          'host',
+          'role',
+          'nat',
+          'type',
+          'allow',
+          'lastLoginAt',
+          'ipaddr',
+          'fullcontact',
+          'port',
+          'lastms',
+          'description'
+        ]
       });
-      User.addScope('queues', {
-        include: [models.VoiceQueue, models.ChatQueue, models.MailQueue, models.FaxQueue]
+      User.addScope('agent', {
+        where: {
+          role: 'agent'
+        },
+        attributes: ['id',
+          'name',
+          'email',
+          'internal',
+          'fullname',
+          'role',
+          'userpic',
+          'accountcode',
+          'transport',
+          'host',
+          'nat',
+          'type',
+          'allow',
+          'chatCapacity',
+          'mailCapacity',
+          'faxCapacity',
+          'smsCapacity',
+          'openchannelCapacity',
+          'online',
+          'lastLoginAt',
+          'phoneBarAutoAnswer',
+          'phoneBarEnableSettings',
+          'phoneBarUnconditional',
+          'phoneBarNoReply',
+          'phoneBarBusy',
+          'phoneBarUnconditionalNumber',
+          'phoneBarNoReplyNumber',
+          'phoneBarBusyNumber',
+          'phoneBarListenPort',
+          'phoneBarExpires',
+          'phoneBarRemoteControl',
+          'phoneBarRemoteControlPort',
+          'chanspy',
+          'voicePause',
+          'mailPause',
+          'faxPause',
+          'chatPause',
+          'smsPause',
+          'openchannelPause',
+          'pauseType',
+          'lastPauseAt',
+          'status',
+          'statusAt',
+          'queueStatus',
+          'queueStatusAt',
+          'lastQueue',
+          'useragent',
+          'ipaddr',
+          'fullcontact',
+          'port',
+          'lastms',
+          'description'
+        ]
       });
       User.addScope('telephone', {
         where: {
           role: 'telephone'
         }
       });
+      User.addScope('queues', {
+        include: [models.VoiceQueue, models.ChatQueue, models.MailQueue,
+          models.FaxQueue, models.SmsQueue, models.OpenchannelQueue
+        ]
+      });
+
       User.addScope('checkPauseStatus', function(query) {
         var scope = {
           where: {}
         };
         if (query.voicePause) {
-          scope.where.voicePause = (query.voicePause === 'true') ? true : false;
+          scope.where.voicePause = (query.voicePause === 'true') ?
+            true : false;
           delete query.voicePause;
         } else if (query.faxPause) {
-          scope.where.faxPause = (query.faxPause === 'true') ? true : false;
+          scope.where.faxPause = (query.faxPause === 'true') ? true :
+            false;
           delete query.faxPause;
         } else if (query.chatPause) {
-          scope.where.chatPause = (query.chatPause === 'true') ? true : false;
+          scope.where.chatPause = (query.chatPause === 'true') ?
+            true : false;
           delete query.chatPause;
         } else if (query.mailPause) {
-          scope.where.mailPause = (query.mailPause === 'true') ? true : false;
+          scope.where.mailPause = (query.mailPause === 'true') ?
+            true : false;
           delete query.mailPause;
+        } else if (query.smsPause) {
+          scope.where.smsPause = (query.smsPause === 'true') ?
+            true : false;
+          delete query.smsPause;
+        } else if (query.openchannelPause) {
+          scope.where.openchannelPause = (query.openchannelPause === 'true') ?
+            true : false;
+          delete query.openchannelPause;
         }
         return scope;
       });
@@ -844,7 +1025,8 @@ module.exports = function(sequelize, DataTypes) {
           where: {}
         };
         if (query.online) {
-          scope.where.online = (query.online === 'true') ? true : false;
+          scope.where.online = (query.online === 'true') ? true :
+            false;
           delete query.online;
         }
         return scope;
@@ -869,55 +1051,6 @@ module.exports = function(sequelize, DataTypes) {
         }
         return scope;
       });
-      User.addScope('agent', {
-        where: {
-          role: 'agent'
-        },
-        attributes: ['id',
-          'name',
-          'email',
-          'internal',
-          'fullname',
-          'accountcode',
-          'transport',
-          'host',
-          'nat',
-          'type',
-          'allow',
-          'chatCapacity',
-          'mailCapacity',
-          'faxCapacity',
-          'online',
-          'lastLoginAt',
-          'phoneBarAutoAnswer',
-          'phoneBarEnableSettings',
-          'phoneBarUnconditional',
-          'phoneBarNoReply',
-          'phoneBarBusy',
-          'phoneBarUnconditionalNumber',
-          'phoneBarNoReplyNumber',
-          'phoneBarBusyNumber',
-          'phoneBarListenPort',
-          'chanspy',
-          'voicePause',
-          'mailPause',
-          'faxPause',
-          'chatPause',
-          'pauseType',
-          'lastPauseAt',
-          'status',
-          'statusAt',
-          'queueStatus',
-          'queueStatusAt',
-          'lastQueue',
-          'useragent',
-          'ipaddr',
-          'fullcontact',
-          'port',
-          'lastms',
-          'description'
-        ]
-      });
     }
   });