8f7ba5e1e35928837d57be05c07b3532816c4a16
[motion.git] / server / models / report_queue.js
1 /**
2  * QueueLog Model
3  */
4
5 var moment = require('moment');
6
7 module.exports = function(sequelize, DataTypes) {
8
9   var ReportQueue = sequelize.define('ReportQueue', {
10     uniqueid: DataTypes.STRING,
11     calleridnum: DataTypes.STRING,
12     calleridname: DataTypes.STRING,
13     queue: DataTypes.STRING,
14     queuecallerjoinAt: DataTypes.DATE,
15     queuecallerleaveAt: {
16       type: DataTypes.DATE,
17       set: function(queuecallerleaveAt) {
18         var a = moment(queuecallerleaveAt);
19         var b = moment(this.getDataValue('queuecallerjoinAt')).format("YYYY-MM-DD HH:mm:ss");
20         var holdtime = a.diff(b, 'seconds');
21
22         this.setDataValue('queuecallerleaveAt', queuecallerleaveAt);
23         this.setDataValue('holdtime', holdtime || null);
24       }
25     },
26     position: DataTypes.INTEGER,
27     count: DataTypes.INTEGER,
28     queuecallerabandon: {
29       type: DataTypes.BOOLEAN,
30       defaultValue: false
31     },
32     queuecallerabandonAt: DataTypes.DATE,
33     queuecallercomplete: {
34       type: DataTypes.BOOLEAN,
35       defaultValue: false
36     },
37     queuecallercompleteAt: DataTypes.DATE,
38     queuecallerexit: {
39       type: DataTypes.BOOLEAN,
40       defaultValue: false
41     },
42     queuecallerexitAt: DataTypes.DATE,
43     queuecallerexitreason: DataTypes.STRING,
44     originalposition: DataTypes.INTEGER,
45     channel: DataTypes.STRING,
46     channelstate: DataTypes.INTEGER,
47     channelstatedesc: DataTypes.STRING,
48     connectedlinenum: DataTypes.STRING,
49     connectedlinename: DataTypes.STRING,
50     language: DataTypes.STRING,
51     accountcode: DataTypes.STRING,
52     context: DataTypes.STRING,
53     exten: DataTypes.STRING,
54     priority: DataTypes.STRING,
55     holdtime: DataTypes.INTEGER
56   }, {
57     tableName: 'report_queue',
58     indexes: [{
59       fields: ['uniqueid']
60     }],
61     associate: function(models) {
62       // SCOPES MANAGEMENT
63       ReportQueue
64         .addScope('queueFilter', function(queues) {
65           return {
66             where: {
67               queue: {
68                 $in: queues
69               }
70             }
71           }
72         });
73
74       ReportQueue
75         .addScope('waiting', {
76           where: {
77             queuecallerleaveAt: null
78           }
79         });
80     }
81   });
82
83   return ReportQueue;
84 };