var _apiUrl = null; function compareFunction(a, b) { return b.WeightedShortestJobFirst - a.WeightedShortestJobFirst || b.ParentId - a.ParentId || a.Id - b.Id; } function compareEffortFunction(a, b) { return a.Effort - b.Effort || b.ParentId - a.ParentId || a.Id - b.Id; } function compareBusinessValueFunction(a, b) { return a.BusinessValue - b.BusinessValue || b.ParentId - a.ParentId || a.Id - b.Id; } function compareTimeCriticalityFunction(a, b) { return a.TimeCriticality - b.TimeCriticality || b.ParentId - a.ParentId || a.Id - b.Id; } function compareRiskReductionMinusOpportunityEnablementFunction(a, b) { return b.RiskReductionMinusOpportunityEnablement - b.RiskReductionMinusOpportunityEnablement || b.ParentId - a.ParentId || a.Id - b.Id; } function showOne(rowData) { if (rowData == null) return; var data = []; data.push({ name: "Edit in ADO", value: 'Edit in ADO ' + rowData["Id"] + '' }); for (const property in rowData) { if (rowData[property] == null) continue; data.push({ name: property, value: rowData[property].toString() }); } $("#AllGrid").igGrid({ autoGenerateColumns: true, dataSource: data, width: "100%", showHeader: false, }); } function loadOne() { var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); if (selectedRow == null) return; var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; showOne(rowData); } function detailSelectionChangedRunInfo(evt, ui) { if (ui.row.index === 0) return; var rowData = ui.owner.grid.dataSource.dataView()[ui.row.index]; showOne(rowData); } function getState(state) { var result; if (state == null) result = "9-Null"; else if (state === "New") result = `1-${state}`; else if (state === "Active") result = `2-${state}`; else if (state === "Resolved") result = `3-${state}`; else if (state === "Closed") result = `4-${state}`; else if (state === "Removed") result = `5-${state}`; else result = `8-${state}`; return result; } function getPriority(workItemType, priority) { var result; if (workItemType === "Bug") result = "0-Bug"; else if (priority == null || priority === 0) result = "9-Null"; else if (priority === 1) result = `${priority}-High`; else if (priority === 2) result = `${priority}-Med`; else if (priority === 3) result = `${priority}-Low`; else if (priority === 4) result = `${priority}-TBD`; else result = "8-Not"; return result; } function updateRecordCoD(workItem) { if (workItem !== null) { if (workItem["Effort"] === null) workItem["Effort"] = 1; if (workItem["BusinessValue"] === null) workItem["BusinessValue"] = 99999; if (workItem["TimeCriticality"] === null) workItem["TimeCriticality"] = 99999; if (workItem["RiskReductionMinusOpportunityEnablement"] === null) workItem["RiskReductionMinusOpportunityEnablement"] = 99999; } } function getFibonacci(length) { var results = []; var i; var fib = [0, 1]; for (i = 2; i <= length + 1; i++) { fib[i] = fib[i - 2] + fib[i - 1]; results.push(fib[i]); } return results; } function updateCoD(records) { var workItem; var fibonacci = getFibonacci(records.length); records.sort(compareEffortFunction); for (var i = 0; i < records.length; i++) { workItem = records[i]; workItem.EffortRank = i + 1; workItem.EffortFibonacci = fibonacci[i]; } records.sort(compareBusinessValueFunction); for (var i = 0; i < records.length; i++) { workItem = records[i]; workItem.BusinessValueRank = i + 1; workItem.BusinessValueFibonacci = fibonacci[i]; } records.sort(compareTimeCriticalityFunction); for (var i = 0; i < records.length; i++) { workItem = records[i]; workItem.TimeCriticalityRank = i + 1; workItem.TimeCriticalityFibonacci = fibonacci[i]; } records.sort(compareRiskReductionMinusOpportunityEnablementFunction); for (var i = 0; i < records.length; i++) { workItem = records[i]; workItem.RiskReductionMinusOpportunityEnablementRank = i + 1; workItem.RiskReductionMinusOpportunityEnablementFibonacci = fibonacci[i]; } for (var i = 0; i < records.length; i++) { workItem = records[i]; workItem.CoD = workItem.RiskReductionMinusOpportunityEnablementFibonacci + workItem.TimeCriticalityFibonacci + workItem.BusinessValueFibonacci; if (workItem.Priority[0] !== '1') workItem.WeightedShortestJobFirst = 0.000001; else workItem.WeightedShortestJobFirst = workItem.CoD / workItem.EffortFibonacci; } } function updateRecordOther(workItem) { workItem["State"] = getState(workItem["State"]); workItem["Priority"] = getPriority(workItem["WorkItemType"], workItem["Priority"]); } function updateRecordParent(parent, workItem) { if (parent === null) { workItem["ParentId"] = 9999999; workItem["ParentTitle"] = null; workItem["ParentState"] = null; workItem["ParentCoD"] = 9999999; } else { workItem["ParentId"] = parent["Id"]; workItem["ParentCoD"] = parent["CoD"]; workItem["ParentTitle"] = parent["Title"]; workItem["ParentState"] = getState(parent["State"]); } } function getRecords(data) { var parent; var workItem; var records = []; for (var i = 0; i < data.length; i++) { parent = data[i].Parent; workItem = data[i].WorkItem; if (workItem.WorkItemType !== 'Feature') continue; if (workItem.State !== 'New' && workItem.State !== 'Active') continue; if (workItem.Tags != null && workItem.Tags.includes("Ignore")) continue; if ((window.location.href.indexOf('=LEO') > -1 && workItem.AreaPath !== 'ART SPS\\LEO') || (window.location.href.indexOf('=MES') > -1 && workItem.AreaPath !== 'ART SPS\\MES')) continue; updateRecordCoD(parent); updateRecordCoD(workItem); updateRecordOther(workItem); updateRecordParent(parent, workItem); records.push(workItem); } updateCoD(records); records.sort(compareFunction); return records; } function setRecords(workItems) { var record; var html = "