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