This commit is contained in:
2024-10-23 20:54:14 -07:00
parent 6e79c658b4
commit fcfb936956
32 changed files with 334 additions and 81 deletions

View File

@ -1,7 +1,23 @@
var _apiUrl = null;
function compareFunction(a, b) {
return a.WeightedShortestJobFirst - b.WeightedShortestJobFirst || b.ParentId - a.ParentId || a.Id - b.Id;
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) {
@ -77,16 +93,63 @@ function getPriority(workItemType, priority) {
function updateRecordCoD(workItem) {
if (workItem !== null) {
if (workItem["RiskReductionMinusOpportunityEnablement"] === null || workItem["TimeCriticality"] === null || workItem["BusinessValue"] === null)
workItem["CoD"] === 0;
else
workItem["CoD"] === workItem["RiskReductionMinusOpportunityEnablement"] + workItem["TimeCriticality"] + workItem["BusinessValue"];
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 updateRecordWSJF(workItem) {
if (workItem["WeightedShortestJobFirst"] === null)
workItem["WeightedShortestJobFirst"] = 9999999;
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) {
@ -118,24 +181,26 @@ function getRecords(data) {
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);
updateRecordWSJF(workItem);
updateRecordOther(workItem);
updateRecordParent(parent, workItem);
records.push(workItem);
}
updateCoD(records);
records.sort(compareFunction);
return records;
}
function setRecords(workItems) {
var record;
var html = "<tr><th>Parent Id</th><th>Parent Title</th><th>Id</th><th>Requester</th><th>Title</th><th>Assigned To</th><th>System(s)</th><th>WSJF</th><th>Value</th><th>Up</th><th>Down</th></tr>";
var html = "<tr><th>Parent Id</th><th>Parent Title</th><th>Id</th><th>Requester</th><th>Title</th><th>Assigned To</th><th>System(s)</th><th>State</th><th>Priority</th><th>Risk Reduction and/or Opportunity Enablement</th><th>Time Criticality</th><th>Business Value</th><th>CoD</th><th>Effort</th><th>WSJF</th><th>Up</th><th>Down</th></tr>";
const element = document.getElementById("HeaderGrid");
for (var i = 0; i < workItems.length; i++) {
record = workItems[i];
@ -146,8 +211,14 @@ function setRecords(workItems) {
"</td><td>" + record.Title +
"</td><td>" + record.AssignedTo +
"</td><td>" + record.Tags +
"</td><td>" + record.State +
"</td><td>" + record.Priority +
"</td><td>" + record.RiskReductionMinusOpportunityEnablement + '-' + record.RiskReductionMinusOpportunityEnablementRank + '-' + record.RiskReductionMinusOpportunityEnablementFibonacci +
"</td><td>" + record.TimeCriticality + '-' + record.TimeCriticalityRank + '-' + record.TimeCriticalityFibonacci +
"</td><td>" + record.BusinessValue + '-' + record.BusinessValueRank + '-' + record.BusinessValueFibonacci +
"</td><td>" + record.CoD +
"</td><td>" + record.Effort + '-' + record.EffortRank + '-' + record.EffortFibonacci +
"</td><td>" + record.WeightedShortestJobFirst +
"</td><td>&nbsp;" +
"</td><td><a href='#' class='up'>Up</a></td><td><a href='#' class='down'>Down</a></td></tr>";
}
element.innerHTML = html.replaceAll(">null<", ">&nbsp;<");