Bhimashankar H
Mega Sage

Hi @1_DipikaD ,

 

You need to add the endcodedQuery an additional query where you are doing the glideRecord on 'change_request'.

 

I have updated in below code snippet.

 

function getCurrentWeekCabMeetings() {
    var chgngs = [];
    var chngIds, manager;
    var grCabMeet = new GlideRecord('cab_meeting');
    //grCabMeet.addEncodedQuery('startRELATIVEGE@dayofweek@ago@7^start<=javascript&colon;gs.endOfToday()'); // Commented under GLITSME-5893
    //grCabMeet.addEncodedQuery('startRELATIVEGE@dayofweek@ago@7^start<javascript&colon;gs.beginningOfToday()');//Commented under GLITSME-6033
    grCabMeet.addEncodedQuery('startRELATIVEGE@dayofweek@ago@7^start<javascript&colon;gs.beginningOfToday()^nameNOT LIKEXITBU^nameNOT LIKEDigital Workspace^nameNOT LIKEEmergency CAB'); //Added under GLITSME-6033

    grCabMeet.query();
    while (grCabMeet.next()) {
        gs.info("meet-->" + grCabMeet.name);
        chngIds = [];
        chngIds = checkChangesOutsideCab(grCabMeet);
        if (chngIds.length != 0) {
            chgngs = chgngs.concat(chngIds);
        }
    }
    gs.info('Total changes, added to CAB as not represented : ' + chgngs);
    gs.info('Total changes, added Division level Senior Management Group approval : ' + checkSnrMngmtGroupApproval(chgngs));
}

function checkChangesOutsideCab(cab) {
    var chng = [];
    var strtDate = cab.start.getDisplayValue();
    var msg = "Please note, this change is not represented in the CAB meeting ";
    var gdt = new GlideDateTime(strtDate);
    gdt.addDaysLocalTime(7);
    var endDate = gdt.getDisplayValue();
    var qry = "start_dateBETWEENjavascript&colon;gs.dateGenerate('" + strtDate + "')@javascript&colon;gs.dateGenerate('" + endDate + "')^typeNOT INemergency,standard^ORtype=^u_category_3.u_name!=BDC^ORu_category_3.u_name=^risk!=3";
    gs.info("cab-->" + cab.name + "cond-->" + cab.change_condition + "---sysid--" + cab.sys_id + "---qry-->" + qry);
    var grChg = new GlideRecord('change_request');
    var grChg1;
    grChg.addEncodedQuery(cab.change_condition);
    grChg.query();
    while (grChg.next()) {
        gs.info("no of records-->" + grChg.getRowCount());
        gs.info("1-->" + grChg.number);
        var tempObj = {};
        grChg1 = new GlideRecord('change_request');
        grChg1.addEncodedQuery(qry);
        grChg1.addQuery('sys_id', grChg.sys_id);
        grChg1.query();
        if (grChg1.next()) {
            gs.info("2-->" + grChg.number);
            if (checkAgendaItemPresent(grChg1.sys_id) == 'no') {
                gs.info("3-->" + grChg1.number, "Vikas");
                tempObj.sysID = grChg1.sys_id.toString();
                tempObj.comment = msg + cab.name + " held on " + cab.start + " GMT";
                tempObj.number = grChg1.number;
                tempObj.start_date = grChg1.start_date;
                tempObj.end_date = grChg1.end_date;
                tempObj.state = grChg1.state;
                chng.push(tempObj);
            }
        }
    }

    return chng;
}

function checkAgendaItemPresent(chg) {
    var chng = [];
    var grAgn = new GlideRecord('cab_agenda_item');
    //Changes for JIRA GLITSME-6649 Start
    /*
    grAgn.addQuery('task', chg);
    grAgn.addQuery('state', '!=', 'Not Represented');
    grAgn.addQuery('cab_meeting.state', '!=', 'canceled');*/
    var enCodedQuery = 'task=' + chg + '^state!=Not Represented^cab_meeting.state!=canceled^cab_meeting.startRELATIVEGT@dayofweek@ago@7^cab_meeting.start<javascript&colon;gs.beginningOfToday()^cab_meeting.nameNOT LIKEXITBU^cab_meeting.nameNOT LIKEDigital Workspace^cab_meeting.nameNOT LIKEEmergency CAB';
    grAgn.addEncodedQuery(enCodedQuery);
    grAgn.query(); //Changes for JIRA GLITSME-6649 End

    if (grAgn.next()) {
        return 'yes';
    }
    return 'no';
}

