Tuesday, 26 March 2019

Email Recipients add on Email entity based on From recipients

function removeReceiverAtTo() {
    var parentActivityID = null;
    var Direction = null;
    var subject = null;
    var status = null;
    var isDirty = Xrm.Page.data.entity.getIsDirty();

    if (Xrm.Page.getAttribute("statuscode").getValue() != null || Xrm.Page.getAttribute("statuscode").getValue() != "") {

        status = Xrm.Page.getAttribute("statuscode").getValue();
    }
    if (Xrm.Page.getAttribute("directioncode").getValue() != null || Xrm.Page.getAttribute("directioncode").getValue() != "") {

        Direction = Xrm.Page.getAttribute("directioncode").getValue();
    }
    if (isDirty) {
        if (status == 1 && Direction == true) {
            if (Xrm.Page.getAttribute("tec_action").getValue() != null || Xrm.Page.getAttribute("tec_action").getValue() != "") {
                // Status - 1  - Draft
                getDomainValue();
                Xrm.Page.getAttribute("tec_action").setValue(null);
            }

        }
    }
    else {
        if (status == 1 && Direction == true) {
            if (Xrm.Page.getAttribute("tec_action").getValue() != null || Xrm.Page.getAttribute("tec_action").getValue() != "") {
                // Status - 1  - Draft
                getDomainValue();
                Xrm.Page.getAttribute("tec_action").setValue(null);
            }

        }
    }
}

function retrieveReqCallBack(EmailAddressFinal) {

    var hostName = EmailAddressFinal.split(";");
    var Domain = false;
    var NonDomain = false;
    var hNLength = hostName.length - 1;
    while (hNLength >= 0) {
        var item = hostName[hNLength];
        if (item != null && item != "") {
            if (!item.includes("domain.in") || !item.includes("domain.net")) {
                Domain = false;
                NonDomain = true;
                break;
            }
        }
        hNLength = hNLength - 1;
    }
    CheckDomainorNonDomain(Domain, NonDomain);
}

function CheckDomainorNonDomain(Domain, nonDomain) {
    if ((Domain == false || Domain == "false") && (nonDomain == true || nonDomain == "true")) {

        //var unresolvedemail = "email_1_nonDomain@nondomain.com";

        //var obj = new Object(); //create the unresolved object

        //obj.name = unresolvedemail;

        //obj.category = 3;

        //obj.data = unresolvedemail;

        //obj.type = "9206";

        var queueGuid = "394B4273-BD7A-E811-80C5-00155D668D41";
        var queueName = "Email_nonDomain";
        var entityName = "queue";

        var lookup = new Array();
        lookup[0] = new Object();
        lookup[0].id = queueGuid;
        lookup[0].name = queueName;
        lookup[0].entityType = entityName;

        var fromField = Xrm.Page.getAttribute("from");

        var fromValue = fromField.getValue();

        if (fromValue != null) {

            Xrm.Page.getAttribute("from").setValue(null);
            Xrm.Page.getAttribute("from").setValue(lookup);
            //fromField.setValue([obj]); //if 'from' field is null, just override it
            // Xrm.Page.data.entity.save();

        }

    }
    else {

        if (Xrm.Page.data.entity.attributes.get("regardingobjectid").getValue() != null) {
            var regardingField = Xrm.Page.getAttribute("regardingobjectid").getValue();

            var lookupItem = new Object();

            var RegardingId = regardingField[0].id;

            var RegardingName = regardingField[0].name;

            var EntityName = regardingField[0].entityType;

            if (EntityName == "Lead" || EntityName == "lead") {

                //var unresolvedemail = "emailLead_Dmain@tectura.com";

                //var obj = new Object(); //create the unresolved object

                //obj.name = unresolvedemail;

                //obj.category = 3;

                //obj.data = unresolvedemail;

                //obj.type = "9206";

                var queueGuid = "8F6F5A5E-C17A-E811-80C5-00155D668D41";
                var queueName = "Email_Lead_Domain";
                var entityName = "queue";

                var lookup = new Array();
                lookup[0] = new Object();
                lookup[0].id = queueGuid;
                lookup[0].name = queueName;
                lookup[0].entityType = entityName;

                var fromField = Xrm.Page.getAttribute("from");

                var fromValue = fromField.getValue();

                if (fromValue != null) {

                    Xrm.Page.getAttribute("from").setValue(null);
                    Xrm.Page.getAttribute("from").setValue(lookup);
                    // fromField.setValue([obj]); //if 'from' field is null, just override it

                }
            }
            else if (EntityName == "Incident" || EntityName == "incident") {
                //var unresolvedemail = "emailIncident_Domain@nonDomain.com";

                //var obj = new Object(); //create the unresolved object

                //obj.name = unresolvedemail;

                //obj.category = 3;

                //obj.data = unresolvedemail;

                //obj.type = "9206";

                var queueGuid = "CEFB6ACF-C07A-E811-80C5-00155D668D41";
                var queueName = "Email_Case_Domain";
                var entityName = "queue";

                var lookup = new Array();
                lookup[0] = new Object();
                lookup[0].id = queueGuid;
                lookup[0].name = queueName;
                lookup[0].entityType = entityName;

                var fromField = Xrm.Page.getAttribute("from");

                var fromValue = fromField.getValue();

                if (fromValue != null) {

                    Xrm.Page.getAttribute("from").setValue(null);
                    Xrm.Page.getAttribute("from").setValue(lookup);
                    //fromField.setValue([obj]); //if 'from' field is null, just override it

                }
            }
        }
    }
    //Xrm.Page.data.entity.save();
}

