ef6cbb03cacb9e64fc28e881676215f6d053df91
[motion.git] / server / models / mail_room.js
1 /**
2  * Chat Website Model
3  */
4
5
6 module.exports = function(sequelize, DataTypes) {
7         var MailRoom = sequelize.define('MailRoom', {
8                 subject: DataTypes.STRING,
9                 from: DataTypes.STRING,
10                 account: DataTypes.STRING,
11                 attachment: {
12                         type: DataTypes.BOOLEAN,
13                         defaultValue: false
14                 },
15                 mailIn: {
16                         type: DataTypes.INTEGER,
17                         defaultValue: 0
18                 },
19                 mailOut: {
20                         type: DataTypes.INTEGER,
21                         defaultValue: 0
22                 },
23                 status: {
24                         type: DataTypes.ENUM('NEW', 'OPEN', 'CLOSED', 'UNMANAGED'),
25                         defaultValue: 'NEW'
26                 },
27                 lastEvent: {
28                         type: DataTypes.ENUM('SENT', 'SENDING', 'RECEIVED', 'FAILED', 'NOTE')
29                 },
30                 lastEventAt: {
31                         type: DataTypes.DATE
32                 },
33                 deleted: {
34                         type: DataTypes.BOOLEAN,
35                         defaultValue: false
36                 },
37                 tags: {
38                         type: DataTypes.TEXT,
39                         get: function() {
40                                 var tags;
41                                 if (this.getDataValue('tags')) {
42                                         tags = this.getDataValue('tags').split(';');
43                                         tags.pop();
44                                 } else {
45                                         tags = [];
46                                 }
47                                 return tags;
48                         },
49                         set: function(val) {
50                                 this.setDataValue('tags', val && val.length ? val.join(';') + ';' : null);
51                         }
52                 },
53                 disposition: {
54                         type: DataTypes.STRING
55                 },
56                 deletedAt: {
57                         type: DataTypes.DATE
58                 },
59                 ParentId: {
60                         type: DataTypes.INTEGER
61                 },
62         }, {
63                 tableName: 'mail_rooms',
64                 paranoid: true,
65                 associate: function(models) {
66                         // BINDING
67                         MailRoom.hasMany(models.MailMessage);
68                         MailRoom.belongsTo(models.MailAccount);
69                         MailRoom.belongsToMany(models.User, {
70                                 through: 'user_has_mail_rooms'
71                         });
72                         // SCOPES
73                         MailRoom.addScope('default', {
74                                 order: [
75                                         ['createdAt', 'DESC']
76                                 ],
77                                 include: [{
78                                         model: models.MailAccount
79                                 }, {
80                                         model: models.MailMessage,
81                                         include: [{
82                                                 model: models.MailAttachment
83                                         }, {
84                                                 model: models.User,
85                                                 attributes: ['id', 'name', 'fullname', 'email', 'userpic']
86                                         }]
87                                 }, {
88                                         model: models.User,
89                                         attributes: ['id', 'name', 'fullname', 'email', 'userpic']
90                                 }]
91                         });
92                 }
93         });
94
95         return MailRoom;
96 };