3 var _ = require('lodash');
4 var Util = require('./util');
5 var Voice = require('./voice');
6 var Mail = require('./mail');
7 var Chat = require('./chat');
8 var Cm = require('./cm');
9 var Trigger = require('../../models').Trigger;
10 var ReportAgent = require('../../models').ReportAgent;
11 var MailMessage = require('../../models').MailMessage;
13 module.exports = function () {
15 var util = new Util();
16 var voice = new Voice();
17 var chat = new Chat();
18 var mail = new Mail();
23 .then(function (triggers) {
24 synchTriggers(triggers);
25 console.log('Triggers are ', triggers.length);
26 ReportAgent.afterCreate(function (doc) {
27 var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
30 console.log('After agent create, Actions are ', actions.length);
31 execActions(actions, doc, 'voice', util, voice, mail, cm);
33 ReportAgent.afterUpdate(function (doc) {
34 var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
37 console.log('After agent update, Actions are ', actions.length);
38 execActions(actions, doc, 'voice', util, voice, mail, cm);
40 MailMessage.afterCreate(function (doc) {
41 if (doc.status === 'RECEIVED') {
42 var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
45 execActions(actions, doc, 'mail', util, voice, mail, cm);
49 .catch(function (err) {
55 function execActions(actions, doc, channel, util, voice, mail, cm) {
56 actions.forEach(function (rule) {
57 console.log('Executing action "' + rule.field.value + '"');
58 switch (rule.field.value) {
59 case 'contactManager':
60 cm.manageContact(doc.dataValues, channel);
63 mail.sendTemplate(rule.data, rule.data2);
70 function synchTriggers(triggers) {
71 Trigger.afterCreate(function (doc) {
72 updateCollection(triggers, doc);
73 console.log('After create, Triggers are ', triggers.length);
75 Trigger.afterUpdate(function (doc) {
76 updateCollection(triggers, doc);
77 console.log('After update, Triggers are ', triggers.length);
79 Trigger.afterDestroy(function (doc) {
83 console.log('After destroy, Triggers are ', triggers.length);
87 function updateCollection(collection, doc) {
88 var oldItem = _.find(collection, {
91 var index = collection.indexOf(oldItem);
93 _.merge(collection[index], doc);
95 collection.unshift(doc);