﻿<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<!-- dAloor 26Nov2016
Update the page title
Update the jquery and json references.
Update the 4 variables
--- dAloor 26Nov2016 -->

<head>
    <title>IOTAP Report Scheduler : License Activation</title>
    <script src="ClientGlobalContext.js.aspx"></script>
    <script src="iotap_jquery_1.9.1.js" type="text/javascript"></script>
    <script src="iotap_json2.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">

        //UPDATE THESE 	VARIABLES AS REQUIRED
        var solutionName = "ReportScheduler";
        var productName = "Report Scheduler";  //had to add this since the product name in IOTAP CRM has a space
        var licenseEntityName = "iotap_reportschedulerlicense";
        var licenseEntityPluralName = "iotap_reportschedulerlicenses";
        var licenseAppUri = "https://iotap-licensing-portal-production.azurewebsites.net";
        var licenseAppHome = "LicenseActivation.html";
        var settingWebResourceLocation = "/iotap_/Addons/ReportScheduler/ConfigurationPage.html";
        //UPDATE THESE VARIABLES AS REQUIRED


        var ClientCRM = new Object();
        var licenseActivationPage;
        var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
        var eventer = window[eventMethod];
        var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

        eventer( messageEvent, function ( e )
        {
            if ( e.origin == licenseAppUri ) {

                if ( e.data.startsWith( "Load" ) ) {
                    ClientCRM.OrgName = Xrm.Page.context.getOrgUniqueName();
                    IOTAP_AddOn_RetrieveVersion();
                    IOTAP_AddOn_RetrieveSolution();
                    IOTAP_AddOn_RetrieveDeploymentType();
                    IOTAP_AddOn_RetrieveUserInfo();
                    IOTAP_AddOn_RetrieveLicense();

                    var ClientCRMObj = JSON.stringify( ClientCRM );
                    licenseActivationPage.contentWindow.postMessage( ClientCRMObj, licenseAppUri );
                }

                if ( e.data.startsWith( "LicenseActivation" ) ) {
                    var val = e.data.split( '|' );
                    var licenseXml = val[1];

                    var license = new Object();
                    license.iotap_name = solutionName;
                    license.iotap_licensexml = licenseXml;
                    IOTAP_AddOn_CreateRecord( licenseEntityPluralName, license );
                }

                if ( e.data.startsWith( "RefreshLicense" ) ) {
                    var val = e.data.split( '|' );
                    var licenseXml = val[1];

                    var license = new Object();
                    license.iotap_licensexml = licenseXml;
                    IOTAP_AddOn_RetrieveLicense();
                    IOTAP_AddOn_UpdateRecord( licenseEntityPluralName, ClientCRM.LicenseId, license );
                }


            }
        }, false );


        $( document ).ready( function ()
        {
            licenseActivationPage = document.getElementById( 'licenseActivation' );
            licenseActivationPage.src = licenseAppUri + "/" + licenseAppHome;
        } );

        // Retrieve CRM Deployment Type
        IOTAP_AddOn_RetrieveDeploymentType = function ()
        {

            try {
                if ( window.location.protocol == "https:" && String( window.location.hostname ).indexOf( "dynamics.com" ) > 5 )
                    ClientCRM.SKU = "2";  //online
                else
                    ClientCRM.SKU = "1";  //onpremise
            }
            catch ( ex ) {
                throw ex;
            }
        }

        // Retrieve CRM Version
        IOTAP_AddOn_RetrieveVersion = function ()
        {
            var coll;

            try {
                var query = "RetrieveVersion";
                var httpReq = IOTAP_AddOn_CreateHTTPRequest( "GET", query, false );
                httpReq.send( null );

                if ( httpReq.status === 200 ) {
                    ClientCRM.CrmVersion = JSON.parse( httpReq.responseText ).Version;
                }
                return coll;
            }
            catch ( ex ) {
                throw ex;
            }
        }

        // Retrieve Admin User Info
        IOTAP_AddOn_RetrieveUserInfo = function ()
        {
            try {
                var userId = Xrm.Page.context.getUserId().replace( "{", "" ).replace( "}", "" );
                var query = "systemusers?$select=address1_telephone1,firstname,internalemailaddress,lastname,mobilephone,title&$filter=accessmode eq 0 and isdisabled eq false";
                var httpReq = IOTAP_AddOn_CreateHTTPRequest( "GET", query, false );
                httpReq.send( null );

                if ( httpReq.status === 200 ) {
                    var systemUserColl = JSON.parse( httpReq.responseText ).value;
                    ClientCRM.ActiveUserCount = systemUserColl.length;

                    for ( var i = 0; i < systemUserColl.length; i++ ) {
                        //Fetch logged in user details
                        if ( systemUserColl[i].systemuserid.replace( "{", "" ).replace( "}", "" ).toLowerCase() == userId.toLowerCase() ) {
                            ClientCRM.AdminFirstName = systemUserColl[i].firstname;
                            ClientCRM.AdminLastName = systemUserColl[i].lastname;
                            ClientCRM.AdminMobile = systemUserColl[i].mobilephone;
                            ClientCRM.AdminTitle = systemUserColl[i].title;
                            ClientCRM.AdminEmail = systemUserColl[i].internalemailaddress;
                            ClientCRM.AdminPhone = systemUserColl[i].address1_telephone1;
                        }
                    }
                }
            }
            catch ( ex ) {
                throw ex;
            }
        }

        // Retrieve Solution Info
        IOTAP_AddOn_RetrieveSolution = function ()
        {
            var coll;

            try {
                var query = "solutions?$select=uniquename,version,solutionpackageversion&$filter=uniquename eq '" + solutionName + "'";
                var httpReq = IOTAP_AddOn_CreateHTTPRequest( "GET", query, false );
                httpReq.send( null );

                if ( httpReq.status === 200 ) {
                    coll = JSON.parse( httpReq.responseText ).value;

                    for ( var i = 0; i < coll.length; i++ ) {
                        ClientCRM.SolutionName = productName;
                        ClientCRM.SolutionVersion = coll[i].version;
                        ClientCRM.SolutionPackageVersion = coll[i].solutionpackageversion;

                    }
                }
                return coll;
            }
            catch ( ex ) {
                throw ex;
            }
        }

        // Retrieve Solution Info
        IOTAP_AddOn_RetrieveLicense = function ()
        {
            var coll;

            try {
                ClientCRM.LicenseXML = null;
                var primaryKey = licenseEntityName + "id";
                var query = licenseEntityPluralName + "?$select=" + primaryKey + ",iotap_licensexml&$filter=statecode eq 0";
                var httpReq = IOTAP_AddOn_CreateHTTPRequest( "GET", query, false );
                httpReq.send( null );

                if ( httpReq.status === 200 ) {
                    coll = JSON.parse( httpReq.responseText ).value;

                    for ( var i = 0; i < coll.length; i++ ) {
                        ClientCRM.LicenseId = eval( "coll[i]." + primaryKey );
                        ClientCRM.LicenseXML = coll[i].iotap_licensexml;
                    }
                }
                return coll;
            }
            catch ( ex ) {
                throw ex;
            }
        }


        //Create the HTTP Request object
        IOTAP_AddOn_CreateHTTPRequest = function ( action, query, async )
        {
            try {
                var httpReq = new XMLHttpRequest();
                httpReq.open( action, IOTAP_AddOn_GetClientUrl() + "/api/data/v8.0/" + query, async );
                httpReq.setRequestHeader( "Accept", "application/json" );
                httpReq.setRequestHeader( "Content-Type", "application/json; charset=utf-8" );
                httpReq.setRequestHeader( "OData-MaxVersion", "4.0" );
                httpReq.setRequestHeader( "OData-Version", "4.0" );
            }
            catch ( ex ) {
                throw ex;
            }
            return httpReq;
        }

        //Get the CRM Client Url
        IOTAP_AddOn_GetClientUrl = function ()
        {
            return Xrm.Page.context.getClientUrl();
        }

        IOTAP_AddOn_CreateRecord = function ( entityName, entity )
        {
            try {
                var httpReq = IOTAP_AddOn_CreateHTTPRequest( "POST", entityName, false );
                    httpReq.send( JSON.stringify( entity ) );
            }
            catch ( ex ) {
                throw ex;
            }
        }

        IOTAP_AddOn_UpdateRecord = function ( entityName, entityId, entity )
        {
            try {
                var httpReq = IOTAP_AddOn_CreateHTTPRequest( "PATCH", entityName + "(" + entityId + ")", false );
                httpReq.send( JSON.stringify( entity ) );
            }
            catch ( ex ) {
                throw ex;
            }
        }

        IOTAP_AddOn_OpenSetting = function ()
        {
            Xrm.Utility.openWebResource( settingWebResourceLocation );
        }

    </script>
