Built motion from commit bf7fe19.|0.0.148
[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     assigned: {
57       type: DataTypes.BOOLEAN,
58       defaultValue: false
59     },
60     lastAssignedTo: DataTypes.STRING
61   }, {
62     tableName: 'report_queue',
63     indexes: [{
64       fields: ['uniqueid']
65     }],
66     associate: function(models) {
67       // SCOPES MANAGEMENT
68       ReportQueue
69         .addScope('queueFilter', function(queues) {
70           return {
71             where: {
72               queue: {
73                 $in: queues
74               }
75             }
76           }
77         });
78
79       ReportQueue
80         .addScope('waiting', {
81           where: {
82             queuecallerleaveAt: null,
83             queuecallerexit: false
84           }
85         });
86     }
87   });
88
89   return ReportQueue;
90 };