-var _0xbef9=["\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x53\x54\x52\x49\x4E\x47","\x42\x4F\x4F\x4C\x45\x41\x4E","\x4E\x45\x57","\x4F\x50\x45\x4E","\x43\x4C\x4F\x53\x45\x44","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x68\x61\x73\x4D\x61\x6E\x79","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x62\x65\x6C\x6F\x6E\x67\x73\x54\x6F\x4D\x61\x6E\x79","\x64\x65\x66\x61\x75\x6C\x74","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x61\x64\x64\x53\x63\x6F\x70\x65","\x61\x67\x65\x6E\x74","\x64\x65\x66\x69\x6E\x65"];module[_0xbef9[0]]=function(_0x4e26x1,_0x4e26x2){var _0x4e26x3=_0x4e26x1[_0xbef9[25]](_0xbef9[1],{subject:_0x4e26x2[_0xbef9[2]],from:_0x4e26x2[_0xbef9[2]],attachment:{type:_0x4e26x2[_0xbef9[3]],defaultValue:false},status:{type:_0x4e26x2.ENUM(_0xbef9[4],_0xbef9[5],_0xbef9[6]),defaultValue:_0xbef9[4]}},{tableName:_0xbef9[7],paranoid:true,associate:function(_0x4e26x4){_0x4e26x3[_0xbef9[8]](_0x4e26x4.MailMessage);_0x4e26x3[_0xbef9[9]](_0x4e26x4.MailAccount);_0x4e26x3[_0xbef9[11]](_0x4e26x4.User,{through:_0xbef9[10]});_0x4e26x3[_0xbef9[23]](_0xbef9[12],{order:[[_0xbef9[13],_0xbef9[14]]],include:[{model:_0x4e26x4[_0xbef9[15]]},{model:_0x4e26x4[_0xbef9[16]],include:[{model:_0x4e26x4[_0xbef9[17]]},{model:_0x4e26x4[_0xbef9[18]],attributes:[_0xbef9[19],_0xbef9[20],_0xbef9[21],_0xbef9[22]]}]},{model:_0x4e26x4[_0xbef9[18]],attributes:[_0xbef9[19],_0xbef9[20],_0xbef9[21],_0xbef9[22]]}]});_0x4e26x3[_0xbef9[23]](_0xbef9[24],function(_0x4e26x5){return {include:[{model:_0x4e26x4[_0xbef9[18]],where:{id:_0x4e26x5}}]}})}});return _0x4e26x3}
\ No newline at end of file
+/**
+ * Chat Website Model
+ */
+
+const moment = require('moment');
+
+module.exports = function(sequelize, DataTypes) {
+ var MailRoom = sequelize.define('MailRoom', {
+ subject: DataTypes.STRING,
+ from: DataTypes.STRING,
+ account: DataTypes.STRING,
+ attachment: {
+ type: DataTypes.BOOLEAN,
+ defaultValue: false
+ },
+ mailIn: {
+ type: DataTypes.INTEGER,
+ defaultValue: 0
+ },
+ mailOut: {
+ type: DataTypes.INTEGER,
+ defaultValue: 0
+ },
+ status: {
+ type: DataTypes.ENUM('NEW', 'OPEN', 'PENDING', 'CLOSED'),
+ defaultValue: 'NEW',
+ set: function(status) {
+ this.setDataValue('status', status);
+
+ if (status === 'CLOSED') {
+ this.setDataValue('closedAt', moment().format('YYYY-MM-DD HH:mm:ss'));
+ }
+ }
+ },
+ lastEvent: {
+ type: DataTypes.ENUM('SENDING', 'SENT', 'RECEIVED', 'FAILED', 'NOTE')
+ },
+ lastEventAt: {
+ type: DataTypes.DATE
+ },
+ deleted: {
+ type: DataTypes.BOOLEAN,
+ defaultValue: false
+ },
+ waiting: {
+ type: DataTypes.BOOLEAN,
+ defaultValue: false
+ },
+ tags: {
+ type: DataTypes.TEXT,
+ get: function() {
+ var tags;
+ if (this.getDataValue('tags')) {
+ tags = this.getDataValue('tags').split(';');
+ tags.pop();
+ } else {
+ tags = [];
+ }
+ return tags;
+ },
+ set: function(val) {
+ this.setDataValue('tags', val && val.length ? val.join(';') + ';' : null);
+ }
+ },
+ disposition: {
+ type: DataTypes.STRING
+ },
+ deletedAt: {
+ type: DataTypes.DATE
+ },
+ ParentId: {
+ type: DataTypes.INTEGER
+ },
+ arrivedAt: {
+ type: DataTypes.DATE
+ },
+ closedAt: {
+ type: DataTypes.DATE
+ }
+ }, {
+ tableName: 'mail_rooms',
+ paranoid: true,
+ associate: function(models) {
+ // BINDING
+ MailRoom.hasMany(models.MailMessage);
+ MailRoom.hasMany(models.MailRoomStatus, {
+ plural: 'MailRoomStatuses'
+ });
+ MailRoom.belongsTo(models.MailAccount);
+ MailRoom.belongsToMany(models.User, {
+ through: 'user_has_mail_rooms'
+ });
+ // SCOPES
+ MailRoom.addScope('default', {
+ order: [
+ ['createdAt', 'DESC']
+ ],
+ include: [{
+ model: models.MailAccount
+ }, {
+ model: models.MailMessage,
+ include: [{
+ model: models.MailAttachment
+ }, {
+ model: models.User,
+ attributes: ['id', 'name', 'fullname', 'email', 'userpic']
+ }]
+ }, {
+ model: models.User,
+ attributes: ['id', 'name', 'fullname', 'email', 'userpic']
+ }]
+ });
+ }
+ });
+
+ return MailRoom;
+};