3 var _ = require('lodash');
4 var Util = require('./util');
5 var Voice = require('./voice');
6 var Mail = require('./mail');
7 var Cm = require('./cm');
8 var Trigger = require('../../models').Trigger;
9 var ReportAgent = require('../../models').ReportAgent;
10 var MailMessage = require('../../models').MailMessage;
12 module.exports = function() {
14 var util = new Util();
15 var voice = new Voice();
16 var mail = new Mail();
21 .then(function(triggers) {
22 synchTriggers(triggers);
23 console.log('Triggers are ', triggers.length);
24 ReportAgent.afterCreate(function(doc) {
25 var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
28 console.log('After agent create, Actions are ', actions.length);
29 execActions(actions, doc, 'voice', util, voice, mail, cm);
31 ReportAgent.afterUpdate(function(doc) {
32 var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
35 console.log('After agent update, Actions are ', actions.length);
36 execActions(actions, doc, 'voice', util, voice, mail, cm);
38 MailMessage.afterCreate(function(doc) {
39 if (doc.status === 'RECEIVED') {
40 var actions = util.getActionsByTriggers(doc, _.filter(triggers, {
43 execActions(actions, doc, 'mail', util, voice, mail, cm);
47 .catch(function(err) {
53 function execActions(actions, doc, channel, util, voice, mail, cm) {
54 actions.forEach(function(rule) {
55 console.log('Executing action "' + rule.field.value + '"');
56 switch (rule.field.value) {
57 case 'contactManager':
58 cm.manageContact(doc.dataValues, channel);
61 mail.sendTemplate(rule.data, rule.data2);
68 function synchTriggers(triggers) {
69 Trigger.afterCreate(function(doc) {
70 updateCollection(triggers, doc);
71 console.log('After create, Triggers are ', triggers.length);
73 Trigger.afterUpdate(function(doc) {
74 updateCollection(triggers, doc);
75 console.log('After update, Triggers are ', triggers.length);
77 Trigger.afterDestroy(function(doc) {
81 console.log('After destroy, Triggers are ', triggers.length);
85 function updateCollection(collection, doc) {
86 var oldItem = _.find(collection, {
89 var index = collection.indexOf(oldItem);
91 _.merge(collection[index], doc);
93 collection.unshift(doc);