8067431eab677c02dc6223bb449576e921d73b2a
[motion.git] / server / models / voice_queue.js
1 /* jshint indent: 2 */
2
3 module.exports = function(sequelize, DataTypes) {
4   var VoiceQueue = sequelize.define('VoiceQueue', {
5     name: {
6       type: DataTypes.STRING,
7       primaryKey: true,
8       unique: true,
9       validate: {
10         notEmpty: true,
11         is: /^[A-Za-z0-9\.\_]+$/i
12       },
13     },
14     musiconhold: {
15       type: DataTypes.STRING,
16       allowNull: true,
17       defaultValue: 'default'
18     },
19     announce: {
20       type: DataTypes.STRING,
21       allowNull: true,
22       defaultValue: ''
23     },
24     strategy: {
25       type: DataTypes.ENUM('ringall', 'leastrecent', 'fewestcalls', 'random', 'rrmemory', 'linear', 'wrandom', 'rrordered'),
26       allowNull: false,
27       defaultValue: 'ringall'
28     },
29     servicelevel: {
30       type: DataTypes.INTEGER(11),
31       allowNull: true,
32       defaultValue: 0
33     },
34     context: {
35       type: DataTypes.STRING,
36       allowNull: true,
37       defaultValue: null
38     },
39     penaltymemberslimit: {
40       type: DataTypes.INTEGER(11),
41       allowNull: true,
42     },
43     timeout: {
44       type: DataTypes.INTEGER(11),
45       allowNull: true,
46       defaultValue: 15
47     },
48     retry: {
49       type: DataTypes.INTEGER(11),
50       allowNull: true,
51       defaultValue: 2
52     },
53     timeoutpriority: {
54       type: DataTypes.STRING,
55       allowNull: true,
56     },
57     weight: {
58       type: DataTypes.INTEGER(11),
59       allowNull: true,
60       defaultValue: 0
61     },
62     wrapuptime: {
63       type: DataTypes.INTEGER(11),
64       allowNull: true,
65       defaultValue: 0
66     },
67     autofill: {
68       type: DataTypes.ENUM('yes', 'no'),
69       allowNull: true,
70       defaultValue: 'yes'
71     },
72     autopause: {
73       type: DataTypes.ENUM('yes', 'no', 'all'),
74       allowNull: true,
75       defaultValue: 'no'
76     },
77     autopausedelay: {
78       type: DataTypes.INTEGER(11),
79       allowNull: true,
80     },
81     autopausebusy: {
82       type: DataTypes.ENUM('yes', 'no'),
83       allowNull: true,
84       defaultValue: 'no'
85     },
86     autopauseunavail: {
87       type: DataTypes.ENUM('yes', 'no'),
88       allowNull: true,
89       defaultValue: 'no'
90     },
91     maxlen: {
92       type: DataTypes.INTEGER(11),
93       allowNull: true,
94       defaultValue: 0
95     },
96     setinterfacevar: {
97       type: DataTypes.ENUM('yes', 'no'),
98       allowNull: true,
99       defaultValue: 'no'
100     },
101     setqueueentryvar: {
102       type: DataTypes.ENUM('yes', 'no'),
103       allowNull: true,
104       defautValue: 'no'
105     },
106     setqueuevar: {
107       type: DataTypes.ENUM('yes', 'no'),
108       allowNull: true,
109       defaultValue: 'no'
110     },
111     membermacro: {
112       type: DataTypes.STRING,
113       allowNull: true,
114     },
115     membergosub: {
116       type: DataTypes.STRING,
117       allowNull: true,
118     },
119     announce_frequency: {
120       type: DataTypes.INTEGER(11),
121       allowNull: true,
122       defaultValue: 0
123     },
124     min_announce_frequency: {
125       type: DataTypes.INTEGER(11),
126       allowNull: true,
127       defaultValue: 0
128     },
129     periodic_announce_frequency: {
130       type: DataTypes.INTEGER(11),
131       allowNull: true,
132       defaultValue: 0
133     },
134     random_periodic_announce: {
135       type: DataTypes.ENUM('yes', 'no'),
136       allowNull: true,
137       defaultValue: 'no'
138     },
139     relative_periodic_announce: {
140       type: DataTypes.ENUM('yes', 'no'),
141       allowNull: true,
142       defaultValue: 'yes'
143     },
144     announce_holdtime: {
145       type: DataTypes.ENUM('yes', 'no', 'once'),
146       allowNull: true,
147       defaultValue: 'no'
148     },
149     announce_position: {
150       type: DataTypes.STRING,
151       allowNull: true,
152       defaultValue: 'no'
153     },
154     announce_to_first_user: {
155       type: DataTypes.ENUM('yes', 'no'),
156       allowNull: true,
157     },
158     announce_position_limit: {
159       type: DataTypes.INTEGER(11),
160       allowNull: true,
161     },
162     announce_round_seconds: {
163       type: DataTypes.ENUM('0', '5', '10', '15', '20', '30'),
164       allowNull: true,
165       defaultValue: '0'
166     },
167     monitor_format: {
168       type: DataTypes.STRING,
169       allowNull: true,
170       defaultValue: ''
171     },
172     monitor_type: {
173       type: DataTypes.STRING,
174       allowNull: true,
175     },
176     queue_youarenext: {
177       type: DataTypes.STRING,
178       allowNull: true,
179       defaultValue: null
180     },
181     queue_thereare: {
182       type: DataTypes.STRING,
183       allowNull: true,
184       defaultValue: null
185     },
186     queue_callswaiting: {
187       type: DataTypes.STRING,
188       allowNull: true,
189       defaultValue: null
190     },
191     queue_holdtime: {
192       type: DataTypes.STRING,
193       allowNull: true,
194       defaultValue: null
195     },
196     queue_minute: {
197       type: DataTypes.STRING,
198       allowNull: true,
199       defaultValue: null
200     },
201     queue_minutes: {
202       type: DataTypes.STRING,
203       allowNull: true,
204       defaultValue: null
205     },
206     queue_seconds: {
207       type: DataTypes.STRING,
208       allowNull: true,
209       defaultValue: null
210     },
211     queue_thankyou: {
212       type: DataTypes.STRING,
213       allowNull: true,
214       defaultValue: null
215     },
216     queue_reporthold: {
217       type: DataTypes.STRING,
218       allowNull: true,
219     },
220     queue_quantity1: {
221       type: DataTypes.STRING,
222       allowNull: true
223     },
224     queue_quantity2: {
225       type: DataTypes.STRING,
226       allowNull: true
227     },
228     queue_periodic_announce: {
229       type: DataTypes.STRING,
230       allowNull: true
231     },
232     queue_less_than: {
233       type: DataTypes.STRING,
234       allowNull: true
235     },
236     periodic_announce: {
237       type: DataTypes.STRING,
238       allowNull: true,
239       defaultValue: ''
240     },
241     joinempty: {
242       type: DataTypes.STRING,
243       allowNull: true,
244       defaultValue: 'yes'
245     },
246     leavewhenempty: {
247       type: DataTypes.STRING,
248       allowNull: true,
249       defaultValue: 'no'
250     },
251     reportholdtime: {
252       type: DataTypes.ENUM('yes', 'no'),
253       allowNull: true,
254       defaultValue: 'no'
255     },
256     ringinuse: {
257       type: DataTypes.ENUM('yes', 'no'),
258       allowNull: true,
259       defaultValue: 'no'
260     },
261     memberdelay: {
262       type: DataTypes.INTEGER(11),
263       allowNull: true,
264       defaultValue: 0
265     },
266     timeoutrestart: {
267       type: DataTypes.ENUM('yes', 'no'),
268       allowNull: true,
269       defaultValue: 'no'
270     },
271     defaultrule: {
272       type: DataTypes.STRING,
273       allowNull: true,
274     },
275     description: {
276       type: DataTypes.STRING,
277       allowNull: true,
278     },
279     acw: {
280       type: DataTypes.BOOLEAN,
281       defaultValue: 0
282     },
283     acwTimeout: {
284       type: DataTypes.INTEGER(11),
285       defaultValue: 10
286     }
287   }, {
288     tableName: 'voice_queues',
289     associate: function(models) {
290       VoiceQueue.belongsToMany(models.User, {
291         through: models.UserHasVoiceQueue,
292         foreignKey: 'queue',
293         required: false
294       });
295       VoiceQueue.belongsToMany(models.User, {
296         through: models.UserHasVoiceQueuePermit,
297         as: 'PVoiceQueues'
298       });
299     }
300   });
301
302   VoiceQueue.beforeUpdate(function(updatedQueue) {
303     if (updatedQueue.changed('name')) {
304       throw new Error("You can't modify a queue name");
305     }
306   });
307
308   return VoiceQueue;
309 };