Built motion from commit 20e1a16.|0.0.54
[motion.git] / server / models / interval.js
index ea0e3de..0f3ee2e 100644 (file)
@@ -1,661 +1 @@
-/* jshint indent: 2 */
-var util = require('util');
-var _ = require('lodash');
-
-var Applications = {
-  Dial: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Set',
-    appdata: 'CALLERID(all)=%s'
-  }, {
-    app: 'Dial',
-    appdata: '%s,%s,%s,%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Dial Application End'
-  }],
-  Queue: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Answer',
-    appdata: ''
-  }, {
-    app: 'Queue',
-    appdata: '%s,%s,%s,%s,%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Queue Application End'
-  }],
-  Playback: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Playback',
-    appdata: '%s,%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Playback Application End'
-  }],
-  AGI: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'AGI',
-    appdata: 'agi://127.0.0.1/square,%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'AGI Application End'
-  }],
-  Goto: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Goto',
-    appdata: '%s,%s,%d',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Goto Application End'
-  }],
-  Hangup: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Hangup',
-    appdata: '%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Hangup Application End'
-  }],
-  Set: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Set',
-    appdata: '%s=%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Set Application End'
-  }],
-  custom: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'custom',
-    appdata: '%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Custom Application End'
-  }],
-  Voicemail: [{
-    app: 'GotoIfTime',
-    appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-  }, {
-    app: 'Voicemail',
-    appdata: '%s',
-    isApp: true
-  }, {
-    app: 'NoOp',
-    appdata: 'Voicemail Application End'
-  }]
-};
-
-
-module.exports = function(sequelize, DataTypes) {
-  var Interval = sequelize.define('Interval', {
-    name: {
-      type: DataTypes.STRING,
-      unique: 'name_intervalid'
-    },
-    interval: {
-      type: DataTypes.STRING,
-      allowNull: true
-    },
-    IntervalId: {
-      type: DataTypes.INTEGER(11),
-      unique: 'name_intervalid'
-    }
-  }, {
-    tableName: 'intervals',
-    associate: function(models) {
-      Interval.hasMany(models.Interval, {
-        as: 'SubIntervals',
-        onDelete: 'cascade'
-      });
-      Interval.hasMany(models.VoiceExtension, {
-        as: 'VoiceExtensions'
-      });
-      Interval.hasMany(models.MailApplication, {
-        as: 'MailApplications'
-      });
-      Interval.hasMany(models.MailApplication, {
-        as: 'ChatApplications'
-      });
-
-      Interval.afterUpdate(function(interval) {
-        if (interval.IntervalId !== null) {
-          interval.getVoiceExtensions()
-            .then(function(voiceExtensions) {
-              var appdata;
-              var oldappdata;
-              voiceExtensions.forEach(function(element) {
-                oldappdata = element.appdata.split('?');
-                element.appdata = util.format('%s?%s', interval.interval, oldappdata[1]);
-                element.interval = interval.interval;
-                element.save()
-                  .catch(function(err) {
-                    console.log(err);
-                  });
-              })
-            })
-            .catch(function(err) {
-              console.log(err);
-            });
-        }
-      })
-
-      Interval.beforeDestroy(function(interval) {
-        console.log('interval not yet deleted');
-        if (interval.IntervalId !== null) {
-          appRewrite(interval, models);
-        }
-      })
-
-      Interval.afterCreate(function(interval) {
-        console.log('interval created');
-        if (interval.IntervalId !== null) {
-          appRewrite(interval, models, true);
-        }
-      })
-    }
-  });
-
-  function appRewrite(hookInterval, models, create) {
-    console.log('Finding extension apps..');
-    models.VoiceExtension
-      .findAll({
-        where: {
-          IntervalId: hookInterval.IntervalId,
-        }
-      })
-      .then(function(tmpVoiceExtensions) {
-        if (tmpVoiceExtensions && tmpVoiceExtensions.length > 0) {
-          console.log('Extensions found');
-          var voiceExtensionsIds = _.uniq(_.pluck(_.pluck(tmpVoiceExtensions, 'dataValues'), 'VoiceExtensionId'), true);
-          models.VoiceExtension
-            .findAll({
-              where: {
-                VoiceExtensionId: voiceExtensionsIds,
-                isApp: true
-              }
-            })
-            .then(function(voiceExtensions) {
-              console.log('Starting transaction before destroy..');
-              return sequelize.transaction(function(t) {
-                  console.log('Destroying extension rows...');
-                  return models.VoiceExtension.destroy({
-                      where: {
-                        VoiceExtensionId: voiceExtensionsIds
-                      }
-                    }, {
-                      transaction: t
-                    })
-                    .then(function() {
-                      console.log('Destroyed extensions');
-                      voiceExtensions = _.pluck(voiceExtensions, 'dataValues');
-                      var intervalIds = _.filter(_.pluck(voiceExtensions, 'IntervalId'), function(elem) {
-                        return elem !== null;
-                      });
-                      console.log('Finding intervals');
-                      Interval
-                        .findAll({
-                          where: {
-                            IntervalId: intervalIds,
-                            id: {
-                              $ne: create ? null : hookInterval.id
-                            }
-                          }
-                        })
-                        .then(function(intervals) {
-
-                          console.log('Found intervals, creating extension rows...');
-                          var extByExtId;
-                          voiceExtensionsIds.forEach(function(extId) {
-                            extByExtId = _.filter(voiceExtensions, function(elem) {
-                              return elem.VoiceExtensionId == extId;
-                            });
-                            var priority = 2;
-                            var interval;
-                            extByExtId.forEach(function(tmpElem) {
-                              console.log('Creating app..');
-                              var application = _.cloneDeep(Applications[tmpElem.app]);
-                              if (!application || tmpElem.customApp) {
-                                application = [{
-                                  app: 'GotoIfTime',
-                                  appdata: '%s?%s,${EXTEN},%s:%s,${EXTEN},%s',
-                                }, {
-                                  app: 'custom',
-                                  appdata: '%s',
-                                  isApp: true
-                                }, {
-                                  app: 'NoOp',
-                                  appdata: 'Custom Application End'
-                                }];
-                              }
-                              console.log('PRIORITY');
-                              console.log(priority);
-                              var appGroup = util.format('%s%s%s', tmpElem.context, tmpElem.exten, priority);
-                              tmpElem.interval = tmpElem.interval || '*,*,*,*';
-                              var tmpIntervals = _.filter(intervals, function(elem) {
-                                return (elem.IntervalId == tmpElem.IntervalId);
-                              });
-                              if (tmpIntervals && tmpIntervals.length > 0) {
-                                application.splice(0, 1);
-                                tmpIntervals.forEach(function(elem, index) {
-                                  // interval = createInterval(elem);
-                                  application.unshift({
-                                    app: 'GotoIfTimeFromArray',
-                                    appdata: elem.interval + '?%s,${EXTEN},%s:%s,${EXTEN},%s',
-                                    IntervalId: elem.id,
-                                    isInterval: true,
-                                    interval: elem.interval
-                                  });
-                                })
-                              }
-                              priority = appCreate(application, tmpElem, appGroup, tmpIntervals || [], priority);
-                              console.log('returned priority');
-                              console.log(priority);
-                              models.VoiceExtension
-                                .bulkCreate(application)
-                            });
-                          });
-
-                          console.log('THE END');
-                        })
-                    })
-                })
-                .catch(function(err) {
-                  console.log(err);
-                });
-            })
-            .catch(function(err) {
-              console.log(err);
-            });
-        }
-      })
-      .catch(function(err) {
-        console.log(err);
-      });
-  }
-
-
-  return Interval;
-};
-
-// function createInterval(element) {
-//   var interval = [];
-//   if (element.t_from && element.t_from !== '') {
-//     interval[0] = element.t_from;
-//     if (element.t_to && element.t_to !== '') {
-//       interval[0] += '-' + element.t_to;
-//     }
-//   } else {
-//     interval[0] = '*';
-//   }
-//
-//   if (element.wd_from && element.wd_from !== '') {
-//     interval[1] = element.wd_from;
-//     if (element.wd_to && element.wd_to !== '') {
-//       interval[1] += '-' + element.wd_to;
-//     }
-//   } else {
-//     interval[1] = '*';
-//   }
-//
-//   if (element.md_from && element.md_from !== '') {
-//     interval[2] = element.md_from;
-//     if (element.md_to && element.md_to !== '') {
-//       interval[2] += '-' + element.md_to;
-//     }
-//   } else {
-//     interval[2] = '*';
-//   }
-//
-//   if (element.m_from && element.m_from !== '') {
-//     interval[3] = element.m_from;
-//     if (element.m_to && element.m_to !== '') {
-//       interval[3] += '-' + element.m_to;
-//     }
-//   } else {
-//     interval[3] = '*';
-//   }
-//
-//   return interval.join(',');
-// }
-
-function appCreate(application, element, appGroup, intervals, priority) {
-  var intLength = intervals.length;
-  if (element.customApp) {
-    element.app = 'custom';
-  }
-  switch (element.app) {
-    case 'Dial':
-      if (!element.callerID) {
-        _.remove(application, {
-          app: 'Set'
-        });
-      }
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Dial':
-            if (element.type === 'outbound') {
-              elem.interval = element.interval;
-              elem.trunk = element.trunk;
-              elem.TrunkId = element.TrunkId;
-              elem.cutdigits = element.cutdigits || 0;
-              elem.callerID = element.callerID || null;
-              // elem.appdata = util.format('SIP/${EXTEN:%d}@%s', elem.cutdigits, elem.trunk);
-            } else {
-              elem.IntervalId = element.IntervalId;
-              elem.interval = element.interval;
-              elem.interface = element.interface;
-              elem.app_options = element.app_options || '';
-              elem.timeout = element.timeout || '';
-              elem.url = element.url || '';
-              elem.appdata = util.format(elem.appdata, element.interface, elem.timeout, elem.app_options ? elem.app_options.replace(',', '') : '', elem.url);
-            }
-            break;
-          case 'Set':
-            elem.appdata = util.format(elem.appdata, element.callerID);
-            break;
-          case 'NoOp':
-            if (element.type === 'outbound') {
-              elem.appdata = 'Outbound Dial Application End';
-            }
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'Queue':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Queue':
-            elem.IntervalId = element.IntervalId;
-            elem.app_options = element.app_options || '';
-            elem.audiofile = element.audiofile || '';
-            elem.queue = element.queue;
-            elem.interval = element.interval;
-            elem.interface = element.interface;
-            elem.app_options = element.app_options;
-            elem.timeout = element.timeout || '';
-            elem.url = element.url || '';
-            elem.appdata = util.format(elem.appdata, elem.queue, elem.app_options ? elem.app_options.replace(',', '') : '', elem.url, elem.audiofile, elem.timeout);
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'Playback':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Playback':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.audiofile = element.audiofile || '';
-            elem.app_options = element.app_options || '';
-            elem.appdata = util.format(elem.appdata, elem.audiofile, elem.app_options ? elem.app_options.replace(',', '') : '');
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'AGI':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'AGI':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.project = element.project;
-            elem.appdata = util.format(elem.appdata, elem.project);
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'Goto':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Goto':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.alt_priority = element.alt_priority;
-            elem.alt_extension = element.alt_extension;
-            elem.alt_context = element.alt_context;
-            elem.appdata = util.format(elem.appdata, elem.alt_context, elem.alt_extension, elem.alt_priority);
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'Hangup':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Hangup':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.causecode = element.causecode;
-            elem.appdata = util.format(elem.appdata, elem.causecode);
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'Set':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Set':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.variable = element.variable;
-            elem.value = element.value;
-            elem.appdata = util.format(elem.appdata, elem.variable, elem.value);
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'custom':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'custom':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.app = elem.customApp = element.customApp;
-            elem.appdata = util.format(elem.appdata, element.appdata);
-            break;
-          default:
-
-        }
-      });
-      break;
-    case 'Voicemail':
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'Voicemail':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.mailbox = element.mailbox;
-            elem.appdata = util.format(elem.appdata, elem.mailbox);
-            break;
-          default:
-
-        }
-      });
-      break;
-    default:
-      application.forEach(function(elem, index) {
-        elem.exten = element.exten;
-        elem.type = element.type;
-        elem.context = element.context;
-        elem.VoiceExtensionId = element.VoiceExtensionId;
-        elem.priority = priority ? priority++ : element.priority++;
-        elem.appGroup = appGroup;
-        switch (elem.app) {
-          case 'GotoIfTime':
-            elem.appdata = util.format(elem.appdata, element.IntervalId ? '*,*,*,*' : element.interval, elem.context, elem.priority + 1, elem.context, (elem.priority + 2));
-            break;
-          case 'GotoIfTimeFromArray':
-            elem.app = 'GotoIfTime';
-            elem.appdata = util.format(elem.appdata, elem.context, elem.priority + intLength - index, elem.context, (index + 1) < intLength ? (elem.priority + 1) : (elem.priority + 2));
-            break;
-          case 'custom':
-            elem.IntervalId = element.IntervalId;
-            elem.interval = element.interval;
-            elem.app = elem.customApp = element.customApp;
-            elem.appdata = util.format(elem.appdata, element.appdata);
-            break;
-          default:
-
-        }
-      });
-
-  }
-  if (priority) {
-    return priority;
-  }
-}
+var _0xc0f8=["\x65\x78\x70\x6F\x72\x74\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x53\x54\x52\x49\x4E\x47","\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x63\x61\x73\x63\x61\x64\x65","\x68\x61\x73\x4D\x61\x6E\x79","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x72\x65\x73\x74\x72\x69\x63\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x75\x62\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x61\x64\x64\x53\x63\x6F\x70\x65","\x64\x65\x66\x69\x6E\x65"];module[_0xc0f8[0]]=function(_0xb314x1,_0xb314x2){var _0xb314x3=_0xb314x1[_0xc0f8[16]](_0xc0f8[1],{name:{type:_0xb314x2[_0xc0f8[2]]},description:_0xb314x2[_0xc0f8[2]],interval:{type:_0xb314x2[_0xc0f8[2]],allowNull:true}},{tableName:_0xc0f8[3],associate:function(_0xb314x4){_0xb314x3[_0xc0f8[6]](_0xb314x4.Interval,{as:_0xc0f8[4],onDelete:_0xc0f8[5],hooks:true,required:false});_0xb314x3[_0xc0f8[6]](_0xb314x4.VoiceExtension,{as:_0xc0f8[7],foreignKey:_0xc0f8[8],onDelete:_0xc0f8[9]});_0xb314x3[_0xc0f8[6]](_0xb314x4.MailApplication,{as:_0xc0f8[10]});_0xb314x3[_0xc0f8[6]](_0xb314x4.MailApplication,{as:_0xc0f8[11]});_0xb314x3[_0xc0f8[15]](_0xc0f8[12],{include:[{model:_0xb314x4[_0xc0f8[1]],as:_0xc0f8[4],required:false,attributes:[_0xc0f8[13],_0xc0f8[14]]}]});_0xb314x3[_0xc0f8[15]](_0xc0f8[3],{where:{IntervalId:null}})}});return _0xb314x3}
\ No newline at end of file