function checkSnrMngmtGroupApproval(chgsToBeChkd) {
    var nums = '';
    var chng;
    var grAprvNew;
    var chgOnHold = [];
    var lstArr = [];
    var chgStr = '';
    var recipient = 'managementworkinggroup@gmail.com';

    for (var i = 0; i < chgsToBeChkd.length; i++) {
        chng = new GlideRecord('change_request');
        chng.addQuery('sys_id', chgsToBeChkd[i].sysID);
        chng.query();
        if (chng.next()) {
            var wNots = chng.comments.getJournalEntry(-1);
            if (wNots.indexOf('Please note, this change is not represented in the CAB meeting') < 0) {
                chng.comments = chgsToBeChkd[i].comment;
                chng.u_cab_not_represented = true;
                chng.u_represented_in_itbu_cab = false;
                chng.update();
            }
            var grp = chng.u_regional_division_approvers + ''; //calculateDivisionlGroups(chng.u_owning_itbu, chng.u_impacted_regions);
            //gs.info('Total changes, calculateDivisionlGroups : '+grp+'--'+chng.number);
            var groups = grp.split(',');
            for (var j = 0; j < groups.length; j++) {

                var qry = 'parent=' + chng.sys_id + '^assignment_group=' + groups[j] + '^approvalINnot requested,requested,approved';
                var grAprv = new GlideRecord('sysapproval_group');
                grAprv.addEncodedQuery(qry);
                grAprv.orderByDesc('short_description');
                grAprv.query();
                var commt = "Approval Added as this Change is not represented in the CAB";
                if (grAprv.next()) {

                    if (grAprv.short_description != 'Approval Added as this Change is not represented in the CAB' || grAprv.short_description == '') {
                        if (grAprv.approval != 'approved') {
                            grAprv.short_description = 'Approval Added as this Change is not represented in the CAB';
                            grAprv.comments = "Approval Added as this Change is not represented in the CAB\n\nApproval was added either manually or through pre-defined approval matrix";
                            grAprv.update();
                        } else {
                            ins_update_groupApproval(chng.sys_id, groups[j], commt, commt, 'insert');
                            nums += chng.number + ',';
                        }
                    }
                } else {
                    ins_update_groupApproval(chng.sys_id, groups[j], commt, commt, 'insert');
                    nums += chng.number + ',';
                }
            }
            //-----Start GLITSME-13178-----//
            if (!chgOnHold.includes(chgsToBeChkd[i].sysID)) {
                chgOnHold.push(chgsToBeChkd[i].sysID.toString());
                var manager = '';
                var grGetManager = new GlideRecord('cab_agenda_item');
                grGetManager.addEncodedQuery('task=' + chgsToBeChkd[i].sysID + '^state=Not Represented^cab_meeting.state!=canceled^cab_meeting.startRELATIVEGT@dayofweek@ago@7^cab_meeting.start<javascript&colon;gs.beginningOfToday()^cab_meeting.nameNOT LIKEXITBU^cab_meeting.nameNOT LIKEDigital Workspace^cab_meeting.nameNOT LIKEEmergency CAB');
                grGetManager.orderByDesc('cab_meeting.end');
                grGetManager.query();
                if (grGetManager.next()) {
                    manager = grGetManager.cab_meeting.manager;
                } else {
                    var grGrp = new GlideRecord('sys_user_group');
                    grGrp.get('6a7cf36a1bd1b854b7395281604bcb63');
                    manager = grGrp.manager;
                }
                var notifCommts = "Please note, this change is currently on-hold as it was not represented in the CAB meeting. Please reschedule or contact change management group. Thanks.";
                var sysAppr = new GlideRecord('sysapproval_approver');
                sysAppr.addEncodedQuery('sysapproval.sys_id=' + chgsToBeChkd[i].sysID + '^state=More Info^ORstate=On Hold^ORstate=requested^group.assignment_group=6a7cf36a1bd1b854b7395281604bcb63^approver=' + manager);
                sysAppr.query();
                var cmmts = "Auto on-hold as this change is not represented in the CAB";
                if (sysAppr.hasNext()) {
                    sysAppr.next();
                    if (sysAppr.state == 'requested') {
                        var chgNum = sysAppr.sysapproval.number;
                        var chgSysId = sysAppr.sysapproval.sys_id;
                        var apprGrp = sysAppr.group.assignment_group;
                        sysAppr.state = 'More Info';
                        sysAppr.update();
                        new global.ApprovalSelectAjax().setMoreInfo(notifCommts, sysAppr, chgSysId, apprGrp, gs.getUserID(), gs.getUserName());
                        ins_update_groupApproval(chgSysId, apprGrp, cmmts, cmmts, 'update');
                    }
                } else {
                    var state;
                    switch (chgsToBeChkd[i].state.toString()) {
                        case "0":
                            state = "Review";
                            break;
                        case "3":
                            state = "Closed";
                            break;
                        case "4":
                            state = "Cancelled";
                            break;
                        case "-1":
                            state = "Implementation in progress";
                            break;
                        case "-2":
                            state = "Scheduled";
                            break;
                        case "-3":
                            state = "Scheduled for Approval";
                           /* break;
                        case "-4":
                            state = "Planning in progress";
                            break;
                        case "-5":
                            state = "Draft";*/
                    }

                    var chgObj = {
                        number: chgsToBeChkd[i].number.toString(),
                        state: state,
                        plannedStartDate: chgsToBeChkd[i].start_date.toString(),
                        plannedEndDate: chgsToBeChkd[i].end_date.toString(),
                        url: gs.getProperty('glide.servlet.uri') + "change_request.do?sys_id=" + chgsToBeChkd[i].sysID,
                    };

                    lstArr.push(chgObj);

                    chgStr += chgsToBeChkd[i].number;
                    chgStr += ',';
                }
            }
            //-----End GLITSME-13178 --------//
        }
    }

    if (lstArr.length) {
        var chnggr = new GlideRecord('change_request');
        chnggr.addEncodedQuery('numberIN' + chgStr.slice(0, -1));

        //Start Added Query

       chnggr.addEncodedQuery('stateNOT INdraft, in progress');  //Take this query from change request table by applying state 'is not one of the' draft, in progress

        //End Added Query

        chnggr.query();
        chnggr.next();
        var lstStr = JSON.stringify(lstArr);
        gs.eventQueue('sn_change_cab.more_info', chnggr, lstStr, recipient);
    }
    return nums;
}

