Built motion from commit 9adbe3c.|0.0.122
[motion.git] / server / models / openchannel_room.js
1 const moment = require('moment');
2
3 module.exports = function(sequelize, DataTypes) {
4   var OpenchannelRoom = sequelize.define('OpenchannelRoom', {
5     contact: {
6       type: DataTypes.STRING
7     },
8     openchannelIn: {
9       type: DataTypes.INTEGER,
10       defaultValue: 0
11     },
12     openchannelOut: {
13       type: DataTypes.INTEGER,
14       defaultValue: 0
15     },
16     status: {
17       type: DataTypes.ENUM('NEW', 'OPEN', 'PENDING', 'CLOSED'),
18       defaultValue: 'NEW',
19       set: function(status) {
20         this.setDataValue('status', status);
21
22         switch (status) {
23           case 'NEW':
24             this.setDataValue('arrivedAt', moment().format('YYYY-MM-DD HH:mm:ss'));
25             break;
26           case 'CLOSED':
27             this.setDataValue('closedAt', moment().format('YYYY-MM-DD HH:mm:ss'));
28             break;
29           default:
30
31         }
32       }
33     },
34     lastEvent: {
35       type: DataTypes.ENUM('SENDING', 'SENT', 'RECEIVED', 'FAILED', 'NOTE')
36     },
37     lastEventAt: {
38       type: DataTypes.DATE
39     },
40     tags: {
41       type: DataTypes.TEXT,
42       get: function() {
43         var tags;
44         if (this.getDataValue('tags')) {
45           tags = this.getDataValue('tags').split(';');
46           tags.pop();
47         } else {
48           tags = [];
49         }
50         return tags;
51       },
52       set: function(val) {
53         this.setDataValue('tags', val && val.length ? val.join(';') + ';' : null);
54       }
55     },
56     disposition: {
57       type: DataTypes.STRING
58     },
59     ParentId: {
60       type: DataTypes.INTEGER
61     },
62     waiting: {
63       type: DataTypes.BOOLEAN,
64       defaultValue: false
65     },
66     openReason: DataTypes.STRING,
67     arrivedAt: {
68       type: DataTypes.DATE
69     },
70     closedAt: {
71       type: DataTypes.DATE
72     }
73   }, {
74     tableName: 'openchannel_rooms',
75     associate: function(models) {
76       // BINDING
77       OpenchannelRoom.hasMany(models.OpenchannelMessage);
78       OpenchannelRoom.belongsToMany(models.User, {
79         through: 'user_has_openchannel_rooms'
80       });
81       OpenchannelRoom.belongsTo(models.OpenchannelAccount);
82       OpenchannelRoom.addScope('default', {
83         order: [
84           ['createdAt', 'DESC']
85         ],
86         include: [{
87           model: models.OpenchannelAccount
88         }, {
89           model: models.OpenchannelMessage,
90           include: [{
91             model: models.User,
92             attributes: ['id', 'name', 'fullname', 'email']
93           }]
94         }, {
95           model: models.User,
96           attributes: ['id', 'name', 'fullname', 'email']
97         }]
98       });
99       OpenchannelRoom.addScope('agent', function(id) {
100         return {
101           include: [{
102             model: models.User,
103             where: {
104               id: id
105             }
106           }]
107         }
108       });
109     }
110
111
112   });
113   return OpenchannelRoom;
114 };