</head>
<body style="margin: 0 0 0 0;padding:0 0 0 0">
    <div style="width:700px;margin:0px auto"> 
        <a href="#" onclick="IOTAP_AddOn_OpenSetting()">
            <img src="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjYyRUNEMzc4QjYxMzExRTZCNjczQzVGQUJFNDY3RTdFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjYyRUNEMzc5QjYxMzExRTZCNjczQzVGQUJFNDY3RTdFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJFQ0QzNzZCNjEzMTFFNkI2NzNDNUZBQkU0NjdFN0UiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjJFQ0QzNzdCNjEzMTFFNkI2NzNDNUZBQkU0NjdFN0UiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDg8QDw4MExMUFBMTHBsbGxwfHx8fHx8fHx8fAQcHBw0MDRgQEBgaFREVGh8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx//wAARCAAiACYDAREAAhEBAxEB/8QAgAABAAICAwAAAAAAAAAAAAAAAAYHAgMBBAUBAQACAgMAAAAAAAAAAAAAAAAFBgIEAQMHEAACAQMDAwMDBQAAAAAAAAABAgMAEQQSBQYhMQdBYRRRIhPxMiMVJREAAQMDAwQCAwAAAAAAAAAAAQACAxExBUESBCFhgRNxIpHRMv/aAAwDAQACEQMRAD8AV6EvKVlHHJI4SNS7sbKqgkk+wFCQLrkAk0C2DCzDJLGIJDJCCZkCNqQA2OoW6W96x3toDW6y9bqkUNRdaayWCURKIrd8ZcFixxg8kOcJGeJj8ZALKXuLM9z2XuLd6reU55O6LbrdW/C4sN2z7tLKT7Ry3hudvk+Ft8kf9jLcPKsej82juBJb77VoTcOdkYc7+R3t4Upx+fxpJS1hG89r+dVV/kPhEPHmjyo80ZHzJn/gYBZFU/cD0PUdwTap/Hc4zdC2m0KrZfGDj0cHV3E9NVC6lFCpRFdnjHdeMDYsfZ8XI/0J1eXKx3J1GQjS+k2AtZbgD0qq5SKb2F5H1FirvhJ4PUImn7nqR31XHHvFGLs/IF3Q5rTQY7F8WDRpIJBA1tfrpv6CnJy5li2baE3XHEwLYZvZuqBYftRjyzu/Gd0kxptvyPkbjCzQTFL6BGlz6ixOpuhHvUhiIZYwQ4Uaeqi89yIJSCw1eOh+FXdTSrqURd7Zd5ztm3GPcMFlXIiuFLqGFmFiLH2rqngbK3a6y7+NyXwvD2XC92LyfzCLLycn5Yf5II/C66oo/oY0Jstv1rTOKgLQKW/Plb7c3yQ4u3f1poPhRZ3Z3Z2/cxLH06nr6VIgUUSTU1WNESiJREoiURKIv//Z" width="25px" alt="IOTAP Report Scheduler Setting" title="IOTAP Report Scheduler Setting" align="right">
        </a> 
    </div>

        <iframe style="border-style:none;border-width:0px;width:100%;height:650px" frameborder="0" id="licenseActivation"></iframe>
</body>
</html>
