Built motion from commit 8dae768.|0.0.121
[motion.git] / server / models / sms_room.js
1 'use strict';
2
3 module.exports = function(sequelize, DataTypes) {
4   var SmsRoom = sequelize.define('SmsRoom', {
5     from: {
6       type: DataTypes.STRING,
7       validate: {
8         is: /^[\+]?[0-9]+$/
9       }
10     },
11     status: {
12       type: DataTypes.ENUM('NEW', 'OPEN', 'CLOSED', 'UNMANAGED'),
13       defaultValue: 'NEW'
14     },
15     lastEvent: {
16       type: DataTypes.ENUM('SENDING', 'SENT', 'RECEIVED', 'FAILED', 'NOTE')
17     },
18     lastEventAt: {
19       type: DataTypes.DATE
20     },
21     waiting: {
22       type: DataTypes.BOOLEAN,
23       defaultValue: false
24     },
25     tags: {
26       type: DataTypes.TEXT,
27       get: function() {
28         var tags;
29         if (this.getDataValue('tags')) {
30           tags = this.getDataValue('tags').split(';');
31           tags.pop();
32         } else {
33           tags = [];
34         }
35         return tags;
36       },
37       set: function(val) {
38         this.setDataValue('tags', val && val.length ? val.join(';') + ';' : null);
39       }
40     },
41     disposition: {
42       type: DataTypes.STRING
43     },
44     openReason: DataTypes.STRING,
45     arrivedAt: {
46       type: DataTypes.DATE
47     },
48     closedAt: {
49       type: DataTypes.DATE
50     },
51     ParentId: {
52       type: DataTypes.INTEGER
53     },
54     voiceSource: {
55       type: DataTypes.BOOLEAN,
56       defaultValue: false
57     }
58   }, {
59     tableName: 'sms_rooms',
60     associate: function(models) {
61       // BINDING
62       SmsRoom.hasMany(models.SmsMessage);
63       SmsRoom.hasMany(models.SmsRoomStatus, {
64         plural: 'SmsRoomStatuses'
65       });
66       SmsRoom.belongsToMany(models.User, {
67         through: 'user_has_sms_rooms'
68       });
69       SmsRoom.belongsTo(models.SmsAccount);
70       SmsRoom.addScope('default', {
71         order: [
72           ['createdAt', 'DESC']
73         ],
74         include: [{
75           model: models.SmsAccount
76         }, {
77           model: models.SmsMessage,
78           include: [{
79             model: models.User,
80             attributes: ['id', 'name', 'fullname', 'email']
81           }]
82         }, {
83           model: models.User,
84           attributes: ['id', 'name', 'fullname', 'email']
85         }]
86       });
87       SmsRoom.addScope('agent', function(id) {
88         return {
89           include: [{
90             model: models.User,
91             where: {
92               id: id
93             }
94           }]
95         }
96       });
97     }
98
99
100   });
101   return SmsRoom;
102 };