function ins_update_groupApproval(chgSysId, group, short_description, comments, action) {
    var grAprvNew = new GlideRecord('sysapproval_group');
    if (action == 'insert') {
        grAprvNew.initialize();
        grAprvNew.parent = chgSysId;
        grAprvNew.assignment_group = group;
        grAprvNew.short_description = short_description;
        grAprvNew.comments = comments;
        grAprvNew.insert();
    } else if (action == 'update') {
        grAprvNew.addEncodedQuery('parent.sys_id=' + chgSysId + '^assignment_group=' + group + '^active=true');
        grAprvNew.query();
        if (grAprvNew.next()) {
            grAprvNew.short_description = short_description;
            grAprvNew.comments = comments;
            grAprvNew.update();
        }
    }
}


function calculateDivisionlGroups(div, regns) {
    var aprvrs = [];
    var qry = 'u_division.nameINRisk & Capital IT,NAM EU,mmGlobal Markets,Wholesale Data & Operations Technology,Corporate Technology Services,Enterprise Infrastructure Services,Global Technology Services,Wealth Management,Investment Banking Technology,Data Management Technology,Wholesale Production Services,GM Business,Japan Business Services,Corporate Production Services,Market Data Services,Wholesale Operations IT,Client Services Technology,Wholesale Data Services,NAM MY,Group Platform Services & Engineering,Domestic Technology Strategy^u_regionISNOTEMPTY^u_type=Approval^u_division=' + div + '^u_regionIN' + regns;
    var grDiv = new GlideRecord('u_division');
    grDiv.addEncodedQuery(qry);
    grDiv.query();
    while (grDiv.next()) {
        if (aprvrs.indexOf(grDiv.u_approval_group) < 0) {
            aprvrs.push(grDiv.u_approval_group);
        }
    }
    return aprvrs + '';
}

getCurrentWeekCabMeetings();

 

Give it try. Let me know if any additional information you want.

 

 Thanks,
Bhimashankar H

 

-------------------------------------------------------------------------------------------------
If my response points you in the right directions, please consider marking it as 'Helpful' & 'Correct'.  Thanks!

View solution in original post