3 var _ = require('lodash');
4 var config = require('../environment');
5 var moment = require('moment');
6 // var stringifyObject = require('stringify-object');
8 var sequelize = require('../../models').sequelize;
9 var Automation = require('../../models').Automation;
10 var MailRoom = require('../../models').MailRoom;
11 var Settings = require('../../models').Settings;
12 var automationTimeout;
13 var activeAutomations = {};
15 function getTimeout() {
18 .then(function(result) {
19 automationTimeout = result.automation_timeout;
21 .catch(function(err) {
26 function executeAutomation(mailAutomation) {
31 var conditionsGroup = JSON.parse(mailAutomation.conditions).group;
32 var actionsGroup = JSON.parse(mailAutomation.actions).group;
33 var subConditions = {};
34 var mainOp = conditionsGroup.boolean === 'AND' ? '$and' : '$or';
35 query.where[mainOp] = [];
36 conditionsGroup.rules.forEach(function(rule) {
38 // console.log('normal rule');
39 query.where[mainOp].push(getCondition(rule));
40 } else if (rule.group) {
41 // console.log('subgroup');
42 var subOp = rule.group.boolean === 'AND' ? '$and' : '$or';
44 tempGroup[subOp] = [];
45 rule.group.rules.forEach(function(subRule) {
46 // console.log('subgroup rule');
47 tempGroup[subOp].push(getCondition(subRule));
49 query.where[mainOp].push(tempGroup);
57 res.forEach(function(mail) {
58 actionsGroup.rules.forEach(function(rule) {
59 switch (rule.field.value) {
61 setStatus(mail.id, rule.data);
68 .catch(function(err) {
73 function setStatus(ticketId, newStatus) {
81 .catch(function(err) {
86 function getCondition(rule) {
88 switch (rule.field.value) {
90 switch (rule.operator) {
92 result[rule.field.value] = rule.data;
95 result[rule.field.value] = {
103 var compareDate = moment().subtract(parseInt(rule.data, 10), 'hours').format("YYYY-MM-DD HH:mm:ss");
104 switch (rule.operator) {
106 result[rule.field.value] = {
111 result[rule.field.value] = {
116 result[rule.field.value] = {
121 result[rule.field.value] = {
133 function createInterval(mailAutomation) {
134 activeAutomations['interval' + mailAutomation.id] = setInterval(function() {
135 executeAutomation(mailAutomation);
136 }, automationTimeout * 1000);
139 module.exports = function() {
142 Automation.afterCreate(function(doc, options) {
146 Automation.afterUpdate(function(doc, options) {
147 clearInterval(activeAutomations['interval' + doc.id]);
151 Automation.afterDelete(function(doc, options) {
152 clearInterval(activeAutomations['interval' + doc.id]);
162 .then(function(mailAutomations) {
164 mailAutomations.forEach(function(mailAutomation) {
165 createInterval(mailAutomation);
168 .catch(function(err) {