Scouts Membership System (UK) Tweaks

Provide a few tweaks including a role compliance report to the Scouts Website

目前為 2025-05-20 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Scouts Membership System (UK) Tweaks
// @description  Provide a few tweaks including a role compliance report to the Scouts Website
// @namespace    http://tampermonkey.net/
// @version      100000010
// @author       David Breakwell
// @match        https://membership.scouts.org.uk/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=scouts.org.uk
// @grant  GM_xmlhttpRequest
// @grant GM_getResourceURL
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_notification
// @run-at      document-idle
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require     http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js
// @resource    jqUI_CSS  http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css
// @resource    IconSet1  http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/images/ui-icons_222222_256x240.png
// @resource    IconSet2  http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/images/ui-icons_454545_256x240.png
// @resource    tf_CSS https://www.tablefilter.com/tablefilter/style/tablefilter.css
// @connect tsa-memportal-prod-fun01.azurewebsites.net
// @connect tsauksprodasa001.blob.core.windows.net
// @connect tsauksprodasa001.table.core.windows.net
// @license MIT
// ==/UserScript==

var mem = [{}];
var mems= [];
var roles = [];
var role_detail = [];
var dbs_detail = [];
var mem_learning= [];
var mem_lcount;
var role_max_count;
var respond = false;
var end = false;
var un="";
(function() {
    'use strict';
    function do_move() {
        console.log(document.getElementById("member-nav").value);
    }
    function dopage() {
        //    if(window.location.href.indexOf("subunitsau")!=-1) {

        setTimeout(function() {
            console.log("After Wait");
            console.log(window.location.href );
            if ((window.location.href == "https://membership.scouts.org.uk/")||(window.location.href == "https://membership.scouts.org.uk/#/")) {
                console.log("Homepage");
                if (document.getElementById("member-nav-list")==null){
                    var gotolist="<datalist id='member-nav-list'><option value='Add a New Member'></option>";
                    gotolist+="<option value='My Units'></option>";
                    gotolist+="</datalist>";

                    gotolist ='<label for="member-nav" style="font-size: 1.5em;font-weight: 600">What do you want to do?&nbsp;</label>' + gotolist;
                    gotolist += '<input style="width: 50%; font-size: 1.5em "list="member-nav-list" id="member-nav" name="member-nav-choice" onchange="do_move"/>';
                    if( document.getElementById("title")!=null) {

                        if (document.getElementById("quick_nav")==null) {
                            gotolist = '<div id="quick_nav">'+gotolist+'</div>';
                            //      document.getElementById("title").outerHTML += (gotolist);

                        } else
                        {
                            //      document.getElementById("quick_nav").innerHTML = (gotolist);
                        }
                    } // title

                } // already dispalyed
            }
            if (window.location.href.indexOf("subunitsau") != -1) {
                //document.body.appendChild(button);
                var htmlToInsert;
                htmlToInsert = '<span id="DavesnewText"><p>There are <a href="';
                htmlToInsert += window.location.href.substring(0, window.location.href.indexOf("subunitsau"));
                htmlToInsert += 'teamsau"><span id="teamcounter"></span></a> Teams at this level</p><span><span id="DavesList"><span>';
                //console.log(document.getElementById("header-main-title-all-units-grid"));

                GM_xmlhttpRequest({
                    method: "POST",
                    url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/UnitTeamsAndRolesListingAsync",
                    data: '{"unitId" : "' + window.location.href.substring(window.location.href.indexOf("allunits/") + 9, window.location.href.indexOf("subunitsau") - 1) + '", "type" : "team"}',
                    headers: {
                        "Content-Type": "application/json",
                        "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                        "Accept": "application/json, text/plain, */*"
                    },
                    onload: function(response) {
                        //    console.log("gut response");
                        //    console.log(response.responseText);
                        //    console.log(JSON.parse(response.responseText));
                        if (JSON.parse(response.responseText).teams.length > 1) {
                            document.getElementById("teamcounter").innerHTML = JSON.parse(response.responseText).teams.length;
                        } else {
                            htmlToInsert = '<p>There is <a href="';
                            htmlToInsert += window.location.href.substring(0, window.location.href.indexOf("subunitsau"));
                            htmlToInsert += 'teamsau/' + JSON.parse(response.responseText).teams[0].teamId + "/teamdashboardaut";
                            htmlToInsert += '"><span id="teamcounter">1</span></a> Team at this level</p>';
                            document.getElementById("DavesnewText").innerHTML = (htmlToInsert);
                        }
                        var elements = document.querySelectorAll('[id^=grid-unit]');
                        var elements2 = document.querySelectorAll('[id^=grid-parentUnit]');
                        for (var loop = 0; loop < elements.length; loop++) {
                            var htmlToInsert2 = '<a href="';
                            htmlToInsert2 += elements[loop].href.substring(0, elements[loop].href.indexOf("subunitsau"));
                            htmlToInsert2 += 'teamsau">&nbsp;&nbsp;&nbsp;<strong style=" display: inline-block;  width: 40px; height: 40px;line-height: 40px;text-align: center; background-color: #007bff;  cursor:pointer; color: white; border-color: #007bff; border-radius: 50%;font-size: 20px;font-weight: bold;">T</strong></a>';
                            elements2[loop].outerHTML += htmlToInsert2;
                        }
                    }
                }); // End of request
                document.getElementById("header-main-title-all-units-grid").innerHTML += (htmlToInsert);
                var button = document.createElement("Button");
                button.innerHTML = "Add a Member";
                button.onclick = () => {

                    window.open(window.location.href.substring(0, window.location.href.indexOf("subunitsau")) + "unitdetailsau/addmemberau", "_self");
                };
                button.style = "background: rgb(0, 97, 205);font-weight: 700;font-family: 'Nunito Sans';font-size: 20px;line-height: 1.5;color: white;min-height: 46px;max-width: 215px; cursor:pointer;vertical-align: middle;padding: 8px 24px;border-color: #007bff;";
                document.getElementById("header-main-title-all-units-grid").appendChild(button);

            }
        })

        if (window.location.href.indexOf("teamdashboardaut") != -1) {
            setTimeout(function() {
                var button = document.createElement("Button");
                button.innerHTML = "Add a Member";
                button.onclick = () => {

                    window.open(window.location.href.substring(0, window.location.href.indexOf("teamsau")) + "unitdetailsau/addmemberau", "_self");
                };
                button.style = "background: rgb(0, 97, 205);font-weight: 700;font-family: 'Nunito Sans';font-size: 20px;line-height: 1.5;color: white;min-height: 46px;max-width: 215px;vertical-align: middle;padding: 8px 24px;border: none; cursor:pointer;";
                document.getElementById("header-button-wrapper-action-list").appendChild(button);
            }, 1000);
        }

    } // dopage

    function addButton(text, onclick, cssObj,pos) {
        if (pos=="T") {
          cssObj = cssObj || {position: 'absolute', top: '63px', left:'60%', 'z-index': 3}
        }
          if (pos=="B") {
          cssObj = cssObj || {position: 'absolute', top: '30px', left:'60%', 'z-index': 3}
        }
        let button = document.createElement('button'), btnStyle = button.style
        document.body.appendChild(button)
        button.innerHTML = text
        button.onclick = onclick
        btnStyle.position = 'absolute'
        Object.keys(cssObj).forEach(key => btnStyle[key] = cssObj[key])
        return button
    }
    function get_data(count){
        var datapass;
        var max = 50;
        un = document.getElementById("gmunitname").value;
        document.getElementById("gmUnit").innerHTML = un;
        $("#gmState")[0].innerText = "Requesting Members for "+un+" ("+count+")"+"Total read "+mems.length;

        //  document.getElementById("gmState").innerText = "Hello World";
        datapass = '{"pagesize":'+max+',"nexttoken":'+count+',"filter":{"global":"","globaland":false,"fieldand":true,"filterfields":[{"field":"unitName","value":"'+un+'"}]},"isSuspended":false}';
        //       console.log(datapass);
        GM_xmlhttpRequest({
            method: "POST",
            context: count,
            url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/MemberListingAsync",
            data: datapass,
            synchronous:    true,
            headers: {
                "Content-Type": "application/json",
                "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                "Accept": "application/json, text/plain, */*"
            },
            onerror: function(response) { console.log(reponse); },
            onload: function(response) { //  console.log(response);console.log(count);

                // console.log(JSON.parse(response.responseText).data[1]);
                mem =  (JSON.parse(response.responseText).data);
                mems = mems.concat(mem);
                //      console.log(mem.length);
                //      console.log(JSON.parse(response.responseText).data);
                respond = true;
                //     console.log(mem);
                //    console.log(JSON.parse(response.responseText).data.length);
                $("#gmState")[0].innerText = "Reading Members for "+un+" ("+response.context+") "+"Total read "+mems.length+"("+mem.length+")";
                if ( JSON.parse(response.responseText).data.length ==50) {get_data(count+1); } else {report2()};},
            onerror:   function(response) { console.log(response);},
            onabort:  function(response) { console.log(response);}
        });

    }

    function report2() {
        //  console.log(mem[1]);
        //      console.log(mems);
        if (document.getElementById("gmpersonname").value !=""){
            mems = mems.filter( function(v) {return v.fullname.toLowerCase().includes(document.getElementById("gmpersonname").value.toLowerCase());})

        }
        if (document.getElementById("gmteamname").value !=""){
            mems = mems.filter( function(v) {return v.Team.includes(document.getElementById("gmteamname").value);})

        }

        var seen = {};
        var out = [];
        var len = mems.length;
        var j = 0;
        for(var i = 0; i < len; i++) {
            var item = mems[i];
            if(seen[item.id] !== 1) {
                seen[item.id] = 1;
                out[j++] = item;
            }
        }
        mems = out;

        $("#gmState")[0].innerText = "Number of Members "+mems.length;
        for(var loop = 0;loop<mems.length; loop++) {


            GM_xmlhttpRequest({
                method: "POST",
                context: loop+1,
                url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GetMemberRolesAsync",
                data: '{"contactId": "'+mems[loop].id+'"}',
                synchronous:    true,
                headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                    "Accept": "application/json, text/plain, */*"
                },
                onload: function(response) {//console.log(response.context);
                    $("#gmState")[0].innerText = "Number of Members "+mems.length+" reading roles for number "+response.context;
                    //     console.log(mems.length);
                    roles=roles.concat(JSON.parse(response.responseText).data);
                    // console.log(JSON.parse(response.responseText));
                    if (response.context-1==mems.length-1){console.log(roles);console.log(mems);report3();} }
            });
        };
    }

    function clear_mems(){
//if (1!=1){

          if(document.getElementById("gmmissing").checked) {
          var onlymems = [];
          var act = ['managerDisclosureCheck','dataProtectionTrainingComplete','signDeclaration','updateMemberProfile','referenceRequest','safeguardconfidentialEnquiryCheck','managerWelcomeConversation','coreLearning','managerTrusteeCheck'];

          for (var i = 0; i < role_detail.length; i++) {
            var displine=true;

            if (document.getElementById("gmmissing").checked) {
                var any_missing = false;
                for (var j = 0; j < act.length; j++) {
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {
                        var value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value!="Satisfactory")&&(value!="Completed")&&(value!="Held - Satisfactory")){ any_missing=true;}
                    }
                }
                if (any_missing==false) {displine=false}
            }
            if (displine) {
                var memobj = new Object();
                memobj = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId);
                onlymems.push(memobj);
            }
          }
              //roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName)
              // mems = mems.filter( function(v) {return v.id == onlymems.find((element)=>element.id== v.id)})
            mems = onlymems;
          }
//       }
    }

    function report3() {
        console.log(roles);
        if (document.getElementById("gmhelper").checked) {
            roles = roles.filter( function(v) {return !v.RoleName.includes("Non Member - Needs disclosure");})
            roles = roles.filter( function(v) {return !v.RoleName.includes("Holding");})

        }
        if (document.getElementById("gmclosed").checked) {
            roles = roles.filter( function(v) {return v.Closed});
        roles = roles.filter( function(v) {return v.EndDate==null});


        }
        if (document.getElementById("gmteamname").value !=""){
            roles = roles.filter( function(v) {if( v.Team==null){return false} else {return v.Team.includes(document.getElementById("gmteamname").value);}})

        }
        if (document.getElementById("gmteamonly").checked){
           var  filter = document.getElementById("gmunitname").value.replaceAll("%", "*");
             let w = filter.replace(/[.+^${}()|[\]\\]/g, '\\$&'); // regexp escape
             const re = new RegExp(`^${w.replace(/\*/g,'.*').replace(/\?/g,'.')}$`,'i');
            roles = roles.filter( function(v) {return re.test(v.UnitId)});
        }

        var xml = 0; var nullc=0;



        for(var loop=0;loop<roles.length;loop++) {
            //  console.log(roles[loop].EndDate);
            $("#gmState")[0].innerText = "Checking Role "+loop+" of "+roles.length;
            if ((roles[loop].EndDate==null)||(roles[loop].Status!=null)) {
                //   console.log("OK");
                role_max_count = loop;
                GM_xmlhttpRequest({
                    method: "POST",
                    context: loop+1,
                    url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GenerateSASTokenAsync",
                    data: '{container: "contacts", permissions: "R", file: "'+roles[loop].ContactId+'/membership/'+roles[loop].Id+'/audit/data.json"}',
                    synchronous:    true,
                    headers: {
                        "Content-Type": "application/json",
                        "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                        "Accept": "application/json, text/plain, */*"
                    },
                    onload: function(response) {
                        $("#gmState")[0].innerText = "Fetching Role "+response.context+" of "+roles.length;
                        GM_xmlhttpRequest({
                            method: "GET",
                            Accept: "application/json;odata=minimalmetadata",
                            context: response.context+1,
                            url: JSON.parse(response.responseText).token,

                            onload: function(response) { // console.log(response.responseText);
                                // console.log(JSON.parse(response.responseText));
                                // console.log("Total"+(role_detail.length + nullc + xml));
                                //  console.log("Aim"+(roles.length-1));
                                $("#gmState")[0].innerText = "Checking Role "+response.context;
                                if(!response.responseText.includes("xml")) { role_detail.push(JSON.parse(response.responseText));} else {xml++};
                                if (role_detail.length+nullc+xml>=roles.length){console.log(role_detail); mem_lcount = 0;clear_mems();report5()}}

                        })

                    }
                });
            } else { nullc++}
        }
    }



    function report5() {

        if (document.getElementById("gmlearning").checked) {

            GM_xmlhttpRequest({
                method: "POST",

                url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GetLmsDetailsAsync",
                data: '{"contactId": "'+mems[mem_lcount].id+'"}',
                //      context: loop,
                headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                    "Accept": "application/json, text/plain, */*"
                },
                onload: function(response) {
                    $("#gmState")[0].innerText = "Number of Members "+mems.length+" reading learning for number "+mem_lcount;
                    var l = new Object;
                    l.id = mems[ mem_lcount].id;
                    l.learn = JSON.parse(response.responseText);
                    mem_learning[mem_lcount] = l;
                    // console.log(JSON.parse(response.responseText));
                    if ( mem_lcount==mems.length-1){console.log(mem_learning);report6();}else{ mem_lcount++;report5()}}
            });

        } else {report6() }
    }

    function xmlToJson(xml) {
        // Create the return object
        var obj = {};

        if (xml.nodeType == 1) {
            // element
            // do attributes
            if (xml.attributes.length > 0) {
                obj["@attributes"] = {};
                for (var j = 0; j < xml.attributes.length; j++) {
                    var attribute = xml.attributes.item(j);
                    obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
                }
            }
        } else if (xml.nodeType == 3) {
            // text
            obj = xml.nodeValue;
        }

        // do children
        // If all text nodes inside, get concatenated text from them.
        var textNodes = [].slice.call(xml.childNodes).filter(function(node) {
            return node.nodeType === 3;
        });
        if (xml.hasChildNodes() && xml.childNodes.length === textNodes.length) {
            obj = [].slice.call(xml.childNodes).reduce(function(text, node) {
                return text + node.nodeValue;
            }, "");
        } else if (xml.hasChildNodes()) {
            for (var i = 0; i < xml.childNodes.length; i++) {
                var item = xml.childNodes.item(i);
                var nodeName = item.nodeName;
              //  if (nodeName=="m:properties") {nodeName = "m_properties"}
                if (nodeName[1]==":") {nodeName = nodeName.replace(":", "_")};
                if (typeof obj[nodeName] == "undefined") {
                    obj[nodeName] = xmlToJson(item);
                } else {
                    if (typeof obj[nodeName].push == "undefined") {
                        var old = obj[nodeName];
                        obj[nodeName] = [];
                        obj[nodeName].push(old);
                    }
                    obj[nodeName].push(xmlToJson(item));
                }
            }
        }
        return obj;
    }

    function report6() {

        var xml = 0; var nullc=0;

        if (document.getElementById("gmdbs").checked) {

            for(var loop=0;loop<mems.length;loop++) {
                //  console.log(roles[loop].EndDate);
                $("#gmState")[0].innerText = "Checking Disclosure "+loop+" of "+mems.length;
                GM_xmlhttpRequest({
                    method: "POST",
                    context: loop+1,
                    url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GenerateSASTokenAsync",
                    data: '{"table": "Disclosures", "permissions": "R", "partitionkey" : "'+mems[loop].id+'"}',
                    synchronous:    true,
                    headers: {
                        "Content-Type": "application/json",
                        "Type" : "table",
                        "accept-language" : "en-GB,en;q=0.9",
                        "sec-fetch-site" : "cross-site",
                        "Origin" : "https://membership.scouts.org.uk",
                        "content-encoding" : "gzip",
                        "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                        "Accept": "application/json, text/plain, */*"
                    },
                    onload: function(response) {
                        $("#gmState")[0].innerText = "Fetching DBS "+response.context+" of "+mems.length;
                        GM_xmlhttpRequest({
                            method: "GET",
                            context: response.context+1,
                            url: JSON.parse(response.responseText).token,

                            onload: function(response) {
                                $("#gmState")[0].innerText = "Checking DBS "+response.context;
                                if(response.responseText.includes("xml")) { var XmlNode = new DOMParser().parseFromString(response.responseText, 'text/xml');
                                dbs_detail.push(xmlToJson(XmlNode));} else {xml++};
                                if (dbs_detail.length+xml>=mems.length){console.log(dbs_detail); report4()}}

                        })

                    }
                });

            }
        } else {report4()}

    }



    function report4() {
        var expirytext = "Expiry";
        var act = ['managerDisclosureCheck','dataProtectionTrainingComplete','signDeclaration','updateMemberProfile','referenceRequest','safeguardconfidentialEnquiryCheck','managerWelcomeConversation','coreLearning','managerTrusteeCheck'];
        var title = ['Role','Unit','Team','Name','Status','Start Date','Days','Disclosure','GDPR','Declaration','Profile','References','CE Check','Welcome','Learning','Trustee'];
        var learn = ['Creating Inclusion','Data Protection in Scouts','Delivering a Great Programme','First Response','Safeguarding','Safety','Who We Are and What We Do','Being a Trustee in Scouts','Leading Scout Volunteers'];
        $("#gmState")[0].innerText = "Data Collection Completed";
        var myTableDiv = document.getElementById("gmTable");
        var table = document.createElement('TABLE');
        table.border = '1';
        table.id = "GMourreport";
        var tableBody = document.createElement('TBODY');
        table.appendChild(tableBody);
        var tr = document.createElement('TR');
        tableBody.appendChild(tr);
        for (var i=0; i<title.length;i++){
            var td = document.createElement('TD');
            //    td.style.backgroundColor = 'red';
            if (i>6) { td.style.writingMode = "vertical-lr"; td.style.backgroundColor='lightcyan';}
            //  td.style.writingmode = 'vertical-lr';
            td.appendChild(document.createTextNode(title[i]));

            tr.appendChild(td);
        }
        if (document.getElementById("gmlearning").checked) {
            for ( i=0; i<learn.length;i++){
                td = document.createElement('TD');
                td.style.writingMode = "vertical-lr";
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode(learn[i]));
                tr.appendChild(td);
                if (((i==3)||(i==4)||(i==5))&&(document.getElementById("gmdates").checked)) {
                    td = document.createElement('TD');
                    td.style.writingMode = "vertical-lr";
                    td.style.backgroundColor = 'LightGray';
                    td.appendChild(document.createTextNode(learn[i]+" "+expirytext));
                tr.appendChild(td);
                }
            }
        }
                if (document.getElementById("gmdbs").checked) {
                      td = document.createElement('TD');
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode("DBS Expiry"));

                tr.appendChild(td);
                      td = document.createElement('TD');
                       td.style.writingMode = "vertical-lr";
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode("DBS Days Remaining"));

                tr.appendChild(td);
                }
        for (i = 0; i < role_detail.length; i++) {
            var displine=true;

            if (document.getElementById("gmmissing").checked) {
                var any_missing = false;
                for (var j = 0; j < act.length; j++) {
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {
                        var value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value!="Satisfactory")&&(value!="Completed")&&(value!="Held - Satisfactory")){ any_missing=true;}
                    }
                }
                if (any_missing==false) {displine=false}
            }
            if (displine) {
                tr = document.createElement('TR');
                tableBody.appendChild(tr);
                // Name
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName));
                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitId));
                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team));
                tr.appendChild(td);
                td = document.createElement('TD');
                var fullname = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).fullname;
                var nameid = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).id;
                
                var memhtml = '<a href="https://membership.scouts.org.uk/#/membersearch/'+nameid+'/viewmember" target="_blank">'+fullname+'</a>';
              
                td.innerHTML=(memhtml);
                tr.appendChild(td);
                // Role
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(role_detail[i].rolestatus));
                tr.appendChild(td);
                td = document.createElement('TD');
                var sdate = new Date(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).StartDate);
                td.appendChild(document.createTextNode(sdate.toLocaleDateString('en-us', { year:"numeric", month:"short", day:"numeric"})));
                var days  = Math.round((new Date() - sdate) / (1000 * 60 * 60 * 24));

                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(days));
                tr.appendChild(td);
                for (j = 0; j < act.length; j++) {
                    td = document.createElement('TD');
                    //   td.width = '75';
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {

                        var state= 0x274C;
                        value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value=="Satisfactory")||(value=="Completed")||(value=="Held - Satisfactory")){state= 0x2705;}

                        //  td.appendChild(document.createTextNode(role_detail[i].actions.find((element)=>element.typeid==act[j]).status+String.fromCodePoint(state)));
                        td.appendChild(document.createTextNode(String.fromCodePoint(state)));

                        //   td.appendChild(document.createTextNode(String.fromCodePoint(state)));
                    } else {td.appendChild(document.createTextNode(" "))}
                    td.style.backgroundColor='lightcyan';
                    tr.appendChild(td);
                }
                if (document.getElementById("gmlearning").checked) {
                    for ( j = 0; j < learn.length; j++) {
                        td = document.createElement('TD');
                        state= 0x274C;
                        var lr = mem_learning.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId);
                        if (lr.learn.find((object)=>object.title==learn[j])){
                            state= 0x2705;
                        }
                        // Check Expiry x26A1
                        if (lr.learn.find((object)=>object.title==learn[j])){
                            if (lr.learn.find( (object) => object.title == learn[j]).expiryDate !=null) {
                                sdate = new Date(lr.learn.find((object)=>object.title==learn[j]).expiryDate);
                                days  = Math.round((new Date() - sdate) / (1000 * 60 * 60 * 24));
                                if (days>=90) {state = 0x26A1;
                                              }
                            }
                        }

                        if (j==7) {
                            // Trustee
                            if ((!roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName.includes('Lead Volunteer'))&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName!='Trustee')) {

                                if(state==0x2705) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }
                            }
                        }
                        if (j==8) {
                            // Team Lead
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName.includes('Lead Volunteer'))||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Team Leader')&&((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='Group Section')&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='District Section'))) {

                            } else {if(state==0x2705) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }}
                        }
                        if (j==8) {
                            // Team Lead
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ParentTeamId==null)) {

                            } else {if((state==0x2705)||(state == 0x2714)) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }}
                        }
                        if (j==2) {
                            // programme - only section roles
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='Group Section')&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='District Section')) {
                                if(state==0x2705) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }
                            }
                        }
                        if (j==3) {
                            // First Response
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType=='Group Section')||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType=='District Section')||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Group Lead Volunteer')||((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Team Leader'))&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team=='14-24 Team')) {

                            } else { if(state==0x2705) {
                                state=0x2714;}
                                    else {
                                        state = 0x0020;
                                    } }
                        }
                        // Check for those not needing training
                        var rn = roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName;
                        if ((rn=='Non Member - Needs disclosure')||(rn=='President')||(rn=='Holding')) {
                             if ((state == 0x2705)||(state == 0x2714)) {
                                state=0x2714;}
                            else {
                                state = 0x0020;
                            }
                        }
                        if (document.getElementById("gmdates").checked) {
                            if (lr.learn.find((object)=>object.title==learn[j])){
                                if (lr.learn.find( (object) => object.title == learn[j]).expiryDate !=null) {
                                    sdate = new Date(lr.learn.find((object)=>object.title==learn[j]).expiryDate);
                                 //   td.appendChild(document.createTextNode(String.fromCodePoint(state)+" "+sdate.toLocaleDateString('en-GB')));
                                    td.appendChild(document.createTextNode(String.fromCodePoint(state)));
                                    td.style.backgroundColor = 'LightGray';
                                    tr.appendChild(td);
                                }else { td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                                td.style.backgroundColor = 'LightGray';
                                tr.appendChild(td);

                            } else { td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                            td.style.backgroundColor = 'LightGray';
                            tr.appendChild(td);
                        }

                        else
                        {     td.appendChild(document.createTextNode(String.fromCodePoint(state)));}


                        td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);

                        if ((document.getElementById("gmdates").checked)&&((j==3)||(j==4)||(j==5))) {
 td = document.createElement('TD');
                              if (lr.learn.find( (object) => object.title == learn[j])) {
                              td.appendChild(document.createTextNode(sdate.toLocaleDateString('en-GB')));
                              }
  td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);
                        }

                    }
                }
                 if (document.getElementById("gmdbs").checked) {
                  //   for(var dbs_outer=0;dbs_outer<dbs_detail.length;dbs_outer++){
                         //dbs_detail[0].feed.entry[0].content.m_properties.d_ExpiryDate
                   //  if (dbs_detail[dbs_outer].feed.entry[0].id.includes(role_detail[i].roleApprovalMemberShipId)) {
                    var mindex = mems.findIndex((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId)
                    var time = new Date("1000-01-01T00:00:01Z") ;
                    for(var dbsloop=0;dbsloop<dbs_detail[mindex].feed.entry.length;dbsloop++) {

                              sdate = new Date(dbs_detail[mindex].feed.entry[dbsloop].content.m_properties.d_ExpiryDate);
                              if (sdate>time) { time = sdate;}
                     }
                     if (typeof dbs_detail[mindex].feed.entry.length == "undefined") {
                         // Single DBS
                         sdate = new Date(dbs_detail[mindex].feed.entry.content.m_properties.d_ExpiryDate);
                          if (sdate>time) { time = sdate;}
                     }
                         td = document.createElement('TD');
                     var dbsdatedisp = time.toLocaleDateString('en-us', { year:"numeric", month:"short", day:"numeric"});
                       if (time<new Date()) {dbsdatedisp=String.fromCodePoint(0x274C)};
                      var expdays  = Math.round((time-new Date()) / (1000 * 60 * 60 * 24));
                     if ((expdays<=90)&&(expdays>0)) {dbsdatedisp+=String.fromCodePoint(0x26A1)}
                     td.appendChild(document.createTextNode(dbsdatedisp));

                               tr.appendChild(td);
                     td = document.createElement('TD');
                      td.appendChild(document.createTextNode(expdays));
  tr.appendChild(td);
                 }
            }
        }
        table.style.fontSize = "10pt";
        document.getElementById("gmTable").innerHTML="";
        myTableDiv.appendChild(table);

        var filtersConfig = {
        base_path: 'tablefilter/',
        grid_layout: true,
        alternate_rows: true,
        btn_reset: true,
        rows_counter: true,
        loader: true,
        status_bar: true,
        col_1: 'select',
        col_2: 'select',
         col_7: 'select',
        col_8: 'select',
        col_9: 'select',
        col_width: ["50px","50px","50px","50px","50px","50px","20px","20px","20px","50px","50px","50px","50px","50px","50px","50px","50px","50px"],
        col_types: [
            'string', 'string', 'string',     'string', 'string', 'string',   'string', 'string', 'string', 'string', 'string', 'string', 'string', 'string', 'string',  ],
        extensions:[{
            name: 'sort'
        }]
    };
    //var tf = new TableFilter('GMourreport',filtersConfig );
    //t
    }

        function report_filter() {
        var expirytext = "Expiry";
        var act = ['managerDisclosureCheck','dataProtectionTrainingComplete','signDeclaration','updateMemberProfile','referenceRequest','safeguardconfidentialEnquiryCheck','managerWelcomeConversation','coreLearning','managerTrusteeCheck'];
        var title = ['Role','Unit','Team','Name','Status','Start Date','Days','Disclosure','GDPR','Declaration','Profile','References','CE Check','Welcome','Learning','Trustee'];
        var learn = ['Creating Inclusion','Data Protection in Scouts','Delivering a Great Programme','First Response','Safeguarding','Safety','Who We Are and What We Do','Being a Trustee in Scouts','Leading Scout Volunteers'];
        $("#gmState")[0].innerText = "Data Collection Completed";
        var myTableDiv = document.getElementById("gmTable");
        var table = document.createElement('TABLE');
        table.border = '1';
        table.id = "GMourreport";
        var tableBody = document.createElement('TBODY');
        table.appendChild(tableBody);
        var tr = document.createElement('TR');
        tableBody.appendChild(tr);
        for (var i=0; i<title.length;i++){
            var td = document.createElement('TD');
            //    td.style.backgroundColor = 'red';
            if (i>6) { td.style.writingMode = "vertical-lr"; td.style.backgroundColor='lightcyan';}
            //  td.style.writingmode = 'vertical-lr';
            td.appendChild(document.createTextNode(title[i]));

            tr.appendChild(td);
        }
        if (document.getElementById("gmlearning").checked) {
            for ( i=0; i<learn.length;i++){
                td = document.createElement('TD');
                td.style.writingMode = "vertical-lr";
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode(learn[i]));
                tr.appendChild(td);
                if (((i==3)||(i==4)||(i==5))&&(document.getElementById("gmdates").checked)) {
                    td = document.createElement('TD');
                    td.style.writingMode = "vertical-lr";
                    td.style.backgroundColor = 'LightGray';
                    td.appendChild(document.createTextNode(learn[i]+" "+expirytext));
                tr.appendChild(td);
                }
            }
        }
                if (document.getElementById("gmdbs").checked) {
                      td = document.createElement('TD');
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode("DBS Expiry"));

                tr.appendChild(td);
                      td = document.createElement('TD');
                       td.style.writingMode = "vertical-lr";
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode("DBS Days Remaining"));

                tr.appendChild(td);
                }
        for (i = 0; i < role_detail.length; i++) {
            var displine=true;

            if (document.getElementById("gmmissing").checked) {
                var any_missing = false;
                for (var j = 0; j < act.length; j++) {
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {
                        var value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value!="Satisfactory")&&(value!="Completed")&&(value!="Held - Satisfactory")){ any_missing=true;}
                    }
                }
                if (any_missing==false) {displine=false}
            }
            //
            if (document.getElementById("gmteamonly").checked) {
               var  filter = document.getElementById("gmunitname").value.replaceAll("%", "*");
                let w = filter.replace(/[.+^${}()|[\]\\]/g, '\\$&'); // regexp escape
                const re = new RegExp(`^${w.replace(/\*/g,'.*').replace(/\?/g,'.')}$`,'i');
                if(!re.test(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitId)){displine=false}
            }

           if (mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId)!=undefined){

           var fullname = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).fullname;
           if (document.getElementById("gmpersonname").value!="") {
             if(!fullname.toLowerCase().includes(document.getElementById("gmpersonname").value.toLowerCase())){displine=false}
           }
           } else {displine=false;}

             if (document.getElementById("gmteamname").value!="") {
                if (!roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team.toLowerCase().includes(document.getElementById("gmteamname").value.toLowerCase())){displine=false}
            }

             if (document.getElementById("gmhelper").checked) {
                 var rolename = roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName;
                 if (rolename.includes("Non Member - Needs disclosure")) {displine=false;}
                 if (rolename.includes("Holding")) {displine=false;}
             }
            if (displine) {
                tr = document.createElement('TR');
                tableBody.appendChild(tr);
                // Name
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName));
                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitId));
                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team));
                tr.appendChild(td);
                td = document.createElement('TD');
                fullname = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).fullname;
                var nameid = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).id;

                var memhtml = '<a href="https://membership.scouts.org.uk/#/membersearch/'+nameid+'/viewmember" target="_blank">'+fullname+'</a>';

                td.innerHTML=(memhtml);
                tr.appendChild(td);
                // Role
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(role_detail[i].rolestatus));
                tr.appendChild(td);
                td = document.createElement('TD');
                var sdate = new Date(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).StartDate);
                td.appendChild(document.createTextNode(sdate.toLocaleDateString('en-us', { year:"numeric", month:"short", day:"numeric"})));
                var days  = Math.round((new Date() - sdate) / (1000 * 60 * 60 * 24));

                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(days));
                tr.appendChild(td);
                for (j = 0; j < act.length; j++) {
                    td = document.createElement('TD');
                    //   td.width = '75';
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {

                        var state= 0x274C;
                        value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value=="Satisfactory")||(value=="Completed")||(value=="Held - Satisfactory")){state= 0x2705;}

                        //  td.appendChild(document.createTextNode(role_detail[i].actions.find((element)=>element.typeid==act[j]).status+String.fromCodePoint(state)));
                        td.appendChild(document.createTextNode(String.fromCodePoint(state)));

                        //   td.appendChild(document.createTextNode(String.fromCodePoint(state)));
                    } else {td.appendChild(document.createTextNode(" "))}
                    td.style.backgroundColor='lightcyan';
                    tr.appendChild(td);
                }
                if (document.getElementById("gmlearning").checked) {
                    for ( j = 0; j < learn.length; j++) {
                        td = document.createElement('TD');
                        state= 0x274C;
                        var lr = mem_learning.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId);
                        if (lr.learn.find((object)=>object.title==learn[j])){
                            state= 0x2705;
                        }
                        // Check Expiry x26A1
                        if (lr.learn.find((object)=>object.title==learn[j])){
                            if (lr.learn.find( (object) => object.title == learn[j]).expiryDate !=null) {
                                sdate = new Date(lr.learn.find((object)=>object.title==learn[j]).expiryDate);
                                days  = Math.round((sdate - new Date()) / (1000 * 60 * 60 * 24));
                                if (days<=90) {state = 0x26A1;
                                              }
                            }
                        }

                        if (j==7) {
                            // Trustee
                            if ((!roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName.includes('Lead Volunteer'))&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName!='Trustee')) {

                                if(state==0x2705) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }
                            }
                        }
                        if (j==8) {
                            // Team Lead
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName.includes('Lead Volunteer'))||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Team Leader')&&((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='Group Section')&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='District Section'))) {

                            } else {if(state==0x2705) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }}
                        }
                        if (j==8) {
                            // Team Lead
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ParentTeamId==null)) {

                            } else {if((state==0x2705)||(state == 0x2714)) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }}
                        }
                        if (j==2) {
                            // programme - only section roles
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='Group Section')&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='District Section')) {
                                if(state==0x2705) {
                                    state=0x2714;}
                                else {
                                    state = 0x0020;
                                }
                            }
                        }
                        if (j==3) {
                            // First Response
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType=='Group Section')||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType=='District Section')||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Group Lead Volunteer')||((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Team Leader'))&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team=='14-24 Team')) {

                            } else { if(state==0x2705) {
                                state=0x2714;}
                                    else {
                                        state = 0x0020;
                                    } }
                        }
                        // Check for those not needing training
                        var rn = roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName;
                        if ((rn=='Non Member - Needs disclosure')||(rn=='President')||(rn=='Holding')) {
                             if ((state == 0x2705)||(state == 0x2714)) {
                                state=0x2714;}
                            else {
                                state = 0x0020;
                            }
                        }
                        if (document.getElementById("gmdates").checked) {
                            if (lr.learn.find((object)=>object.title==learn[j])){
                                if (lr.learn.find( (object) => object.title == learn[j]).expiryDate !=null) {
                                    sdate = new Date(lr.learn.find((object)=>object.title==learn[j]).expiryDate);
                                 //   td.appendChild(document.createTextNode(String.fromCodePoint(state)+" "+sdate.toLocaleDateString('en-GB')));
                                    td.appendChild(document.createTextNode(String.fromCodePoint(state)));
                                    td.style.backgroundColor = 'LightGray';
                                    tr.appendChild(td);
                                }else { td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                                td.style.backgroundColor = 'LightGray';
                                tr.appendChild(td);

                            } else { td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                            td.style.backgroundColor = 'LightGray';
                            tr.appendChild(td);
                        }

                        else
                        {     td.appendChild(document.createTextNode(String.fromCodePoint(state)));}


                        td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);

                        if ((document.getElementById("gmdates").checked)&&((j==3)||(j==4)||(j==5))) {
 td = document.createElement('TD');
                            if (lr.learn.find( (object) => object.title == learn[j])) {
                              td.appendChild(document.createTextNode(sdate.toLocaleDateString('en-GB')));
                            }
  td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);
                        }

                    }
                }
                 if (document.getElementById("gmdbs").checked) {
                  //   for(var dbs_outer=0;dbs_outer<dbs_detail.length;dbs_outer++){
                         //dbs_detail[0].feed.entry[0].content.m_properties.d_ExpiryDate
                   //  if (dbs_detail[dbs_outer].feed.entry[0].id.includes(role_detail[i].roleApprovalMemberShipId)) {
                    var mindex = mems.findIndex((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId)
                    var time = new Date("1000-01-01T00:00:01Z") ;
                    for(var dbsloop=0;dbsloop<dbs_detail[mindex].feed.entry.length;dbsloop++) {

                              sdate = new Date(dbs_detail[mindex].feed.entry[dbsloop].content.m_properties.d_ExpiryDate);
                              if (sdate>time) { time = sdate;}
                     }
                     if (typeof dbs_detail[mindex].feed.entry.length == "undefined") {
                         // Single DBS
                         sdate = new Date(dbs_detail[mindex].feed.entry.content.m_properties.d_ExpiryDate);
                          if (sdate>time) { time = sdate;}
                     }
                         td = document.createElement('TD');
                     var dbsdatedisp = time.toLocaleDateString('en-us', { year:"numeric", month:"short", day:"numeric"});
                       if (time<new Date()) {dbsdatedisp=String.fromCodePoint(0x274C)};
                      var expdays  = Math.round((time-new Date()) / (1000 * 60 * 60 * 24));
                     if ((expdays<=90)&&(expdays>0)) {dbsdatedisp+=String.fromCodePoint(0x26A1)}
                     td.appendChild(document.createTextNode(dbsdatedisp));

                               tr.appendChild(td);
                     td = document.createElement('TD');
                      td.appendChild(document.createTextNode(expdays));
  tr.appendChild(td);
                 }
            }
        }
        table.style.fontSize = "10pt";
        document.getElementById("gmTable").innerHTML="";
        myTableDiv.appendChild(table);


    //var tf = new TableFilter('GMourreport',filtersConfig );
    //t
    }



    function report_onclick() {
        // RUn Report
        //     console.log("Report");
        var count = 1;
        mem="";
        $("#gmpopup").dialog ( {modal: true, height: 500, width: "100%"} );
        mems = [];
        role_detail=[];
        roles=[];
       document.getElementById("gmTable").innerHTML="Table will appear here....";
     //   document.getElementById("gmUnit").innerHTML = "UKJDKJD";
        var responsetext = "";
        var datapass;
        mem_learning= [];
        dbs_detail=[];
        get_data(count);
    }

    function report_onclick2() {
        // Open Dialog
        console.log("Report");
        var count = 1;
        mem="";
        $("#gmpopup").dialog ( {modal: true, height: 500, width: "100%"} );
        mems = [];
        role_detail=[];
        roles=[];
     //   document.getElementById("gmTable").innerHTML="Table will appear here....";
        var responsetext = "";
        var datapass;
        mem_learning= [];

    }

    function report_print() {

        var prtContent = document.getElementById("GMourreport");
        var WinPrint = window.open('', '', 'left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0');
        WinPrint.document.write(prtContent.outerHTML);
        WinPrint.document.close();
        WinPrint.focus();
        WinPrint.print();
        WinPrint.close();
    }

    function clear_cookies() {
       var cookies = document.cookie.split("; ");
    for (var c = 0; c < cookies.length; c++) {
        var d = window.location.hostname.split(".");
        while (d.length > 0) {
            var cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
            var p = location.pathname.split('/');
            document.cookie = cookieBase + '/';
            while (p.length > 0) {
                document.cookie = cookieBase + p.join('/');
                p.pop();
            };
            d.shift();
        }
    }
    }

    function report_download() {
        /* var location = 'data:application/vnd.ms-excel;base64,';
	var excelTemplate = '<html> ' +
		'<head> ' +
		'<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/> ' +
		'</head> ' +
		'<body> ' +
		document.getElementById("GMourreport").innerHTML +
		'</body> ' +
		'</html>'
	window.location.href = location + window.btoa(unescape(encodeURIComponent(excelTemplate)));*/
        const clipboardItem = new ClipboardItem({
            'text/html': new Blob([document.getElementById("GMourreport").outerHTML], { type: 'text/html' }),
            'text/plain': new Blob([document.getElementById("GMourreport").innerText], { type: 'text/plain' })
        });
        navigator.clipboard.write([clipboardItem]);
    }
    // Thid is our page
    navigation.addEventListener("navigate", e => {
        console.log("EventLstener");
        console.log(e);
        //   if ((e.destination.url.indexOf("subunitsau") != -1) || (e.destination.url.indexOf("teamdashboardaut") != -1)) {
        if (document.getElementById("quick_nav")!=null){console.log("remove");document.getElementById("quick_nav").innerHTML ="";}
        //       console.log("Its our URL");
        setTimeout(function() {
        //    dopage(); Deactivate Teams/Unit Stuff
        }, 2000);
        //    } else {

        //       console.log("Not lstener");
        //       console.log(window.location.href);
        //      dopage();
        //   }
    }) // Event listener

    setTimeout(function() {
        console.log("New Page");
    //    dopage(); Deactive Unit/Teams
    }, 2000);
    // Your code here...
    var newHTML         = document.createElement ('div');
    // <p>Exclude Welcome Information <input  type="checkbox" id="gmexc" name="gmtexc" /><p> \
    //<p><input   type="checkbox" id="gmtraffic" name="gmtraffic" /> Show 90 Day Traffic LIghts  \
    newHTML.innerHTML   = '             \
<div id="gmpopup" title="Roles Report">   \
<p>      \
Unit <input   type="text" id="gmunitname" size=30 name="gmunitname"  placeholder="Enter Unit Name (% =wildcard)"/>  <button id="gmRunReport">Run Report</button> <button id="gmFilterReport">Apply New Filters</button></p> \
<p>Include Roles for matching Unit Only <input  type="checkbox" id="gmteamonly" name="gmteamonly" /><p> \
<p>Name Filter <input   type="text" id="gmpersonname" name="gmpersonname" /> Team Filter <input   type="text" id="gmteamname" name="gmteamname" /><p> \
<input   type="checkbox" id="gmmissing" name="gmmissing" /> Show volunteers missing  Welcome elements only \
<p> <input   type="checkbox" id="gmhelper" name="gmhelper" /> Exclude Helpers/Holding Roles <input   type="checkbox" id="gmclosed" name="gmclosed" checked/> Exclude Closed Roles <p> \
<p><input   type="checkbox" id="gmlearning" name="gmlearning" /> Show Detailed learning  \
<input   type="checkbox" id="gmdates" name="gmdates" /> Show Expiry Dates </P> \
<p><input   type="checkbox" id="gmdbs" name="gmdbs" /> Show DBS Information</p> \
<strongb>Run Status : </strong> <span id="gmState">Enter Unit Name above (can include % wildcard) and run report</span>  \
<p>Showing All Roles for members of <span id="gmUnit"></span></p>       \
<span id="gmTablex"><button id="gmXLS">Copy to Clipboard</button></span>  \
<span id="gmTablep"><button id="gmPrint">Print</button></span>  \
<span id="gmTable">Report will appear here!</span>  \
</div>  ';
    document.body.appendChild (newHTML);
    $("#gmpopup").hide();
    var iconSet1    = GM_getResourceURL ("IconSet1");
    var iconSet2    = GM_getResourceURL ("IconSet2");
    var jqUI_CssSrc = GM_getResourceText ("jqUI_CSS");

    jqUI_CssSrc     = jqUI_CssSrc.replace (/url\(images\/ui\-bg_.*00\.png\)/g, "");
    jqUI_CssSrc     = jqUI_CssSrc.replace (/images\/ui-icons_222222_256x240\.png/g, iconSet1);
    jqUI_CssSrc     = jqUI_CssSrc.replace (/images\/ui-icons_454545_256x240\.png/g, iconSet2);
  //  var testing = GM_info();
    GM_addStyle (jqUI_CssSrc);

    addButton("Role Report", report_onclick2, "","T");
  //  addButton("Clear Cookies", clear_cookies,"", "B");
    document.getElementById("gmRunReport").onclick = report_onclick;
    document.getElementById("gmFilterReport").onclick = report_filter;

    document.getElementById("gmXLS").onclick = report_download;
    document.getElementById("gmPrint").onclick = report_print;
    document.getElementById("gmunitname").value = un;
    document.getElementById("gmpopup").style.fontSize = "10pt";
    var blkrs = GM_info.script.options.override.use_blockers;
    if (blkrs.length>0) {
      var clicked = GM_notification({
        text: "There maybe an issue with your XHR blacklist this may stop thinks running - check the plugin settings",
          title: "Scout Membership Plugin",
          url: 'https:/example.com/',
       onclick: (event) => {
        //The userscript is still running, so don't open example.com
        event.preventDefault();
    // Display an alert message instead
//    alert('I was clicked!')
  }
});
    }


})();