Exemple #1
0
function GetOrganisation(company, tenant, cb) {
    logger.debug("DVP-UserService.GetOrganisation Internal method ");
    var jsonString;
    Org.findOne({ tenant: tenant, id: company }, function (err, org) {
        if (err) {
            return cb(false, undefined);
        } else {
            if (org) {
                return cb(true, org);
            } else {
                return cb(false, undefined);
            }
        }

    });
}
    var send = function (data) {

        /////////////////////////////////////////////send message(template)/////////////////////////////////////////////
        console.log("-------- Step 1 -------------");
        Org.findOne({ tenant: data.message.tenant, id: data.message.company }, function (err, org) {
            console.log("-------- Step 2 -------------");
            if (err) {

                logger.error("Organization didn't found", err);
                data.ack.acknowledge();

            } else {
                if (org) {
                    console.log("-------- Step 3 -------------");
                    Email.findOne({ company: data.message.company, tenant: data.message.tenant, name: data.message.from }, function (err, email) {
                        console.log("-------- Step 4 -------------");
                         if (err) {

                            logger.error("Organization emails didn't found", err);
                            data.ack.acknowledge();

                        } else {

                            var mailOptions = {
                                to: data.message.to,
                                subject: data.message.subject,
                                text: data.message.body,
                                html: data.message.body,
                                ticket: true,
                                engagement: data.message.engagement,
                                headers: {
                                    "X-MC-Subaccount": "veery"
                                }
                            };

                            mailOptions.from = format("{0}@facetone.com", data.message.from);
                            mailOptions.replyTo = format("{0}@{1}.facetone.com", data.message.from, org.companyName);

                            if (email && email.fromOverwrite) {
                                mailOptions.from = email.fromOverwrite;
                                mailOptions.replyTo = email.fromOverwrite;
                                console.log("Overwrite Sender ............");
                            }

                            var attachments = [];

                            if (data.message.attachments && util.isArray(data.message.attachments)) {

                                data.message.attachments.forEach(function (item) {

                                    if (item.url && item.name) {

                                        attachments.push({   // use URL as an attachment
                                            filename: item.name,
                                            path: item.url
                                        });
                                    }

                                });

                            }

                            if (util.isArray(attachments) && attachments.length > 0) {
                                mailOptions.attachments = attachments;
                            }
                            if (data.message.template) {
                                Template.findOne({ name: data.message.template, company: data.message.company, tenant: data.message.tenant }, function (errPickTemplate, resPickTemp) {


                                    if (!errPickTemplate) {

                                        if (resPickTemp && resPickTemp.content && resPickTemp.content.content) {

                                            var compileid = uuid.v4();

                                            var compiled = dust.compile(resPickTemp.content.content, compileid);
                                            dust.loadSource(compiled);
                                            dust.render(compileid, data.message.Parameters, function (errRendered, outRendered) {
                                                if (errRendered) {
                                                    logger.error("Error in rendering " + errRendered);
                                                }
                                                else {

                                                    var renderedTemplate = "";
                                                    var juiceOptions = {
                                                        applyStyleTags: true
                                                    }

                                                    if (resPickTemp.styles.length > 0) {
                                                        for (var i = 0; i < resPickTemp.styles.length; i++) {
                                                            if (i == 0) {
                                                                renderedTemplate = outRendered;
                                                            }

                                                            //console.log(resPickTemp.styles[i].content);
                                                            logger.info("Rendering is success " + resPickTemp.styles[i].content);

                                                            renderedTemplate = juice.inlineContent(renderedTemplate, resPickTemp.styles[i].content, juiceOptions);
                                                            if (i == (resPickTemp.styles.length - 1)) {

                                                                if (resPickTemp.filetype.toLowerCase() == 'html') {
                                                                    mailOptions.html = renderedTemplate;
                                                                } else {
                                                                    mailOptions.text = renderedTemplate;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    else {
                                                        console.log("Rendering Done");

                                                        if (resPickTemp.filetype.toLowerCase() == 'html') {
                                                            mailOptions.html = outRendered;
                                                        } else {
                                                            mailOptions.text = outRendered;
                                                        }

                                                        //SendMail(mailOptions, data);
                                                    }

                                                    if (resPickTemp.content.subject) {

                                                        var compilesubid = uuid.v4();
                                                        var compiledsub = dust.compile(resPickTemp.content.subject, compilesubid);
                                                        dust.loadSource(compiledsub);
                                                        dust.render(compilesubid, data.message.Parameters, function (errsubRendered, outsubRendered) {
                                                            mailOptions.subject = outsubRendered;
                                                            SendMail(mailOptions, data);
                                                        });

                                                    } else {

                                                        SendMail(mailOptions, data);
                                                    }
                                                }
                                            });
                                        } else {
                                            logger.error("No template found");
                                            data.ack.acknowledge();
                                        }
                                    } else {
                                        logger.error("Pick template failed ", errPickTemplate);
                                        data.ack.acknowledge();
                                    }
                                });
                            } else {
                                SendMail(mailOptions, data);
                            }
                        }
                    });



                    /* var mailOptions = {
                         to: data.message.to,
                         subject: data.message.subject,
                         text: data.message.body,
                         html: data.message.body,
                         ticket: true,
                         engagement: data.message.engagement,
                         headers: {
                             "X-MC-Subaccount": "veery"
                         }
                     };
 
                     ///thins to do/////////// get root from deployment/////////////////////////////////////
 
                     var attachments = [];
 
                     if(data.message.attachments && util.isArray(data.message.attachments)){
 
                         data.message.attachments.forEach(function(item){
 
                             if(item.url && item.name){
 
                                 attachments.push({   // use URL as an attachment
                                     filename: item.name,
                                     path: item.url
                                 });
                             }
 
                         });
 
                     }
 
                     if(util.isArray(attachments) && attachments.length > 0) {
                         mailOptions.attachments = attachments;
                     }
 
                     mailOptions.from= format("{0}@veery.cloud", data.message.from);
 
                     mailOptions.replyTo = format("{0}@{1}.veery.cloud", data.message.from, org.companyName);
 
                     if(data.message.template){
                         Template.findOne({name:data.message.template,company:data.message.company,tenant:data.message.tenant},function (errPickTemplate,resPickTemp) {
 
 
                             if(!errPickTemplate){
 
                                 if(resPickTemp && resPickTemp.content &&resPickTemp.content.content){
 
                                     var compileid = uuid.v4();
 
                                     var compiled = dust.compile(resPickTemp.content.content, compileid);
                                     dust.loadSource(compiled);
                                     dust.render(compileid, data.message.Parameters, function(errRendered, outRendered) {
                                         if(errRendered)
                                         {
                                             logger.error("Error in rendering "+ errRendered);
                                         }
                                         else {
 
                                             var renderedTemplate = "";
                                             var juiceOptions = {
                                                 applyStyleTags: true
                                             }
 
                                             if (resPickTemp.styles.length > 0) {
                                                 for (var i = 0; i < resPickTemp.styles.length; i++) {
                                                     if (i == 0) {
                                                         renderedTemplate = outRendered;
                                                     }
 
                                                     //console.log(resPickTemp.styles[i].content);
                                                     logger.info("Rendering is success " + resPickTemp.styles[i].content);
 
                                                     renderedTemplate = juice.inlineContent(renderedTemplate, resPickTemp.styles[i].content, juiceOptions);
                                                     if (i == (resPickTemp.styles.length - 1)) {
 
                                                         if (resPickTemp.filetype.toLowerCase() == 'html') {
                                                             mailOptions.html = renderedTemplate;
                                                         } else {
                                                             mailOptions.text = renderedTemplate;
                                                         }
                                                     }
                                                 }
                                             }
                                             else {
                                                 console.log("Rendering Done");
 
                                                 if (resPickTemp.filetype.toLowerCase() == 'html') {
                                                     mailOptions.html = outRendered;
                                                 } else {
                                                     mailOptions.text = outRendered;
                                                 }
 
                                                 //SendMail(mailOptions, data);
                                             }
 
                                             if (resPickTemp.content.subject) {
 
                                                 var compilesubid = uuid.v4();
                                                 var compiledsub = dust.compile(resPickTemp.content.subject, compilesubid);
                                                 dust.loadSource(compiledsub);
                                                 dust.render(compilesubid, data.message.Parameters, function (errsubRendered, outsubRendered) {
                                                     mailOptions.subject = outsubRendered;
                                                     SendMail(mailOptions, data);
                                                 });
 
                                             } else {
 
                                                 SendMail(mailOptions, data);
                                             }
                                         }
                                     });
                                 }else{
                                     logger.error("No template found");
                                     data.ack.acknowledge();
                                 }
                             }else{
                                 logger.error("Pick template failed ",errPickTemplate);
                                 data.ack.acknowledge();
                             }
                         });
                     }else{
                         SendMail(mailOptions,data);
                     }*/
                    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                } else {

                    logger.error("No Organization found", err);
                    data.ack.acknowledge();
                }
            }
        });
    };
var func = function (connection, data, content) {


    //logger.debug(data.toJSON());
    logger.debug("DVP-SocialConnector.CreateTwitterAccount Internal method ");
    logger.debug(JSON.stringify(data));
    var jsonString;
    var receiver = data.to[0].address;
    var arr = receiver.split("@");

    var ticket_type = 'question';
    var ticket_tags = [];
    var ticket_priority = 'low';


    logger.debug("Reciver - "+ receiver);
    if(arr.length > 1){

        var domain = arr[1];

        var arr1 = domain.split(".");

        var accountname = arr[0];
        logger.debug("Domain - "+ domain);

        if(arr1.length > 2){

            var companyName = arr1[0];

            logger.debug("Company - "+ companyName);

            Org.findOne({companyName: companyName}, function(err, orgs) {
                if (err) {
                    jsonString = messageFormatter.FormatMessage(err, "Get Organisations Failed", false, undefined);
                    logger.error(jsonString);
                }else{
                    jsonString = messageFormatter.FormatMessage(err, "Get Organisations Successful", true, orgs);
                    logger.debug(jsonString);
                    if(orgs){


                        data.created_at = Date.now();
                        data.company = orgs.id;
                        data.tenant = orgs.tenant;



                        Email.findOne({company: orgs.id, tenant: orgs.tenant, name: accountname}, function(err, email) {
                            if (err) {

                                jsonString = messageFormatter.FormatMessage(err, "Get Twitter Failed", false, undefined);
                                //res.end(jsonString);

                            } else {

                                if (email) {

                                    if (email.ticket_type) {
                                        ticket_type = ticket_type;
                                    }

                                    if (email.ticket_tags) {
                                        ticket_tags = ticket_tags;
                                    }

                                    if (email.ticket_priority) {
                                        ticket_priority = ticket_priority;
                                    }
                                }


                                var emailsession = EmailSession(data);

                                emailsession.save(function (err, engage) {
                                    if (err) {
                                        jsonString = messageFormatter.FormatMessage(err, "Email save failed", false, undefined);
                                        logger.error(jsonString);

                                    } else {

                                        logger.info("Email saved successfully ...");

                                        ////////////////////////create engagement and create a ticket////////////////////////////////////////////////
                                        //channel, company, tenant, from, to, direction, session, data, user,channel_id,contact,  cb
                                        CreateEngagement('email', orgs.id,  orgs.tenant, data.from[0].address, data.to[0].address, 'inbound', data. messageId,  data.text,undefined,undefined,undefined,function(isSuccess, result){

                                            if (isSuccess) {
                                                /////////////////////////////////////////////create ticket directly//////////////////////////
                                                //CreateTicket("sms",sessionid,sessiondata["CompanyId"],sessiondata["TenantId"],smsData["type"], smsData["subject"], smsData["description"],smsData["priority"],smsData["tags"],function(success, result){});

                                                if(data.inReplyTo && data.inReplyTo.length > 0){

                                                    try {
                                                        CreateComment('email','text',data.company, data.tenant, data.inReplyTo[0], result, function (done) {
                                                            if (done) {
                                                                logger.debug("comment created successfully");

                                                            }else{
                                                                logger.error("comment creation failed");
                                                            }
                                                        });
                                                    }catch(ex){
                                                        logger.error("Error in comment ", ex);
                                                    }
                                                } else{

                                                    if(data.subject){

                                                        var arr = data.subject.split(/[\s:]+/);
                                                        logger.debug("subject split " + arr);
                                                        if(arr.length > 2 && arr[0] == 'Re'){

                                                            logger.debug("comment");

                                                            try {
                                                                CreateCommentByReference('email','text',data.company, data.tenant, arr[1], result, function (done) {
                                                                    if (done) {
                                                                        logger.debug("comment created successfully");

                                                                    }else{
                                                                        logger.error("comment creation failed");
                                                                    }
                                                                });
                                                            }catch(ex){
                                                                logger.error("Error in comment ", ex);
                                                            }

                                                        }else{

                                                            CreateTicket("email", data. messageId,result.profile,orgs.id, orgs.tenant, ticket_type, data.subject,data.text, ticket_priority,ticket_tags, function (done) {

                                                                if (done) {

                                                                    logger.info("Add Request completed ");
                                                                    jsonString = messageFormatter.FormatMessage(undefined, "Add Request completed", true, undefined);
                                                                    logger.info(jsonString);


                                                                } else {

                                                                    logger.error("Add Request failed ");
                                                                    jsonString = messageFormatter.FormatMessage(undefined, "No Twitter Found", false, undefined);
                                                                    logger.info(jsonString);
                                                                }

                                                            });

                                                        }
                                                    }else {


                                                        CreateTicket("email", data.messageId, result.profile, orgs.id, orgs.tenant, ticket_type, data.subject, data.text, ticket_priority, ticket_tags, function (done) {

                                                            if (done) {

                                                                logger.info("Add Request completed ");
                                                                jsonString = messageFormatter.FormatMessage(undefined, "Add Request completed", true, undefined);
                                                                logger.info(jsonString);


                                                            } else {

                                                                logger.error("Add Request failed " + item.id);
                                                                jsonString = messageFormatter.FormatMessage(undefined, "No Twitter Found", false, undefined);
                                                                logger.info(jsonString);
                                                            }

                                                        });

                                                    }
                                                }

                                                //////////////////////////////////////first check in comments and update them////////////////////////////////////////////////////////////////

                                            } else {

                                                logger.error("Create engagement failed " );
                                                jsonString = messageFormatter.FormatMessage(undefined, "No Twitter Found", false, undefined);
                                                logger.info(jsonString);
                                            }

                                        })
                                    }
                                });
                            }
                        });

                    }
                }

            });
        }
    }

}