608 lines
25 KiB
JavaScript
608 lines
25 KiB
JavaScript
var _b = {};
|
|
var _c = {};
|
|
var _e = {};
|
|
var _r = {};
|
|
var _t = {};
|
|
var _w = {};
|
|
var _page = '';
|
|
var _site = '';
|
|
var _apiUrl = '';
|
|
var _toggle = true;
|
|
var _username = '';
|
|
var _machineId = '';
|
|
var _sessionId = '';
|
|
var _windowLocationHRef = '';
|
|
|
|
function compareFunctionSortOrder(a, b) {
|
|
return a.SortOrder - b.SortOrder;
|
|
}
|
|
|
|
function compareFunctionParentId(a, b) {
|
|
return a.ParentId - b.ParentId || a.Id - b.Id;
|
|
}
|
|
|
|
function compareFunctionWeightedShortestJobFirst(a, b) {
|
|
if (b.WeightedShortestJobFirst === ' ') {
|
|
return -1;
|
|
}
|
|
return b.WeightedShortestJobFirst - a.WeightedShortestJobFirst;
|
|
}
|
|
|
|
function getState(state) {
|
|
let result;
|
|
if (state == undefined)
|
|
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, sortPriorityGroup) {
|
|
let result;
|
|
if (workItemType === "Bug")
|
|
result = "0-Bug {0}";
|
|
else if (priority == undefined || priority === 0)
|
|
result = "9-Null {0}";
|
|
else if (priority === 1)
|
|
result = `${priority}-High {${sortPriorityGroup}}`;
|
|
else if (priority === 2)
|
|
result = `${priority}-Med {${sortPriorityGroup}}`;
|
|
else if (priority === 3)
|
|
result = `${priority}-Low {${sortPriorityGroup}}`;
|
|
else if (priority === 4)
|
|
result = `${priority}-TBD {4}`;
|
|
else
|
|
result = "8-Not {0}";
|
|
return result;
|
|
}
|
|
|
|
function getNotifications(x, aggregation) {
|
|
let result;
|
|
if (aggregation == undefined || aggregation.Notifications == undefined || aggregation.Notifications.length === 0)
|
|
result = " ";
|
|
else {
|
|
result = '';
|
|
aggregation.Notifications.forEach(element => {
|
|
const username = element.username == null ? 'user' : element.username;
|
|
if (element.value === "1") {
|
|
result += 'Highest:' + username + ';|';
|
|
}
|
|
else if (element.value === "2") {
|
|
result += 'High:' + username + ';|';
|
|
}
|
|
else if (element.value === "3") {
|
|
result += 'Medium:' + username + ';|';
|
|
}
|
|
else if (element.value === "4") {
|
|
result += 'Low:' + username + ';|';
|
|
}
|
|
else if (element.value === "5") {
|
|
result += 'Lowest:' + username + ';|';
|
|
}
|
|
else {
|
|
result += element.value + ':' + username + ';|';
|
|
}
|
|
});
|
|
result = result.substring(0, result.length - 1);
|
|
result = result.replaceAll('|', '<br />');
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function round(value, factor) {
|
|
return (Math.round((value + Number.EPSILON) * factor) / factor).toFixed(2);
|
|
}
|
|
|
|
function sum(collection) {
|
|
let sum = 0;
|
|
if (collection != undefined) {
|
|
for (let i = 0; i < collection.length; i++) {
|
|
sum += collection[i];
|
|
}
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
function updateRecordCoD(b, r, t, c, e, w, workItem, highestTotalStoryPoints, dataB, totalStoryPoints) {
|
|
if (workItem != undefined) {
|
|
let data = dataB == undefined ? undefined : dataB[workItem.Id];
|
|
if (data == undefined) {
|
|
workItem.CumulativeStoryPoints = " ";
|
|
workItem.TotalStoryPoints = " ";
|
|
workItem.AbsoluteDelta = " ";
|
|
workItem.Effort = " ";
|
|
workItem.BusinessValue = " ";
|
|
workItem.TimeCriticality = " ";
|
|
workItem.RiskReductionMinusOpportunityEnablement = " ";
|
|
workItem.CoD = " ";
|
|
workItem.WeightedShortestJobFirst = " ";
|
|
workItem.Priority = getPriority(workItem.WorkItemType, 4, 0);
|
|
workItem.EffortNotifications = " ";
|
|
workItem.BusinessValueNotifications = " ";
|
|
workItem.TimeCriticalityNotifications = " ";
|
|
workItem.RiskReductionMinusOpportunityEnablementNotifications = " ";
|
|
workItem.SortOrder = 0;
|
|
}
|
|
else {
|
|
workItem.CumulativeStoryPoints = " ";
|
|
workItem.TotalStoryPoints = totalStoryPoints + ' User Story Point(s)';
|
|
workItem.AbsoluteDelta = data.Effort == undefined || data.Effort.FibonacciAverage == undefined || totalStoryPoints == undefined || totalStoryPoints === 0 ? " " : round(Math.abs(data.Effort.FibonacciAverage - ((totalStoryPoints / highestTotalStoryPoints) * 5)), 1);
|
|
workItem.Effort = data.Effort == undefined || data.Effort.FibonacciAverage == undefined ? " " : round(data.Effort.FibonacciAverage, 100);
|
|
workItem.BusinessValue = data.BusinessValue == undefined || data.BusinessValue.FibonacciAverage == undefined ? " " : round(data.BusinessValue.FibonacciAverage, 100);
|
|
workItem.TimeCriticality = data.TimeCriticality == undefined || data.TimeCriticality.FibonacciAverage == undefined ? " " : round(data.TimeCriticality.FibonacciAverage, 100);
|
|
workItem.RiskReductionMinusOpportunityEnablement = data.RiskReductionOpportunityEnablement == undefined || data.RiskReductionOpportunityEnablement.FibonacciAverage == undefined ? " " : round(data.RiskReductionOpportunityEnablement.FibonacciAverage, 100);
|
|
workItem.CoD = data.CostOfDelay == undefined ? " " : round(data.CostOfDelay, 100);
|
|
workItem.WeightedShortestJobFirst = data.WeightedShortestJobFirst == undefined ? " " : round(data.WeightedShortestJobFirst, 100);
|
|
workItem.Priority = data.SortPriority == undefined ? getPriority(workItem.WorkItemType, 4, 0) : getPriority(workItem.WorkItemType, data.SortPriority, data.SortPriorityGroup);
|
|
workItem.EffortNotifications = data.Effort == undefined ? " " : getNotifications(e, data.Effort);
|
|
workItem.BusinessValueNotifications = data.BusinessValue == undefined ? " " : getNotifications(b, data.BusinessValue);
|
|
workItem.TimeCriticalityNotifications = data.TimeCriticality == undefined ? " " : getNotifications(t, data.TimeCriticality);
|
|
workItem.RiskReductionMinusOpportunityEnablementNotifications = data.RiskReductionOpportunityEnablement == undefined ? " " : getNotifications(r, data.RiskReductionOpportunityEnablement);
|
|
workItem.SortOrder = data.SortOrder == undefined ? 0 : data.SortOrder;
|
|
}
|
|
}
|
|
}
|
|
|
|
function updateRecordParent(parent, workItem) {
|
|
if (parent == undefined) {
|
|
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(b, r, t, c, e, w, data, dataB, workItems) {
|
|
let parent;
|
|
let workItem;
|
|
let storyPoints;
|
|
let records = [];
|
|
let totalStoryPoints;
|
|
let highestTotalStoryPoints = 0;
|
|
for (let i = 0; i < data.length; i++) {
|
|
workItem = data[i].WorkItem;
|
|
if (workItem.WorkItemType !== 'Feature')
|
|
continue;
|
|
if (workItem.State !== 'Active' && workItem.State !== 'New')
|
|
continue;
|
|
if (workItem.Tags != null && workItem.Tags.includes("Ignore"))
|
|
continue;
|
|
storyPoints = data[i].Tag?.StoryPoints == undefined ? null : JSON.parse(data[i].Tag.StoryPoints);
|
|
totalStoryPoints = sum(storyPoints);
|
|
if (totalStoryPoints > highestTotalStoryPoints)
|
|
highestTotalStoryPoints = totalStoryPoints;
|
|
}
|
|
for (let i = 0; i < data.length; i++) {
|
|
parent = data[i].Parent;
|
|
workItem = data[i].WorkItem;
|
|
if (workItem.WorkItemType !== 'Feature')
|
|
continue;
|
|
if (workItem.State !== 'Active' && workItem.State !== 'New')
|
|
continue;
|
|
if (workItem.Tags != null && workItem.Tags.includes("Ignore"))
|
|
continue;
|
|
storyPoints = data[i].Tag?.StoryPoints == undefined ? null : JSON.parse(data[i].Tag.StoryPoints);
|
|
totalStoryPoints = sum(storyPoints);
|
|
if ((_windowLocationHRef.indexOf('=LEO') > -1 && workItem.AreaPath !== 'ART SPS\\LEO') || (_windowLocationHRef.indexOf('=MES') > -1 && workItem.AreaPath !== 'ART SPS\\MES'))
|
|
continue;
|
|
updateRecordParent(parent, workItem);
|
|
updateRecordCoD(b, r, t, c, e, w, parent, highestTotalStoryPoints, null, null);
|
|
updateRecordCoD(b, r, t, c, e, w, workItem, highestTotalStoryPoints, dataB, totalStoryPoints);
|
|
workItem.State = getState(workItem.State);
|
|
records.push(workItem);
|
|
}
|
|
if (_windowLocationHRef.indexOf('=WSJF') > -1) {
|
|
records.sort(compareFunctionWeightedShortestJobFirst);
|
|
}
|
|
else if (_windowLocationHRef.indexOf('=LIVE') > -1) {
|
|
records.sort(compareFunctionSortOrder);
|
|
}
|
|
else {
|
|
records.sort(compareFunctionParentId);
|
|
}
|
|
return records;
|
|
}
|
|
|
|
function warn(message) {
|
|
if (typeof acquiredVsCodeApi === 'function')
|
|
acquiredVsCodeApi.postMessage(message);
|
|
console.warn(message);
|
|
}
|
|
|
|
function sendValue(fromHtml, element, page, id) {
|
|
let notification = {
|
|
id: id,
|
|
machineId: _machineId,
|
|
page: page,
|
|
sessionId: _sessionId,
|
|
site: _site,
|
|
time: new Date().getTime(),
|
|
username: _username,
|
|
value: element.value,
|
|
};
|
|
if (fromHtml && notification.value !== "9") {
|
|
$("#AllTextarea").hide();
|
|
document.getElementById('AllTextarea').value = '';
|
|
$.post(_apiUrl, notification)
|
|
.done(function (msg) {
|
|
console.log("Posted value of " + notification.value + " for " + id + " on page " + page + " " + msg);
|
|
})
|
|
.fail(function (_, textStatus, _) {
|
|
warn(textStatus);
|
|
});
|
|
}
|
|
}
|
|
|
|
function setRecords(fromHtml, b, r, t, c, e, w, records) {
|
|
let record;
|
|
let lineA = "";
|
|
let lineB = "";
|
|
let lineC = "";
|
|
let text = 'Id\tRisk Reduction and/or Opportunity Enablement\tTime Criticality\tBusiness Value\tCoD\tEffort\tWSJF\tFeature Total Story Points\tAbsolute Delta\tState\tRequester\tAssigned To\tIteration Path\tSystem\tTitle\r\n';
|
|
let 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>Cost of Delay (CoD)</th><th>Effort</th><th>WSJF</th></tr>';
|
|
for (let i = 0; i < records.length; i++) {
|
|
record = records[i];
|
|
text += record.Id + '\t' +
|
|
record.RiskReductionMinusOpportunityEnablement + '\t' +
|
|
record.TimeCriticality + '\t' +
|
|
record.BusinessValue + '\t' +
|
|
record.CoD + '\t' +
|
|
record.Effort + '\t' +
|
|
record.WeightedShortestJobFirst + '\t' +
|
|
record.TotalStoryPoints.split(' ')[0] + '\t' +
|
|
record.AbsoluteDelta + '\t' +
|
|
record.State.split('-')[0] + '\t' +
|
|
record.Requester + '\t' +
|
|
record.AssignedTo + '\t' +
|
|
record.IterationPath + '\t' +
|
|
record.Tags + '\t' +
|
|
record.Title + '\r\n';
|
|
lineA = '<tr id="tr' + record.Id + '"><td>' + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
|
'</td><td>' + record.ParentTitle +
|
|
'</td><td>' + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.Id + '">' + record.Id + "</a>" +
|
|
'</td><td>' + record.Requester +
|
|
'</td><td>' + record.Title +
|
|
'</td><td>' + record.AssignedTo +
|
|
'</td><td>' + record.Tags +
|
|
'</td><td>' + record.State +
|
|
'</td><td>' + record.Priority +
|
|
'</td><td><span id=' + r.page + record.Id + '>' + record.RiskReductionMinusOpportunityEnablementNotifications + '</span><br />' +
|
|
'<select class="select" onchange="sendValue(' + fromHtml + ', this, \'' + r.page + '\', ' + record.Id + ')">' +
|
|
'<option value="9">Unknown</option>' +
|
|
'<option value="1">Highest (Most ' + r.description + ')</option>' +
|
|
'<option value="2">High</option>' +
|
|
'<option value="3">Medium</option>' +
|
|
'<option value="4">Low</option>' +
|
|
'<option value="5">Lowest</option>' +
|
|
'</select>' +
|
|
'</td><td><span id=' + t.page + record.Id + '>' + record.TimeCriticalityNotifications + '</span><br />' +
|
|
'<select class="select" onchange="sendValue(' + fromHtml + ', this, \'' + t.page + '\', ' + record.Id + ')">' +
|
|
'<option value="9">Unknown</option>' +
|
|
'<option value="1">Highest (Most ' + t.description + ')</option>' +
|
|
'<option value="2">High</option>' +
|
|
'<option value="3">Medium</option>' +
|
|
'<option value="4">Low</option>' +
|
|
'<option value="5">Lowest</option>' +
|
|
'</select>' +
|
|
'</td><td><span id=' + b.page + record.Id + '>' + record.BusinessValueNotifications + '</span><br />' +
|
|
'<select class="select" onchange="sendValue(' + fromHtml + ', this, \'' + b.page + '\', ' + record.Id + ')">' +
|
|
'<option value="9">Unknown</option>' +
|
|
'<option value="1">Highest (Most ' + b.description + ')</option>' +
|
|
'<option value="2">High</option>' +
|
|
'<option value="3">Medium</option>' +
|
|
'<option value="4">Low</option>' +
|
|
'<option value="5">Lowest</option>' +
|
|
'</select>' +
|
|
'</td><td><span id=' + c.page + record.Id + '>' + record.CoD + '</span>' +
|
|
'</td><td><span id=' + e.page + record.Id + '>' + record.EffortNotifications + '</span><br />';
|
|
if (!fromHtml || _windowLocationHRef.indexOf('=EFFORT') === -1) {
|
|
lineB = '';
|
|
}
|
|
else {
|
|
lineB = '<select class="select" onchange="sendValue(' + fromHtml + ', this, \'' + e.page + '\', ' + record.Id + ')">' +
|
|
'<option value="9">Unknown</option>' +
|
|
'<option value="1">Highest (Most ' + e.description + ')</option>' +
|
|
'<option value="2">High</option>' +
|
|
'<option value="3">Medium</option>' +
|
|
'<option value="4">Low</option>' +
|
|
'<option value="5">Lowest</option>' +
|
|
'</select><br />';
|
|
}
|
|
lineC = '<span>' + record.TotalStoryPoints + '</span></td>' +
|
|
'<td><span id=' + w.page + record.Id + '>' + record.WeightedShortestJobFirst + '<br /><span>' + record.CumulativeStoryPoints + '</span></span>' +
|
|
'</td></tr>';
|
|
if (!fromHtml)
|
|
console.log(text);
|
|
html += lineA + lineB + lineC;
|
|
}
|
|
if (fromHtml) {
|
|
document.getElementById('HeaderGrid').innerHTML = html.replaceAll('>null<', '> <');
|
|
if (_windowLocationHRef.indexOf('=WSJF') === -1) {
|
|
document.getElementById('AllTextarea').value = text.replaceAll('null', '').replaceAll(' ', '');
|
|
}
|
|
else {
|
|
_toggle = !_toggle;
|
|
$(".select").hide();
|
|
$("#AllTextarea").hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
function updateSite(c, w) {
|
|
if (_windowLocationHRef.indexOf('=LEO') > -1) {
|
|
_site = 'LEO';
|
|
document.title = document.title.replace('Infineon', 'HiRel (Leominster)');
|
|
document.getElementById('siteHeader').innerText = 'HiRel (Leominster)';
|
|
}
|
|
else if (_windowLocationHRef.indexOf('=MES') > -1) {
|
|
_site = 'MES';
|
|
document.title = document.title.replace('Infineon', 'Mesa');
|
|
document.getElementById('siteHeader').innerText = 'Mesa';
|
|
}
|
|
else {
|
|
_site = 'Infineon';
|
|
document.title = document.title.replace('Infineon', 'Infineon');
|
|
document.getElementById('siteHeader').innerText = 'Infineon';
|
|
}
|
|
if (_windowLocationHRef.indexOf('=WSJF') > -1) {
|
|
document.getElementById('th-span').innerHTML = w.th + ' sorted by WSJF';
|
|
}
|
|
else if (_windowLocationHRef.indexOf('=LIVE') > -1) {
|
|
document.getElementById('th-span').innerHTML = c.th + ' sorted by CoD';
|
|
}
|
|
else if (_windowLocationHRef.indexOf('=EFFORT') > -1) {
|
|
document.getElementById('th-span').innerHTML = c.th + ' sorted by Parent Id';
|
|
}
|
|
else {
|
|
document.getElementById('th-span').innerHTML = c.th + ' sorted by Parent Id';
|
|
}
|
|
}
|
|
|
|
function setDocument(fromHtml, b, r, t, c, e, w, dataA, dataB, workItems) {
|
|
let records = getRecords(b, r, t, c, e, w, dataA, dataB, workItems);
|
|
console.log(dataA.length);
|
|
if (dataA.length > 0)
|
|
console.log(dataA[0]);
|
|
setRecords(fromHtml, b, r, t, c, e, w, records);
|
|
$("#toggle").click(function () {
|
|
if (_toggle)
|
|
$(".select").hide();
|
|
else
|
|
$(".select").show();
|
|
_toggle = !_toggle;
|
|
});
|
|
}
|
|
|
|
function highlight(el, i) {
|
|
el.before("<tr/>")
|
|
el.prev()
|
|
.width(el.width())
|
|
.height(el.height())
|
|
.css({
|
|
"position": "absolute",
|
|
"background-color": "#ffff99",
|
|
"opacity": ".9"
|
|
})
|
|
.fadeOut(1000 * i);
|
|
}
|
|
|
|
function updateWorkItem(b, r, t, c, e, w, page, workItem) {
|
|
console.log(workItem);
|
|
let x = null;
|
|
let aggregation = null;
|
|
if (page === b.page) {
|
|
x = b;
|
|
aggregation = workItem.BusinessValue;
|
|
}
|
|
else if (page === r.page) {
|
|
x = r;
|
|
aggregation = workItem.RiskReductionOpportunityEnablement;
|
|
}
|
|
else if (page === t.page) {
|
|
x = t;
|
|
aggregation = workItem.TimeCriticality;
|
|
}
|
|
else if (page === e.page) {
|
|
x = e;
|
|
aggregation = workItem.Effort;
|
|
}
|
|
if (x == undefined)
|
|
warn("Error with page!");
|
|
else if (aggregation.FibonacciAverage == undefined)
|
|
warn("FibonacciAverage not set!");
|
|
else {
|
|
$('#' + x.page + workItem.Id).text('!' + round(aggregation.FibonacciAverage, 100));
|
|
if (workItem.WeightedShortestJobFirst != undefined) {
|
|
$('#' + w.page + workItem.Id).text('!' + round(workItem.WeightedShortestJobFirst, 100));
|
|
}
|
|
if (workItem.CostOfDelay != undefined) {
|
|
let element = $('#' + c.page + workItem.Id);
|
|
element.text('!' + round(workItem.CostOfDelay, 100));
|
|
if (_windowLocationHRef.indexOf('=LIVE') > -1) {
|
|
if (workItem.SortBeforeId != undefined) {
|
|
let found = 0;
|
|
let row = element.parents("tr:first");
|
|
let next = row;
|
|
for (let i = 0; i < 150; i++) {
|
|
next = next.next();
|
|
if (next == undefined)
|
|
break;
|
|
if (next.attr('id') != 'tr' + workItem.SortBeforeId)
|
|
continue;
|
|
console.log("Moved " + i + " down");
|
|
row.insertAfter(next);
|
|
found = i;
|
|
break;
|
|
}
|
|
if (!found) {
|
|
let prev = row;
|
|
for (let i = 0; i < 150; i++) {
|
|
prev = prev.prev();
|
|
if (prev == undefined)
|
|
break;
|
|
if (prev.attr('id') != 'tr' + workItem.SortBeforeId)
|
|
continue;
|
|
console.log("Moved " + i + " up");
|
|
row.insertAfter(prev);
|
|
found = i;
|
|
break;
|
|
}
|
|
}
|
|
if (found != 0) {
|
|
highlight(row, found);
|
|
}
|
|
else {
|
|
console.log("Not found!");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
function setupPingPong() {
|
|
let notification = {
|
|
id: null,
|
|
machineId: _machineId,
|
|
page: _page,
|
|
sessionId: _sessionId,
|
|
site: _site,
|
|
time: new Date().getTime(),
|
|
username: _username,
|
|
value: null,
|
|
};
|
|
$.get(_apiUrl, notification)
|
|
.done(function (data) {
|
|
if (data != undefined && data.length > 0) {
|
|
keyValuePair = JSON.parse(data);
|
|
if (keyValuePair.Key != undefined && keyValuePair.Value.Id != undefined && keyValuePair.Value != undefined) {
|
|
updateWorkItem(_b, _r, _t, _c, _e, _w, keyValuePair.Key, keyValuePair.Value);
|
|
}
|
|
}
|
|
})
|
|
.fail(function (_, textStatus, _) {
|
|
warn(textStatus);
|
|
});
|
|
}
|
|
|
|
function initIndex(fromHtml, username, machineId, windowLocationHRef, workItems, b, r, t, c, e, w, apiUrl, _) {
|
|
_b = b;
|
|
_r = r;
|
|
_t = t;
|
|
_c = c;
|
|
_e = e;
|
|
_w = w;
|
|
_page = _b.page;
|
|
_apiUrl = apiUrl;
|
|
_username = username;
|
|
_machineId = machineId;
|
|
_windowLocationHRef = windowLocationHRef;
|
|
_sessionId = _windowLocationHRef.indexOf('=LIVE') > -1 ? self.crypto.randomUUID() : '';
|
|
if (!fromHtml) {
|
|
console.log(b);
|
|
console.log(r);
|
|
console.log(t);
|
|
console.log(c);
|
|
console.log("Done :)");
|
|
}
|
|
else {
|
|
updateSite(c, w);
|
|
$.getJSON(workItems.b, { _: new Date().getTime() }, function (dataB) {
|
|
$.getJSON(workItems.a, { _: new Date().getTime() }, function (dataA) {
|
|
setDocument(fromHtml, b, r, t, c, e, w, dataA, dataB, workItems);
|
|
if (_windowLocationHRef.indexOf('=LIVE') > -1) {
|
|
_ = setInterval(setupPingPong, workItems.timeout);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
// #region Test
|
|
|
|
if (typeof document == 'undefined') {
|
|
const username = '';
|
|
const machineId = '';
|
|
const fromHtml = false;
|
|
const baseUri = 'http://eaf-dev.mes.infineon.com:5054';
|
|
const apiUrl = baseUri + '/api/v1/ado/';
|
|
const windowLocationHRef = baseUri + '/html/cod.html?site=MES';
|
|
const signalRUrl = baseUri + '/signalr';
|
|
const workItems = {
|
|
a: baseUri + '/markdown/bugs-features-with-parents.json?v=2025-04-14-08-10',
|
|
b: baseUri + '/markdown/{}.json?v=2025-04-14-08-10',
|
|
timeout: 3000,
|
|
};
|
|
const b = {
|
|
page: "business",
|
|
description: "Value",
|
|
th: "Business Value",
|
|
span: "What is the relative value to the Customer or business?<br>• Do our users prefer this over that?<br>• What is the revenue impact on our business?<br>• Is there a potential penalty or other negative effects if we delay?"
|
|
};
|
|
const r = {
|
|
page: "risk",
|
|
description: "Risk",
|
|
th: "Risk Reduction and/or Opportunity Enablement",
|
|
span: "What else does this do for our business?<br>• Reduce the risk of this or future delivery?<br>• Is there value in the information we will receive?<br>• Enable new business opportunities?"
|
|
};
|
|
const t = {
|
|
page: "time",
|
|
description: "Critical",
|
|
th: "Time Criticality",
|
|
span: "How does user/business value decay over time?<br>• Is there a fixed deadline?<br>• Will they wait for us or move to another Solution?<br>• What is the current effect on Customer satisfaction?"
|
|
};
|
|
const c = {
|
|
page: "cod",
|
|
description: "CoD",
|
|
th: "Cost of Delay (CoD)",
|
|
span: "Cost of Delay (CoD) is the money lost by delaying or not doing a job for a specific time. It's a measure of the economic value of a job over time."
|
|
};
|
|
const e = {
|
|
page: "effort",
|
|
description: "Effort",
|
|
th: "Effort",
|
|
span: "Effort"
|
|
};
|
|
const w = {
|
|
page: "wsjf",
|
|
description: "WSJF",
|
|
th: "Weightest Shortest Job First calculation (WSJF)",
|
|
span: "Weightest Shortest Job First calculation (see @SCALE formula)"
|
|
};
|
|
_windowLocationHRef = windowLocationHRef;
|
|
fetch(workItems.b, { _: new Date().getTime() })
|
|
.then((res) => res.text())
|
|
.then((textB) => {
|
|
fetch(workItems.a, { _: new Date().getTime() })
|
|
.then((res) => res.text())
|
|
.then((textA) => {
|
|
const dataA = JSON.parse(textA);
|
|
const dataB = JSON.parse(textB);
|
|
if (dataA.length > 0)
|
|
console.log(dataA[0]);
|
|
const records = getRecords(b, r, t, c, e, w, dataA, dataB, workItems);
|
|
setRecords(fromHtml, b, r, t, c, e, w, records);
|
|
initIndex(fromHtml, username, machineId, windowLocationHRef, workItems, b, r, t, c, e, w, apiUrl, signalRUrl);
|
|
})
|
|
.catch((e) => console.error(e));
|
|
})
|
|
.catch((e) => console.error(e));
|
|
}
|
|
|
|
// #endregion Test
|