Built motion from commit 5b01f56.|0.0.106
[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         }, {
60                 tableName: 'mail_rooms',
61                 paranoid: true,
62                 associate: function(models) {
63                         // BINDING
64                         MailRoom.hasMany(models.MailMessage);
65                         MailRoom.belongsTo(models.MailAccount);
66                         MailRoom.belongsToMany(models.User, {
67                                 through: 'user_has_mail_rooms'
68                         });
69                         // SCOPES
70                         MailRoom.addScope('default', {
71                                 order: [
72                                         ['createdAt', 'DESC']
73                                 ],
74                                 include: [{
75                                         model: models.MailAccount
76                                 }, {
77                                         model: models.MailMessage,
78                                         include: [{
79                                                 model: models.MailAttachment
80                                         }, {
81                                                 model: models.User,
82                                                 attributes: ['id', 'name', 'fullname', 'email', 'userpic']
83                                         }]
84                                 }, {
85                                         model: models.User,
86                                         attributes: ['id', 'name', 'fullname', 'email', 'userpic']
87                                 }]
88                         });
89                 }
90         });
91
92         return MailRoom;
93 };