function getDomainValue() {
    //For To Party
    var serverUrl = "http://" + window.location.host + "/" + Xrm.Page.context.getOrgUniqueName();
    var tofield = Xrm.Page.getAttribute("to").getValue();
    var fromfield = Xrm.Page.getAttribute("from").getValue();

    if (tofield != null) {
        var lookupData = new Array();
        var i = 0;
        var lens = tofield.length;
        if (lens >= 1) {
            //Xrm.Page.getAttribute("to").setValue(null);
            var len = tofield.length - 1;
            var top = tofield[len];
            var EmailAddressFinal = "";
            var EmailAddress = "";
            while (len >= 0) {
                if (tofield[len].name != fromfield[0].name) {

                    var lookupItem = new Object();
                    lookupItem.id = tofield[len].id;
                    lookupItem.name = tofield[len].name;
                    lookupItem.type = tofield[len].type;
                    lookupData[len] = lookupItem;


                    if (tofield[len].entityType == "contact") {

                        var oDataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
                        var retrieveReq = new XMLHttpRequest();
                        var Odata = oDataPath + "/ContactSet?$select=EMailAddress1&$filter=ContactId eq guid'" + lookupItem.id + "'";
                        retrieveReq.open("GET", Odata, false);
                        retrieveReq.setRequestHeader("Accept", "application/json");
                        retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                        // retrieveReq.onreadystatechange = function () { retrieveReqCallBack(this); };
                        retrieveReq.send();
                        if (retrieveReq.readyState == 4 /* complete */) {
                            var retrieved = this.parent.JSON.parse(retrieveReq.responseText).d;
                            EmailAddress = retrieved.results[0].EMailAddress1;
                            EmailAddressFinal = EmailAddressFinal.concat(EmailAddress + ";");

                            len = len - 1;
                        }
                    }
                    else {

                        EmailAddress = lookupItem.name;
                        EmailAddressFinal = EmailAddressFinal.concat(EmailAddress + ";");

                        len = len - 1;
                    }

                }
                else {

                    len = len - 1;
                }
            }
            retrieveReqCallBack(EmailAddressFinal);
        }
    }
}