Compare commits
3 Commits
ca4ebff54c
...
a343243576
| Author | SHA1 | Date | |
|---|---|---|---|
| a343243576 | |||
| 304bf04afe | |||
| 08a23114c9 |
6
Adaptation/.vscode/launch.json
vendored
6
Adaptation/.vscode/launch.json
vendored
@ -5,6 +5,12 @@
|
|||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "attach",
|
"request": "attach",
|
||||||
"processId": 25140
|
"processId": 25140
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "node Launch Current Opened File",
|
||||||
|
"program": "${file}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -224,7 +224,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
||||||
File.WriteAllText(".email", body);
|
File.WriteAllText(".email", body);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
@ -242,7 +242,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
||||||
File.WriteAllText(".email", body);
|
File.WriteAllText(".email", body);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
|
|||||||
@ -138,7 +138,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
||||||
File.WriteAllText(".email", body);
|
File.WriteAllText(".email", body);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
@ -269,7 +269,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
||||||
File.WriteAllText(".email", body);
|
File.WriteAllText(".email", body);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
@ -285,7 +285,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
||||||
File.WriteAllText(".email", body);
|
File.WriteAllText(".email", body);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
|
|||||||
@ -110,6 +110,8 @@ public class ProcessData : IProcessData
|
|||||||
private static FileInfo GetFileInfoAndMaybeWriteFile(string directory, WorkItem workItem)
|
private static FileInfo GetFileInfoAndMaybeWriteFile(string directory, WorkItem workItem)
|
||||||
{
|
{
|
||||||
FileInfo result;
|
FileInfo result;
|
||||||
|
if (!Directory.Exists(directory))
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
string json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem);
|
string json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem);
|
||||||
string singletonDirectory = Path.Combine(directory, $"{workItem.Id}");
|
string singletonDirectory = Path.Combine(directory, $"{workItem.Id}");
|
||||||
if (Directory.Exists(singletonDirectory))
|
if (Directory.Exists(singletonDirectory))
|
||||||
@ -213,9 +215,13 @@ public class ProcessData : IProcessData
|
|||||||
{
|
{
|
||||||
string old;
|
string old;
|
||||||
string checkFile;
|
string checkFile;
|
||||||
|
string checkDirectory;
|
||||||
foreach (string iterationPath in distinct)
|
foreach (string iterationPath in distinct)
|
||||||
{
|
{
|
||||||
checkFile = Path.Combine(destinationDirectory, iterationPath, "[].json");
|
checkDirectory = Path.Combine(destinationDirectory, iterationPath);
|
||||||
|
if (!Directory.Exists(checkDirectory))
|
||||||
|
_ = Directory.CreateDirectory(checkDirectory);
|
||||||
|
checkFile = Path.Combine(checkDirectory, "[].json");
|
||||||
old = File.Exists(checkFile) ? File.ReadAllText(checkFile) : string.Empty;
|
old = File.Exists(checkFile) ? File.ReadAllText(checkFile) : string.Empty;
|
||||||
if (old != json)
|
if (old != json)
|
||||||
File.WriteAllText(checkFile, json);
|
File.WriteAllText(checkFile, json);
|
||||||
|
|||||||
@ -1,38 +1,194 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Adaptation.FileHandlers.Priority;
|
namespace Adaptation.FileHandlers.Priority;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
public class Aggregation
|
public class Aggregation
|
||||||
{
|
{
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public Aggregation(
|
public Aggregation(double inverseAverage,
|
||||||
string average,
|
int valueCount,
|
||||||
int count,
|
double fibonacciAverage,
|
||||||
int? inverse,
|
int? inverseValue,
|
||||||
int maximum,
|
int valueMaximum,
|
||||||
int minimum,
|
int valueMinimum,
|
||||||
ReadOnlyCollection<Record> records,
|
Notification[] notifications,
|
||||||
int sum
|
int valueSum)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
Average = average;
|
InverseAverage = inverseAverage;
|
||||||
Count = count;
|
ValueCount = valueCount;
|
||||||
Inverse = inverse;
|
FibonacciAverage = fibonacciAverage;
|
||||||
Maximum = maximum;
|
InverseValue = inverseValue;
|
||||||
Minimum = minimum;
|
ValueMaximum = valueMaximum;
|
||||||
Records = records;
|
ValueMinimum = valueMinimum;
|
||||||
Sum = sum;
|
Notifications = notifications;
|
||||||
|
ValueSum = valueSum;
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonPropertyName("Average")] public string Average { get; }
|
public double InverseAverage { get; } // [JsonPropertyName("InverseAverage")]
|
||||||
[JsonPropertyName("Count")] public int Count { get; }
|
public int ValueCount { get; } // [JsonPropertyName("ValueCount")]
|
||||||
[JsonPropertyName("Inverse")] public int? Inverse { get; }
|
public double FibonacciAverage { get; } // [JsonPropertyName("Fibonacci")]
|
||||||
[JsonPropertyName("Maximum")] public int Maximum { get; }
|
public int? InverseValue { get; } // [JsonPropertyName("InverseValue")]
|
||||||
[JsonPropertyName("Minimum")] public int Minimum { get; }
|
public int ValueMaximum { get; } // [JsonPropertyName("ValueMaximum")]
|
||||||
[JsonPropertyName("Records")] public ReadOnlyCollection<Record> Records { get; }
|
public int ValueMinimum { get; } // [JsonPropertyName("ValueMinimum")]
|
||||||
[JsonPropertyName("Sum")] public int Sum { get; }
|
public Notification[] Notifications { get; } // [JsonPropertyName("Notifications")]
|
||||||
|
public int ValueSum { get; } // [JsonPropertyName("ValueSum")]
|
||||||
|
|
||||||
|
private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, Dictionary<int, List<Notification>> keyValuePairs)
|
||||||
|
{
|
||||||
|
Dictionary<int, Aggregation> results = new();
|
||||||
|
int? inverseValue;
|
||||||
|
double inverseAverage;
|
||||||
|
Aggregation aggregation;
|
||||||
|
double fibonacciAverage;
|
||||||
|
List<int> collection = new();
|
||||||
|
int averageFromInverseCeiling;
|
||||||
|
List<int> inverseCollection = new();
|
||||||
|
List<int> fibonacciCollection = new();
|
||||||
|
foreach (KeyValuePair<int, List<Notification>> keyValuePair in keyValuePairs)
|
||||||
|
{
|
||||||
|
collection.Clear();
|
||||||
|
inverseCollection.Clear();
|
||||||
|
fibonacciCollection.Clear();
|
||||||
|
foreach (Notification notification in keyValuePair.Value)
|
||||||
|
{
|
||||||
|
collection.Add(notification.Value);
|
||||||
|
if (notification.Inverse is null)
|
||||||
|
continue;
|
||||||
|
inverseCollection.Add(notification.Inverse.Value);
|
||||||
|
if (notification.Fibonacci is null)
|
||||||
|
continue;
|
||||||
|
fibonacciCollection.Add(notification.Fibonacci.Value);
|
||||||
|
}
|
||||||
|
if (inverseCollection.Count == 0 || fibonacciCollection.Count == 0)
|
||||||
|
continue;
|
||||||
|
inverseAverage = Math.Round(inverseCollection.Average(), settings.Digits);
|
||||||
|
averageFromInverseCeiling = (int)Math.Ceiling(inverseAverage);
|
||||||
|
inverseValue = Notification.GetInverse(averageFromInverseCeiling);
|
||||||
|
fibonacciAverage = Math.Round(fibonacciCollection.Average(), settings.Digits);
|
||||||
|
aggregation = new(inverseAverage: inverseAverage,
|
||||||
|
valueCount: collection.Count,
|
||||||
|
fibonacciAverage: fibonacciAverage,
|
||||||
|
inverseValue: inverseValue,
|
||||||
|
valueMaximum: collection.Max(),
|
||||||
|
valueMinimum: collection.Min(),
|
||||||
|
notifications: keyValuePair.Value.ToArray(),
|
||||||
|
valueSum: collection.Sum());
|
||||||
|
results.Add(keyValuePair.Key, aggregation);
|
||||||
|
}
|
||||||
|
return new(results);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ReadOnlyCollection<Notification> GetNotifications(Settings settings, string directory)
|
||||||
|
{
|
||||||
|
List<Notification> results = new();
|
||||||
|
string? key;
|
||||||
|
string text;
|
||||||
|
string[] files;
|
||||||
|
Notification? notification;
|
||||||
|
List<Notification>? collection;
|
||||||
|
Dictionary<string, List<Notification>> keyValuePairs = new();
|
||||||
|
string[] directories = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string subDirectory in directories)
|
||||||
|
{
|
||||||
|
keyValuePairs.Clear();
|
||||||
|
files = Directory.GetFiles(subDirectory, settings.SourceFileFilter, SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string file in files)
|
||||||
|
{
|
||||||
|
text = File.ReadAllText(file);
|
||||||
|
if (string.IsNullOrEmpty(text) || text[0] == '[')
|
||||||
|
continue;
|
||||||
|
notification = JsonSerializer.Deserialize(text, NotificationSourceGenerationContext.Default.Notification);
|
||||||
|
if (notification is null || notification.Id == 0)
|
||||||
|
continue;
|
||||||
|
key = !string.IsNullOrEmpty(notification.Username) ? notification.Username : notification.RemoteIpAddress;
|
||||||
|
if (string.IsNullOrEmpty(key))
|
||||||
|
continue;
|
||||||
|
if (!keyValuePairs.TryGetValue(key, out collection))
|
||||||
|
{
|
||||||
|
keyValuePairs.Add(key, new());
|
||||||
|
if (!keyValuePairs.TryGetValue(key, out collection))
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
collection.Add(notification);
|
||||||
|
}
|
||||||
|
foreach (KeyValuePair<string, List<Notification>> keyValuePair in keyValuePairs)
|
||||||
|
{
|
||||||
|
if (keyValuePair.Value.Count == 1)
|
||||||
|
results.Add(keyValuePair.Value[0]);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
notification = keyValuePair.Value.Select(record => new KeyValuePair<long, Notification>(record.Time, record)).OrderBy(pair => pair.Key).Last().Value;
|
||||||
|
results.Add(notification);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new(results);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, string directory)
|
||||||
|
{
|
||||||
|
ReadOnlyDictionary<int, Aggregation> results;
|
||||||
|
List<Notification>? collection;
|
||||||
|
Dictionary<int, List<Notification>> keyValuePairs = new();
|
||||||
|
ReadOnlyCollection<Notification> notifications = GetNotifications(settings, directory);
|
||||||
|
foreach (Notification notification in notifications)
|
||||||
|
{
|
||||||
|
if (!keyValuePairs.TryGetValue(notification.Id, out collection))
|
||||||
|
{
|
||||||
|
keyValuePairs.Add(notification.Id, new());
|
||||||
|
if (!keyValuePairs.TryGetValue(notification.Id, out collection))
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
collection.Add(notification);
|
||||||
|
}
|
||||||
|
results = GetKeyValuePairs(settings, keyValuePairs);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static ReadOnlyDictionary<string, ReadOnlyDictionary<int, Aggregation>> GetKeyValuePairsAndWriteFiles(Settings settings)
|
||||||
|
{
|
||||||
|
Dictionary<string, ReadOnlyDictionary<int, Aggregation>> results = new();
|
||||||
|
string json;
|
||||||
|
string jsonOld;
|
||||||
|
string jsonFile;
|
||||||
|
string directoryName;
|
||||||
|
ReadOnlyDictionary<int, Aggregation> keyValuePairs;
|
||||||
|
if (!Directory.Exists(settings.SourceFileLocation))
|
||||||
|
_ = Directory.CreateDirectory(settings.SourceFileLocation);
|
||||||
|
if (!Directory.Exists(settings.TargetFileLocation))
|
||||||
|
_ = Directory.CreateDirectory(settings.TargetFileLocation);
|
||||||
|
string[] directories = Directory.GetDirectories(settings.SourceFileLocation, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string directory in directories)
|
||||||
|
{
|
||||||
|
directoryName = Path.GetFileName(directory);
|
||||||
|
keyValuePairs = GetKeyValuePairs(settings, directory);
|
||||||
|
jsonFile = Path.Combine(settings.TargetFileLocation, $"{directoryName}.json");
|
||||||
|
json = JsonSerializer.Serialize(keyValuePairs, AggregationReadOnlyDictionarySourceGenerationContext.Default.ReadOnlyDictionaryInt32Aggregation);
|
||||||
|
// keyValuePairs = JsonSerializer.Deserialize(json, AggregationReadOnlyDictionarySourceGenerationContext.Default.ReadOnlyDictionaryInt32Aggregation);
|
||||||
|
jsonOld = File.Exists(jsonFile) ? File.ReadAllText(jsonFile) : string.Empty;
|
||||||
|
if (json != jsonOld)
|
||||||
|
File.WriteAllText(jsonFile, json);
|
||||||
|
results.Add(directoryName, keyValuePairs);
|
||||||
|
}
|
||||||
|
return new(results);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, Notification notification)
|
||||||
|
{
|
||||||
|
ReadOnlyDictionary<int, Aggregation> results;
|
||||||
|
Dictionary<int, List<Notification>> keyValuePairs = new() { { notification.Id, new Notification[] { notification }.ToList() } };
|
||||||
|
results = GetKeyValuePairs(settings, keyValuePairs);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,4 +202,10 @@ internal partial class AggregationSourceGenerationContext : JsonSerializerContex
|
|||||||
[JsonSerializable(typeof(Aggregation[]))]
|
[JsonSerializable(typeof(Aggregation[]))]
|
||||||
internal partial class AggregationCollectionSourceGenerationContext : JsonSerializerContext
|
internal partial class AggregationCollectionSourceGenerationContext : JsonSerializerContext
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
|
[JsonSerializable(typeof(ReadOnlyDictionary<int, Aggregation>))]
|
||||||
|
internal partial class AggregationReadOnlyDictionarySourceGenerationContext : JsonSerializerContext
|
||||||
|
{
|
||||||
}
|
}
|
||||||
@ -3,28 +3,36 @@ using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration;
|
|||||||
using Adaptation.Shared;
|
using Adaptation.Shared;
|
||||||
using Adaptation.Shared.Duplicator;
|
using Adaptation.Shared.Duplicator;
|
||||||
using Adaptation.Shared.Methods;
|
using Adaptation.Shared.Methods;
|
||||||
|
using log4net;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace Adaptation.FileHandlers.Priority;
|
namespace Adaptation.FileHandlers.Priority;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
public class FileRead : Shared.FileRead, IFileRead
|
public class FileRead : Shared.FileRead, IFileRead
|
||||||
{
|
{
|
||||||
|
|
||||||
private readonly Timer _Timer;
|
internal static ILog Log => _Log;
|
||||||
|
internal static Settings Settings => _Settings;
|
||||||
|
internal static Dictionary<int, WorkItem> WorkItems => _WorkItems;
|
||||||
|
#pragma warning disable IDE0032, CS8618
|
||||||
|
private static new ILog _Log;
|
||||||
|
private static Settings _Settings;
|
||||||
|
private static Dictionary<int, WorkItem> _WorkItems;
|
||||||
|
#pragma warning restore IDE0032, CS8618
|
||||||
|
|
||||||
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
|
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted) :
|
||||||
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
|
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
|
||||||
{
|
{
|
||||||
|
_WorkItems = new();
|
||||||
_MinFileLength = 10;
|
_MinFileLength = 10;
|
||||||
_NullData = string.Empty;
|
|
||||||
_Logistics = new(this);
|
_Logistics = new(this);
|
||||||
|
_NullData = string.Empty;
|
||||||
|
_Log = LogManager.GetLogger(typeof(FileRead));
|
||||||
if (_FileParameter is null)
|
if (_FileParameter is null)
|
||||||
throw new Exception(cellInstanceConnectionName);
|
throw new Exception(cellInstanceConnectionName);
|
||||||
if (_ModelObjectParameterDefinitions is null)
|
if (_ModelObjectParameterDefinitions is null)
|
||||||
@ -33,12 +41,23 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
throw new Exception(cellInstanceConnectionName);
|
throw new Exception(cellInstanceConnectionName);
|
||||||
if (_IsEAFHosted)
|
if (_IsEAFHosted)
|
||||||
NestExistingFiles(_FileConnectorConfiguration);
|
NestExistingFiles(_FileConnectorConfiguration);
|
||||||
if (!Debugger.IsAttached && fileConnectorConfiguration.PreProcessingMode != FileConnectorConfiguration.PreProcessingModeEnum.Process)
|
string parentDirectory = Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation) ?? throw new Exception();
|
||||||
_Timer = new Timer(Callback, null, (int)(fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000), Timeout.Infinite);
|
_Settings = new(digits: 5,
|
||||||
else
|
parentDirectory: parentDirectory,
|
||||||
|
priorities: 3,
|
||||||
|
priorityGroups: 9,
|
||||||
|
sourceFileFilter: _FileConnectorConfiguration.SourceFileFilter,
|
||||||
|
sourceFileLocation: _FileConnectorConfiguration.SourceFileLocation,
|
||||||
|
targetFileLocation: _FileConnectorConfiguration.TargetFileLocation);
|
||||||
|
string? json = WeightedShortestJobFirstHub.PopulatedWorkItemsAndGetJson(_Settings);
|
||||||
|
if (!string.IsNullOrEmpty(json))
|
||||||
|
WeightedShortestJobFirstHub.WriteJson(json);
|
||||||
|
string cellInstanceNamed = string.Concat("CellInstance.", _EquipmentType);
|
||||||
|
string url = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, $"{cellInstanceNamed}.Microsoft.Owin.Hosting.WebApp.Start.URL");
|
||||||
|
if (_IsEAFHosted)
|
||||||
{
|
{
|
||||||
_Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite);
|
_ = Microsoft.Owin.Hosting.WebApp.Start(url);
|
||||||
Callback(null);
|
_Log.Info($"Server running on {url}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +110,7 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
DateTime dateTime = DateTime.Now;
|
DateTime dateTime = DateTime.Now;
|
||||||
results = GetExtractResult(reportFullPath, dateTime);
|
results = GetExtractResult(reportFullPath, dateTime);
|
||||||
if (results.Item3 is null)
|
if (results.Item3 is null)
|
||||||
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(results.Item1, Array.Empty<Test>(), JsonSerializer.Deserialize<JsonElement[]>("[]"), results.Item4);
|
results = new Tuple<string, Test[], JsonElement[], List<FileInfo>>(results.Item1, Array.Empty<Test>(), JsonSerializer.Deserialize<JsonElement[]>("[]") ?? throw new Exception(), results.Item4);
|
||||||
if (results.Item3.Length > 0 && _IsEAFHosted)
|
if (results.Item3.Length > 0 && _IsEAFHosted)
|
||||||
WritePDSF(this, results.Item3);
|
WritePDSF(this, results.Item3);
|
||||||
UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks);
|
UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks);
|
||||||
@ -107,187 +126,6 @@ public class FileRead : Shared.FileRead, IFileRead
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
#nullable enable
|
|
||||||
|
|
||||||
private static ReadOnlyCollection<Record> GetRecords(string directory, string searchPattern)
|
|
||||||
{
|
|
||||||
List<Record> results = new();
|
|
||||||
string text;
|
|
||||||
Record? record;
|
|
||||||
string[] files;
|
|
||||||
List<Record>? collection;
|
|
||||||
Dictionary<string, List<Record>> keyValuePairs = new();
|
|
||||||
string[] directories = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly);
|
|
||||||
foreach (string subDirectory in directories)
|
|
||||||
{
|
|
||||||
keyValuePairs.Clear();
|
|
||||||
files = Directory.GetFiles(subDirectory, searchPattern, SearchOption.TopDirectoryOnly);
|
|
||||||
foreach (string file in files)
|
|
||||||
{
|
|
||||||
text = File.ReadAllText(file);
|
|
||||||
if (string.IsNullOrEmpty(text) || text[0] == '[')
|
|
||||||
continue;
|
|
||||||
record = JsonSerializer.Deserialize<Record>(text);
|
|
||||||
if (record is null || record.Id == 0)
|
|
||||||
continue;
|
|
||||||
if (!keyValuePairs.TryGetValue(record.RemoteIpAddress, out collection))
|
|
||||||
{
|
|
||||||
keyValuePairs.Add(record.RemoteIpAddress, new());
|
|
||||||
if (!keyValuePairs.TryGetValue(record.RemoteIpAddress, out collection))
|
|
||||||
throw new Exception();
|
|
||||||
}
|
|
||||||
collection.Add(record);
|
|
||||||
}
|
|
||||||
foreach (KeyValuePair<string, List<Record>> keyValuePair in keyValuePairs)
|
|
||||||
{
|
|
||||||
if (keyValuePair.Value.Count == 1)
|
|
||||||
results.Add(keyValuePair.Value[0]);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
record = keyValuePair.Value.Select(record => new KeyValuePair<long, Record>(record.Time, record)).OrderBy(pair => pair.Key).Last().Value;
|
|
||||||
results.Add(record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new(results);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int? GetInverse(int value) =>
|
|
||||||
value switch
|
|
||||||
{
|
|
||||||
1 => 3,
|
|
||||||
2 => 2,
|
|
||||||
3 => 1,
|
|
||||||
_ => null
|
|
||||||
};
|
|
||||||
|
|
||||||
private static int? GetInverse(double value)
|
|
||||||
{
|
|
||||||
int? result;
|
|
||||||
if (value > 3)
|
|
||||||
result = null;
|
|
||||||
else if (value > 2)
|
|
||||||
result = 1;
|
|
||||||
else if (value > 1)
|
|
||||||
result = 2;
|
|
||||||
else if (value > 0)
|
|
||||||
result = 3;
|
|
||||||
else
|
|
||||||
result = null;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Dictionary<int, List<Record>> keyValuePairs)
|
|
||||||
{
|
|
||||||
Dictionary<int, Aggregation> results = new();
|
|
||||||
Aggregation aggregation;
|
|
||||||
int? inverse;
|
|
||||||
double average;
|
|
||||||
List<int> collection = new();
|
|
||||||
foreach (KeyValuePair<int, List<Record>> keyValuePair in keyValuePairs)
|
|
||||||
{
|
|
||||||
collection.Clear();
|
|
||||||
foreach (Record record in keyValuePair.Value)
|
|
||||||
{
|
|
||||||
inverse = GetInverse(record.Value);
|
|
||||||
if (inverse is null)
|
|
||||||
continue;
|
|
||||||
collection.Add(inverse.Value);
|
|
||||||
}
|
|
||||||
average = collection.Average();
|
|
||||||
inverse = GetInverse(average);
|
|
||||||
aggregation = new(average.ToString("0.000"),
|
|
||||||
keyValuePair.Value.Count,
|
|
||||||
inverse,
|
|
||||||
keyValuePair.Value.Max(record => record.Value),
|
|
||||||
keyValuePair.Value.Min(record => record.Value),
|
|
||||||
new(keyValuePair.Value),
|
|
||||||
keyValuePair.Value.Sum(record => record.Value));
|
|
||||||
results.Add(keyValuePair.Key, aggregation);
|
|
||||||
}
|
|
||||||
return new(results);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(string directory, string searchPattern)
|
|
||||||
{
|
|
||||||
ReadOnlyDictionary<int, Aggregation> results;
|
|
||||||
List<Record>? collection;
|
|
||||||
Dictionary<int, List<Record>> keyValuePairs = new();
|
|
||||||
ReadOnlyCollection<Record> records = GetRecords(directory, searchPattern);
|
|
||||||
foreach (Record record in records)
|
|
||||||
{
|
|
||||||
if (!keyValuePairs.TryGetValue(record.Id, out collection))
|
|
||||||
{
|
|
||||||
keyValuePairs.Add(record.Id, new());
|
|
||||||
if (!keyValuePairs.TryGetValue(record.Id, out collection))
|
|
||||||
throw new Exception();
|
|
||||||
}
|
|
||||||
collection.Add(record);
|
|
||||||
}
|
|
||||||
results = GetKeyValuePairs(keyValuePairs);
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void WriteFiles(string sourceFileLocation, string sourceFileFilter, string targetFileLocation)
|
|
||||||
{
|
|
||||||
string json;
|
|
||||||
string jsonFile;
|
|
||||||
string directoryName;
|
|
||||||
if (!Directory.Exists(sourceFileLocation))
|
|
||||||
_ = Directory.CreateDirectory(sourceFileLocation);
|
|
||||||
if (!Directory.Exists(targetFileLocation))
|
|
||||||
_ = Directory.CreateDirectory(targetFileLocation);
|
|
||||||
ReadOnlyDictionary<int, Aggregation> keyValuePairs;
|
|
||||||
JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
|
|
||||||
string[] directories = Directory.GetDirectories(sourceFileLocation, "*", SearchOption.TopDirectoryOnly);
|
|
||||||
foreach (string directory in directories)
|
|
||||||
{
|
|
||||||
directoryName = Path.GetFileName(directory);
|
|
||||||
keyValuePairs = GetKeyValuePairs(directory, sourceFileFilter);
|
|
||||||
jsonFile = Path.Combine(targetFileLocation, $"{directoryName}.json");
|
|
||||||
json = JsonSerializer.Serialize(keyValuePairs, jsonSerializerOptions);
|
|
||||||
File.WriteAllText(jsonFile, json);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Callback(object state)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (_IsEAFHosted)
|
|
||||||
WriteFiles(_FileConnectorConfiguration.SourceFileLocation, _FileConnectorConfiguration.SourceFileFilter, _FileConnectorConfiguration.TargetFileLocation);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
string subject = string.Concat("Exception:", _CellInstanceConnectionName);
|
|
||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
|
||||||
File.WriteAllText(".email", body);
|
|
||||||
}
|
|
||||||
catch (Exception) { }
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (_FileConnectorConfiguration?.FileScanningIntervalInSeconds is null)
|
|
||||||
throw new Exception();
|
|
||||||
TimeSpan timeSpan = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks);
|
|
||||||
_ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
string subject = string.Concat("Exception:", _CellInstanceConnectionName);
|
|
||||||
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_SMTP.SendHighPriorityEmailMessage(subject, body);
|
|
||||||
File.WriteAllText(".email", body);
|
|
||||||
}
|
|
||||||
catch (Exception) { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
|
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
|
||||||
{
|
{
|
||||||
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
|
Tuple<string, Test[], JsonElement[], List<FileInfo>> results;
|
||||||
|
|||||||
90
Adaptation/FileHandlers/Priority/Notification.cs
Normal file
90
Adaptation/FileHandlers/Priority/Notification.cs
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace Adaptation.FileHandlers.Priority;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
public class Notification
|
||||||
|
{
|
||||||
|
|
||||||
|
[JsonConstructor]
|
||||||
|
public Notification(int? fibonacci,
|
||||||
|
int id,
|
||||||
|
int? inverse,
|
||||||
|
string? machineId,
|
||||||
|
string page,
|
||||||
|
string? remoteIpAddress,
|
||||||
|
string? site,
|
||||||
|
long time,
|
||||||
|
string? username,
|
||||||
|
int value)
|
||||||
|
{
|
||||||
|
int? i = inverse is not null ? inverse : GetInverse(value);
|
||||||
|
Fibonacci = fibonacci is not null ? fibonacci : i is null ? null : GetFibonacci(i.Value);
|
||||||
|
Id = id;
|
||||||
|
Inverse = i;
|
||||||
|
MachineId = machineId;
|
||||||
|
Page = page;
|
||||||
|
RemoteIpAddress = remoteIpAddress is not null ? remoteIpAddress : null;
|
||||||
|
Site = site is not null ? site : "MES";
|
||||||
|
Time = time;
|
||||||
|
Username = username;
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonPropertyName("id")] public int Id { get; }
|
||||||
|
[JsonPropertyName("fibonacci")] public int? Fibonacci { get; }
|
||||||
|
[JsonPropertyName("inverse")] public int? Inverse { get; }
|
||||||
|
[JsonPropertyName("machineId")] public string? MachineId { get; }
|
||||||
|
[JsonPropertyName("page")] public string Page { get; }
|
||||||
|
[JsonPropertyName("RemoteIpAddress")] public string? RemoteIpAddress { get; }
|
||||||
|
[JsonPropertyName("site")] public string? Site { get; }
|
||||||
|
[JsonPropertyName("time")] public long Time { get; }
|
||||||
|
[JsonPropertyName("username")] public string? Username { get; }
|
||||||
|
[JsonPropertyName("value")] public int Value { get; }
|
||||||
|
|
||||||
|
internal static int? GetInverse(int value) =>
|
||||||
|
value switch
|
||||||
|
{
|
||||||
|
1 => 5,
|
||||||
|
2 => 4,
|
||||||
|
3 => 3,
|
||||||
|
4 => 2,
|
||||||
|
5 => 1,
|
||||||
|
_ => null
|
||||||
|
};
|
||||||
|
|
||||||
|
private static int? GetFibonacci(int value) =>
|
||||||
|
value switch
|
||||||
|
{
|
||||||
|
9 => 55,
|
||||||
|
8 => 34,
|
||||||
|
7 => 21,
|
||||||
|
6 => 13,
|
||||||
|
5 => 8,
|
||||||
|
4 => 5,
|
||||||
|
3 => 3,
|
||||||
|
2 => 2,
|
||||||
|
1 => 1,
|
||||||
|
_ => null
|
||||||
|
};
|
||||||
|
|
||||||
|
internal static Notification GetNotification(Notification notification, string? remoteIpAddress, string? connectionId) =>
|
||||||
|
new(notification.Fibonacci,
|
||||||
|
notification.Id,
|
||||||
|
notification.Inverse,
|
||||||
|
notification.MachineId,
|
||||||
|
notification.Page,
|
||||||
|
remoteIpAddress ?? connectionId,
|
||||||
|
notification.Site,
|
||||||
|
notification.Time,
|
||||||
|
notification.Username,
|
||||||
|
notification.Value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
|
[JsonSerializable(typeof(Notification))]
|
||||||
|
public partial class NotificationSourceGenerationContext : JsonSerializerContext
|
||||||
|
{
|
||||||
|
}
|
||||||
@ -1,37 +0,0 @@
|
|||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace Adaptation.FileHandlers.Priority;
|
|
||||||
|
|
||||||
public class Record
|
|
||||||
{
|
|
||||||
|
|
||||||
[JsonConstructor]
|
|
||||||
public Record(
|
|
||||||
string json,
|
|
||||||
int id,
|
|
||||||
string page,
|
|
||||||
string queryString,
|
|
||||||
string remoteIpAddress,
|
|
||||||
long time,
|
|
||||||
int value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Json = json;
|
|
||||||
Id = id;
|
|
||||||
Page = page;
|
|
||||||
QueryString = queryString;
|
|
||||||
RemoteIpAddress = remoteIpAddress;
|
|
||||||
Time = time;
|
|
||||||
Value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
[JsonPropertyName("Json")] public string Json { get; }
|
|
||||||
[JsonPropertyName("id")] public int Id { get; }
|
|
||||||
[JsonPropertyName("page")] public string Page { get; }
|
|
||||||
[JsonPropertyName("QueryString")] public string QueryString { get; }
|
|
||||||
[JsonPropertyName("RemoteIpAddress")] public string RemoteIpAddress { get; }
|
|
||||||
[JsonPropertyName("time")] public long Time { get; }
|
|
||||||
[JsonPropertyName("value")] public int Value { get; }
|
|
||||||
|
|
||||||
}
|
|
||||||
43
Adaptation/FileHandlers/Priority/Settings.cs
Normal file
43
Adaptation/FileHandlers/Priority/Settings.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace Adaptation.FileHandlers.Priority;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
public class Settings
|
||||||
|
{
|
||||||
|
|
||||||
|
[JsonConstructor]
|
||||||
|
public Settings(int digits,
|
||||||
|
string parentDirectory,
|
||||||
|
int priorities,
|
||||||
|
int priorityGroups,
|
||||||
|
string sourceFileFilter,
|
||||||
|
string sourceFileLocation,
|
||||||
|
string targetFileLocation)
|
||||||
|
{
|
||||||
|
Digits = digits;
|
||||||
|
ParentDirectory = parentDirectory;
|
||||||
|
Priorities = priorities;
|
||||||
|
PriorityGroups = priorityGroups;
|
||||||
|
SourceFileFilter = sourceFileFilter;
|
||||||
|
SourceFileLocation = sourceFileLocation;
|
||||||
|
TargetFileLocation = targetFileLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Digits { get; } // [JsonPropertyName("Digits")]
|
||||||
|
public string ParentDirectory { get; } // [JsonPropertyName("ParentDirectory")]
|
||||||
|
public int Priorities { get; } // [JsonPropertyName("Priorities")]
|
||||||
|
public int PriorityGroups { get; } // [JsonPropertyName("PriorityGroups")]
|
||||||
|
public string SourceFileFilter { get; } // [JsonPropertyName("SourceFileFilter")]
|
||||||
|
public string SourceFileLocation { get; } // [JsonPropertyName("SourceFileLocation")]
|
||||||
|
public string TargetFileLocation { get; } // [JsonPropertyName("TargetFileLocation")]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
|
[JsonSerializable(typeof(Dictionary<int, Settings>))]
|
||||||
|
internal partial class SettingsDictionarySourceGenerationContext : JsonSerializerContext
|
||||||
|
{
|
||||||
|
}
|
||||||
13
Adaptation/FileHandlers/Priority/Startup.cs
Normal file
13
Adaptation/FileHandlers/Priority/Startup.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Microsoft.Owin.Cors;
|
||||||
|
using Owin;
|
||||||
|
|
||||||
|
public class Startup
|
||||||
|
{
|
||||||
|
|
||||||
|
public void Configuration(IAppBuilder app)
|
||||||
|
{
|
||||||
|
_ = app.UseCors(CorsOptions.AllowAll);
|
||||||
|
_ = app.MapSignalR();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
158
Adaptation/FileHandlers/Priority/WeightedShortestJobFirstHub.cs
Normal file
158
Adaptation/FileHandlers/Priority/WeightedShortestJobFirstHub.cs
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
namespace Adaptation.FileHandlers.Priority;
|
||||||
|
|
||||||
|
public class WeightedShortestJobFirstHub : Microsoft.AspNet.SignalR.Hub
|
||||||
|
{
|
||||||
|
|
||||||
|
// public async Task Send(int n)
|
||||||
|
// {
|
||||||
|
// await Clients.All.send(n);
|
||||||
|
// }
|
||||||
|
|
||||||
|
private string? GetRemoteIpAddress() =>
|
||||||
|
Context?.Headers?.Get("X-Real-IP");
|
||||||
|
|
||||||
|
public void Send(string name, string message)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{name}:{message};");
|
||||||
|
// FileRead.Logger.LogWarning($"{name}:{message};");
|
||||||
|
// FileRead.Log?.Info($"{name}:{message};");
|
||||||
|
Console.WriteLine(Context?.ConnectionId);
|
||||||
|
// FileRead.Logger.LogWarning(Context?.ConnectionId);
|
||||||
|
// FileRead.Log?.Info(Context?.ConnectionId);
|
||||||
|
string? remoteIpAddress = GetRemoteIpAddress();
|
||||||
|
Console.WriteLine(remoteIpAddress);
|
||||||
|
// FileRead.Logger.LogWarning(remoteIpAddress);
|
||||||
|
// FileRead.Log?.Info(remoteIpAddress);
|
||||||
|
Clients.All.addMessage(name, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void FileWriteAllText(Settings settings, Notification n)
|
||||||
|
{
|
||||||
|
string json = JsonSerializer.Serialize(n, NotificationSourceGenerationContext.Default.Notification);
|
||||||
|
string directory = Path.Combine(settings.SourceFileLocation, n.Page, n.Id.ToString());
|
||||||
|
if (!Directory.Exists(directory))
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
|
string checkFile = Path.Combine(directory, $"{n.Time}.json");
|
||||||
|
File.WriteAllText(checkFile, json);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void WriteJson(string json)
|
||||||
|
{
|
||||||
|
string jsonFile = Path.Combine(FileRead.Settings.ParentDirectory, "{}.json");
|
||||||
|
string jsonFileWith = Path.Combine(FileRead.Settings.ParentDirectory, "{[]}.json");
|
||||||
|
string jsonOld = File.Exists(jsonFileWith) ? File.ReadAllText(jsonFileWith) : string.Empty;
|
||||||
|
if (json != jsonOld)
|
||||||
|
{
|
||||||
|
File.WriteAllText(jsonFileWith, json);
|
||||||
|
Dictionary<int, WorkItem> w = JsonSerializer.Deserialize(json.Replace($"\"{nameof(Aggregation.Notifications)}\":", "\"ignore\":"), WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem) ?? throw new Exception();
|
||||||
|
json = JsonSerializer.Serialize(w, WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem);
|
||||||
|
File.WriteAllText(jsonFile, json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static string? PopulatedWorkItemsAndGetJson(Settings settings)
|
||||||
|
{
|
||||||
|
string? result = null;
|
||||||
|
ReadOnlyDictionary<int, WorkItem?> workItems = WorkItem.GetKeyValuePairs(settings);
|
||||||
|
int useCount = (from l in workItems where l.Value.CostOfDelay is not null select true).Count();
|
||||||
|
double prioritySize = useCount / settings.Priorities;
|
||||||
|
double priorityGroupSize = useCount / settings.PriorityGroups;
|
||||||
|
WorkItem[] sorted = (from l in workItems
|
||||||
|
where l.Value is not null
|
||||||
|
orderby l.Value.Site is not null,
|
||||||
|
l.Value.Site descending,
|
||||||
|
l.Value.CostOfDelay is not null,
|
||||||
|
l.Value.CostOfDelay descending,
|
||||||
|
l.Value.BusinessValue?.FibonacciAverage is not null,
|
||||||
|
l.Value.BusinessValue?.FibonacciAverage descending,
|
||||||
|
l.Key
|
||||||
|
select l.Value).ToArray();
|
||||||
|
lock (FileRead.WorkItems)
|
||||||
|
{
|
||||||
|
int j = 0;
|
||||||
|
WorkItem w;
|
||||||
|
double value;
|
||||||
|
int lastId = -1;
|
||||||
|
int? sortBeforeId;
|
||||||
|
WorkItem workItem;
|
||||||
|
int? sortPriority;
|
||||||
|
int? sortPriorityGroup;
|
||||||
|
FileRead.WorkItems.Clear();
|
||||||
|
for (int i = 0; i < sorted.Length; i++)
|
||||||
|
{
|
||||||
|
w = sorted[i];
|
||||||
|
if (w.CostOfDelay is null)
|
||||||
|
{
|
||||||
|
sortBeforeId = null;
|
||||||
|
sortPriority = null;
|
||||||
|
sortPriorityGroup = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j += 1;
|
||||||
|
sortBeforeId = lastId;
|
||||||
|
value = (j / prioritySize) + 1;
|
||||||
|
sortPriority = (int)Math.Floor(value);
|
||||||
|
if (sortPriority > settings.Priorities)
|
||||||
|
sortPriority = settings.Priorities;
|
||||||
|
value = (j / priorityGroupSize) + 1;
|
||||||
|
sortPriorityGroup = (int)Math.Floor(value);
|
||||||
|
if (sortPriorityGroup > settings.PriorityGroups)
|
||||||
|
sortPriorityGroup = settings.PriorityGroups;
|
||||||
|
}
|
||||||
|
workItem = WorkItem.GetWorkItem(w, i, sortBeforeId, sortPriority, sortPriorityGroup);
|
||||||
|
FileRead.WorkItems.Add(workItem.Id, workItem);
|
||||||
|
lastId = w.Id;
|
||||||
|
}
|
||||||
|
result = JsonSerializer.Serialize(FileRead.WorkItems, WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static WorkItem GetWorkItem(Notification notification)
|
||||||
|
{
|
||||||
|
WorkItem? result;
|
||||||
|
lock (FileRead.WorkItems)
|
||||||
|
{
|
||||||
|
if (!FileRead.WorkItems.TryGetValue(notification.Id, out result))
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyAll(Notification notification)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string? json = null;
|
||||||
|
string? remoteIpAddress = GetRemoteIpAddress();
|
||||||
|
Notification n = Notification.GetNotification(notification, remoteIpAddress, Context?.ConnectionId);
|
||||||
|
Console.WriteLine(n.ToString());
|
||||||
|
// FileRead.Logger.LogWarning(n.ToString());
|
||||||
|
// FileRead.Log?.Info(n.ToString());
|
||||||
|
FileWriteAllText(FileRead.Settings, n);
|
||||||
|
json = PopulatedWorkItemsAndGetJson(FileRead.Settings);
|
||||||
|
if (!string.IsNullOrEmpty(json))
|
||||||
|
WriteJson(json);
|
||||||
|
if (!string.IsNullOrEmpty(n.RemoteIpAddress))
|
||||||
|
{
|
||||||
|
WorkItem workItem = GetWorkItem(n);
|
||||||
|
Clients.All.updateWorkItem(n.Page, workItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{ Console.WriteLine($"{ex.Message}{Environment.NewLine}{ex.StackTrace}"); }
|
||||||
|
// { FileRead.Logger.LogError(ex, "Error!"); }
|
||||||
|
// { FileRead.Log?.Error("Error!", ex); }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
205
Adaptation/FileHandlers/Priority/WorkItem.cs
Normal file
205
Adaptation/FileHandlers/Priority/WorkItem.cs
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace Adaptation.FileHandlers.Priority;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
public class WorkItem
|
||||||
|
{
|
||||||
|
|
||||||
|
[JsonConstructor]
|
||||||
|
public WorkItem(double? costOfDelay,
|
||||||
|
Aggregation? businessValue,
|
||||||
|
Aggregation? effort,
|
||||||
|
int id,
|
||||||
|
int? sortBeforeId,
|
||||||
|
int? sortPriority,
|
||||||
|
int? sortPriorityGroup,
|
||||||
|
Aggregation? riskReductionOpportunityEnablement,
|
||||||
|
string? site,
|
||||||
|
int? sortOrder,
|
||||||
|
Aggregation? timeCriticality,
|
||||||
|
double? weightedShortestJobFirst)
|
||||||
|
{
|
||||||
|
CostOfDelay = costOfDelay;
|
||||||
|
BusinessValue = businessValue;
|
||||||
|
Effort = effort;
|
||||||
|
Id = id;
|
||||||
|
Site = site;
|
||||||
|
SortBeforeId = sortBeforeId;
|
||||||
|
SortPriority = sortPriority;
|
||||||
|
SortPriorityGroup = sortPriorityGroup;
|
||||||
|
RiskReductionOpportunityEnablement = riskReductionOpportunityEnablement;
|
||||||
|
SortOrder = sortOrder;
|
||||||
|
TimeCriticality = timeCriticality;
|
||||||
|
WeightedShortestJobFirst = weightedShortestJobFirst;
|
||||||
|
}
|
||||||
|
|
||||||
|
const string _PageEffort = "effort";
|
||||||
|
const string _PageTimeCriticality = "time";
|
||||||
|
const string _PageBusinessValue = "business";
|
||||||
|
const string _PageRiskReductionOpportunityEnablement = "risk";
|
||||||
|
|
||||||
|
public double? CostOfDelay { get; } // [JsonPropertyName("CostOfDelay")]
|
||||||
|
public Aggregation? BusinessValue { get; } // [JsonPropertyName("BusinessValue")]
|
||||||
|
public Aggregation? Effort { get; } // [JsonPropertyName("Effort")]
|
||||||
|
public int Id { get; } // [JsonPropertyName("Id")]
|
||||||
|
public string? Site { get; } // [JsonPropertyName("Site")]
|
||||||
|
public int? SortBeforeId { get; } // [JsonPropertyName("SortBeforeId")]
|
||||||
|
public int? SortPriority { get; } // [JsonPropertyName("SortPriority")]
|
||||||
|
public int? SortPriorityGroup { get; } // [JsonPropertyName("SortPriorityGroup")]
|
||||||
|
public Aggregation? RiskReductionOpportunityEnablement { get; } // [JsonPropertyName("RiskReductionOpportunityEnablement")]
|
||||||
|
public int? SortOrder { get; } // [JsonPropertyName("SortOrder")]
|
||||||
|
public Aggregation? TimeCriticality { get; } // [JsonPropertyName("TimeCriticality")]
|
||||||
|
public double? WeightedShortestJobFirst { get; } // [JsonPropertyName("WeightedShortestJobFirst")]
|
||||||
|
|
||||||
|
internal static WorkItem GetWorkItem(WorkItem workItem, int i, int? sortBeforeId, int? sortPriority, int? sortPriorityGroup) =>
|
||||||
|
new(workItem.CostOfDelay,
|
||||||
|
workItem.BusinessValue,
|
||||||
|
workItem.Effort,
|
||||||
|
workItem.Id,
|
||||||
|
sortBeforeId,
|
||||||
|
sortPriority,
|
||||||
|
sortPriorityGroup,
|
||||||
|
workItem.RiskReductionOpportunityEnablement,
|
||||||
|
workItem.Site,
|
||||||
|
i,
|
||||||
|
workItem.TimeCriticality,
|
||||||
|
workItem.WeightedShortestJobFirst);
|
||||||
|
|
||||||
|
private static string? GetSite(Aggregation? effort, Aggregation? businessValue, Aggregation? timeCriticality, Aggregation? riskReductionOpportunityEnablement)
|
||||||
|
{
|
||||||
|
string? result = null;
|
||||||
|
if (result is null && effort is not null)
|
||||||
|
{
|
||||||
|
foreach (Notification notification in effort.Notifications)
|
||||||
|
{
|
||||||
|
if (notification.Site is not null)
|
||||||
|
{
|
||||||
|
result = notification.Site;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result is null && businessValue is not null)
|
||||||
|
{
|
||||||
|
foreach (Notification notification in businessValue.Notifications)
|
||||||
|
{
|
||||||
|
if (notification.Site is not null)
|
||||||
|
{
|
||||||
|
result = notification.Site;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result is null && timeCriticality is not null)
|
||||||
|
{
|
||||||
|
foreach (Notification notification in timeCriticality.Notifications)
|
||||||
|
{
|
||||||
|
if (notification.Site is not null)
|
||||||
|
{
|
||||||
|
result = notification.Site;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (result is null && riskReductionOpportunityEnablement is not null)
|
||||||
|
{
|
||||||
|
foreach (Notification notification in riskReductionOpportunityEnablement.Notifications)
|
||||||
|
{
|
||||||
|
if (notification.Site is not null)
|
||||||
|
{
|
||||||
|
result = notification.Site;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static ReadOnlyDictionary<int, WorkItem?> GetWorkItems(Settings settings, ReadOnlyDictionary<string, ReadOnlyDictionary<int, Aggregation>> keyValuePairs)
|
||||||
|
{
|
||||||
|
Dictionary<int, WorkItem?> results = new();
|
||||||
|
string? site;
|
||||||
|
WorkItem? workItem;
|
||||||
|
double? costOfDelay;
|
||||||
|
Aggregation? effort;
|
||||||
|
List<int> ids = new();
|
||||||
|
Aggregation? businessValue;
|
||||||
|
Aggregation? timeCriticality;
|
||||||
|
double? weightedShortestJobFirst;
|
||||||
|
Aggregation? riskReductionOpportunityEnablement;
|
||||||
|
Dictionary<int, Aggregation?> effortCollection = new();
|
||||||
|
Dictionary<int, Aggregation?> businessValueCollection = new();
|
||||||
|
Dictionary<int, Aggregation?> timeCriticalityCollection = new();
|
||||||
|
Dictionary<int, Aggregation?> riskReductionOpportunityEnablementCollection = new();
|
||||||
|
foreach (KeyValuePair<string, ReadOnlyDictionary<int, Aggregation>> keyValuePair in keyValuePairs)
|
||||||
|
{
|
||||||
|
foreach (KeyValuePair<int, Aggregation> keyValue in keyValuePair.Value)
|
||||||
|
{
|
||||||
|
if (!ids.Contains(keyValue.Key))
|
||||||
|
ids.Add(keyValue.Key);
|
||||||
|
if (keyValuePair.Key == _PageEffort)
|
||||||
|
effortCollection.Add(keyValue.Key, keyValue.Value);
|
||||||
|
else if (keyValuePair.Key == _PageTimeCriticality)
|
||||||
|
timeCriticalityCollection.Add(keyValue.Key, keyValue.Value);
|
||||||
|
else if (keyValuePair.Key == _PageBusinessValue)
|
||||||
|
businessValueCollection.Add(keyValue.Key, keyValue.Value);
|
||||||
|
else if (keyValuePair.Key == _PageRiskReductionOpportunityEnablement)
|
||||||
|
riskReductionOpportunityEnablementCollection.Add(keyValue.Key, keyValue.Value);
|
||||||
|
else
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (int id in ids)
|
||||||
|
{
|
||||||
|
if (!effortCollection.TryGetValue(id, out effort))
|
||||||
|
effort = null;
|
||||||
|
if (!businessValueCollection.TryGetValue(id, out businessValue))
|
||||||
|
businessValue = null;
|
||||||
|
if (!timeCriticalityCollection.TryGetValue(id, out timeCriticality))
|
||||||
|
timeCriticality = null;
|
||||||
|
if (!riskReductionOpportunityEnablementCollection.TryGetValue(id, out riskReductionOpportunityEnablement))
|
||||||
|
riskReductionOpportunityEnablement = null;
|
||||||
|
site = GetSite(effort, businessValue, timeCriticality, riskReductionOpportunityEnablement);
|
||||||
|
costOfDelay = businessValue is null
|
||||||
|
|| timeCriticality is null
|
||||||
|
|| riskReductionOpportunityEnablement is null ? null : businessValue.FibonacciAverage
|
||||||
|
+ timeCriticality.FibonacciAverage
|
||||||
|
+ riskReductionOpportunityEnablement.FibonacciAverage;
|
||||||
|
weightedShortestJobFirst = costOfDelay is null || effort is null ? null : Math.Round(costOfDelay.Value / effort.FibonacciAverage, settings.Digits);
|
||||||
|
workItem = new(costOfDelay: costOfDelay,
|
||||||
|
businessValue: businessValue,
|
||||||
|
effort: effort,
|
||||||
|
id: id,
|
||||||
|
sortBeforeId: null,
|
||||||
|
sortPriority: null,
|
||||||
|
sortPriorityGroup: null,
|
||||||
|
riskReductionOpportunityEnablement: riskReductionOpportunityEnablement,
|
||||||
|
site: site,
|
||||||
|
sortOrder: null,
|
||||||
|
timeCriticality: timeCriticality,
|
||||||
|
weightedShortestJobFirst: weightedShortestJobFirst);
|
||||||
|
results.Add(id, workItem);
|
||||||
|
}
|
||||||
|
return new(results);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static ReadOnlyDictionary<int, WorkItem?> GetKeyValuePairs(Settings settings)
|
||||||
|
{
|
||||||
|
ReadOnlyDictionary<int, WorkItem?> results;
|
||||||
|
ReadOnlyDictionary<string, ReadOnlyDictionary<int, Aggregation>> keyValuePairs = Aggregation.GetKeyValuePairsAndWriteFiles(settings);
|
||||||
|
results = GetWorkItems(settings, keyValuePairs);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
|
[JsonSerializable(typeof(Dictionary<int, WorkItem>))]
|
||||||
|
internal partial class WorkItemDictionarySourceGenerationContext : JsonSerializerContext
|
||||||
|
{
|
||||||
|
}
|
||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - 122508 - Feature iteration should be set to max of children</title>
|
<title>Infineon - 122508 - Feature iteration should be set to max of children</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/122508.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/122508.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/122508.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/122508.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/check-122508.json?v=2024-10-07-18-50");
|
initIndex("/markdown/check-122508.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - 122514 - Features and children must have a Tag</title>
|
<title>Infineon - 122514 - Features and children must have a Tag</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/122514.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/122514.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/122514.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/122514.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/check-122514.json?v=2024-10-07-18-50");
|
initIndex("/markdown/check-122514.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - 122517 - Feature start date should be min activated date of children</title>
|
<title>Infineon - 122517 - Feature start date should be min activated date of children</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/122517.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/122517.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/122517.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/122517.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/check-122517.json?v=2024-10-07-18-50");
|
initIndex("/markdown/check-122517.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - 123066 - When children of a Feature are not New Feature must also not be New</title>
|
<title>Infineon - 123066 - When children of a Feature are not New Feature must also not be New</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/123066.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/123066.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/123066.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/123066.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/check-123066.json?v=2024-10-07-18-50");
|
initIndex("/markdown/check-123066.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - 123067 - WIP</title>
|
<title>Infineon - 123067 - WIP</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/123067.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/123067.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/123067.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/123067.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/check-123067.json?v=2024-10-07-18-50");
|
initIndex("/markdown/check-123067.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - 126169 - Children of a Feature should have the same priority</title>
|
<title>Infineon - 126169 - Children of a Feature should have the same priority</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/126169.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/126169.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/126169.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/126169.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/check-126169.json?v=2024-10-07-18-50");
|
initIndex("/markdown/check-126169.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - Business Value</title>
|
<title>Infineon - Business Value</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/business.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/business.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/business.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/business.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -59,7 +59,7 @@ What is the relative value to the Customer or business?
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/bugs-features-with-parents.json?v=2024-10-07-18-50", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "business", "Value", "Business Value", "/markdown/PI4-Results/business.json?v=2024-10-07-18-50");
|
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "business", "Value", "Business Value", "/markdown/PI5-Results/business.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
109
Adaptation/FileHandlers/json/StaticSite/html/cod-b.html
Normal file
109
Adaptation/FileHandlers/json/StaticSite/html/cod-b.html
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<title>Infineon - Cost of Delay (CoD) (see @SCALE formula)</title>
|
||||||
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
|
<link href="/styles/cod.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
|
<script src="/js/scripts/jquery-1.6.4.min.js"></script>
|
||||||
|
<script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script>
|
||||||
|
<script src="/signalr/hubs"></script>
|
||||||
|
<script src="/js/cod-b.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="navbar navbar-fixed-top">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<span id="siteHeader"> </span> -
|
||||||
|
<span id="th-span"> </span>
|
||||||
|
<button id="toggle">Toggle</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
</ul>
|
||||||
|
<p class="navbar-text navbar-right">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container-fluid body-content" style="margin-top: 40px; margin-left: 15px;">
|
||||||
|
<div id="HeaderGridDiv">
|
||||||
|
<table id="HeaderGrid" border="1"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div id="AllGridDiv">
|
||||||
|
<table id="AllGrid"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<textarea id="AllTextarea" rows="20" cols="147"></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
const username = '';
|
||||||
|
const machineId = '';
|
||||||
|
const fromHtml = true;
|
||||||
|
const signalRUrl = "/signalr";
|
||||||
|
const windowLocationHRef = window.location.href;
|
||||||
|
const apiUrl = "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/";
|
||||||
|
const workItems = {
|
||||||
|
a: "/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49",
|
||||||
|
b: "/markdown/{[]}.json?v=2025-01-22-10-49"
|
||||||
|
};
|
||||||
|
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)"
|
||||||
|
};
|
||||||
|
initIndex(fromHtml, username, machineId, windowLocationHRef, workItems, b, r, t, c, e, w, apiUrl, signalRUrl);
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
97
Adaptation/FileHandlers/json/StaticSite/html/cod.html
Normal file
97
Adaptation/FileHandlers/json/StaticSite/html/cod.html
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<title>Infineon - Cost of Delay (CoD) (see @SCALE formula)</title>
|
||||||
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
|
<link href="/styles/cod.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script>
|
||||||
|
<script src="/signalr/hubs"></script>
|
||||||
|
<script src="/js/cod.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="navbar navbar-fixed-top">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<span id="siteHeader"> </span> - Cost of Delay (CoD) (see @SCALE formula)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
</ul>
|
||||||
|
<p class="navbar-text navbar-right">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container-fluid body-content" style="margin-top: 40px; margin-left: 15px;">
|
||||||
|
|
||||||
|
<div id="HeaderGridDiv">
|
||||||
|
<table id="HeaderGrid" border="1"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div id="AllGridDiv">
|
||||||
|
<table id="AllGrid"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
const fromHtml = true;
|
||||||
|
const windowLocationHRef = window.location.href;
|
||||||
|
const headerGrid = document.getElementById("HeaderGrid");
|
||||||
|
const workItems = {
|
||||||
|
a: "/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49",
|
||||||
|
b: "/markdown/{}.json?v=2025-01-22-10-49"
|
||||||
|
};
|
||||||
|
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."
|
||||||
|
};
|
||||||
|
initIndex(fromHtml, windowLocationHRef, headerGrid, workItems, b, r, t, c, "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/");
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - Effort</title>
|
<title>Infineon - Effort</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/effort.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/effort.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/effort.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/effort.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -55,7 +55,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/bugs-features-with-parents.json?v=2024-10-07-18-50", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "effort", "Effort", "Effort", "/markdown/PI4-Results/effort.json?v=2024-10-07-18-50");
|
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "effort", "Effort", "Effort", "/markdown/PI5-Results/effort.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - Risk Reduction and/or Opportunity Enablement</title>
|
<title>Infineon - Risk Reduction and/or Opportunity Enablement</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/risk.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/risk.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/risk.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/risk.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -59,7 +59,7 @@ What else does this do for our business?
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/bugs-features-with-parents.json?v=2024-10-07-18-50", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "risk", "Risk", "Risk Reduction and/or Opportunity Enablement", "/markdown/PI4-Results/risk.json?v=2024-10-07-18-50");
|
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "risk", "Risk", "Risk Reduction and/or Opportunity Enablement", "/markdown/PI5-Results/risk.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - Time Criticality</title>
|
<title>Infineon - Time Criticality</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/time.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/time.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/time.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/time.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -32,7 +32,6 @@ How does user/business value decay over time?
|
|||||||
• Is there a fixed deadline?
|
• Is there a fixed deadline?
|
||||||
• Will they wait for us or move to another Solution?
|
• Will they wait for us or move to another Solution?
|
||||||
• What is the current effect on Customer satisfaction?
|
• What is the current effect on Customer satisfaction?
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-collapse collapse">
|
<div class="navbar-collapse collapse">
|
||||||
@ -60,7 +59,7 @@ How does user/business value decay over time?
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/bugs-features-with-parents.json?v=2024-10-07-18-50", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "time", "Critical", "Time Criticality", "/markdown/PI4-Results/time.json?v=2024-10-07-18-50");
|
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/", "time", "Critical", "Time Criticality", "/markdown/PI5-Results/time.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - User Stor(ies) with parents</title>
|
<title>Infineon - User Stor(ies) with parents</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/with-parents.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/with-parents.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/with-parents.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/with-parents.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -55,7 +55,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/bugs-user-stories-with-parents.json?v=2024-10-07-18-50");
|
initIndex("/markdown/bugs-user-stories-with-parents.json?v=2025-01-22-10-49");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
64
Adaptation/FileHandlers/json/StaticSite/html/wsjf-b.html
Normal file
64
Adaptation/FileHandlers/json/StaticSite/html/wsjf-b.html
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title>
|
||||||
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
|
<link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/js/wsjf-b.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="navbar navbar-fixed-top">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<span id="siteHeader"> </span> - Result of Weightest Shortest Job First calculation (see @SCALE formula)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
</ul>
|
||||||
|
<p class="navbar-text navbar-right">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container-fluid body-content" style="margin-top: 40px; margin-left: 15px;">
|
||||||
|
|
||||||
|
<div style="height: 550px;" id="HeaderGridDiv">
|
||||||
|
<table id="HeaderGrid" border="1"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div id="AllGridDiv">
|
||||||
|
<table id="AllGrid"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/");
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
34
Adaptation/FileHandlers/json/StaticSite/html/wsjf-c.html
Normal file
34
Adaptation/FileHandlers/json/StaticSite/html/wsjf-c.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>SignalR Simple Chat</title>
|
||||||
|
<style type="text/css">
|
||||||
|
.container {
|
||||||
|
background-color: #99CCFF;
|
||||||
|
border: thick solid #808080;
|
||||||
|
padding: 20px;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<input type="text" id="message" />
|
||||||
|
<input type="button" id="sendmessage" value="Send" />
|
||||||
|
<input type="hidden" id="displayname" />
|
||||||
|
<ul id="discussion"></ul>
|
||||||
|
</div>
|
||||||
|
<script src="/js/scripts/jquery-1.6.4.min.js"></script>
|
||||||
|
<script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script>
|
||||||
|
<script src="/signalr/hubs"></script>
|
||||||
|
<script src="/js/wsjf-c.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
initIndex("/signalr", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/");
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -6,15 +6,15 @@
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title>
|
<title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title>
|
||||||
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/igniteui/css/structure/infragistics.css?v=2024-10-07-18-50" rel="stylesheet" />
|
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
|
||||||
<link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
<link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
|
||||||
<script src="/js/jquery-3.6.0.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/js/wsjf.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/js/wsjf.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.core.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.lob.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
<script src="/igniteui/js/infragistics.dv.js?v=2024-10-07-18-50" type="text/javascript"></script>
|
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -55,7 +55,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
initIndex("/markdown/bugs-features-with-parents.json?v=2024-10-07-18-50", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/");
|
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://oi-metrology-viewer-prod.mes.infineon.com:4438/api/v1/ado/");
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,22 +1,22 @@
|
|||||||
var _apiUrl = null;
|
var _apiUrl = null;
|
||||||
|
|
||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.BusinessValue === null || b.BusinessValue === null) {
|
if (a.BusinessValue == undefined || b.BusinessValue == undefined) {
|
||||||
var aPollValue = a.PollValue.split('-');
|
var aPollValue = a.PollValue.split('-');
|
||||||
var bPollValue = b.PollValue.split('-');
|
var bPollValue = b.PollValue.split('-');
|
||||||
return bPollValue[0].trim() - aPollValue[0].trim() || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return bPollValue[0] - aPollValue[0] || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.BusinessValue - a.BusinessValue || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.BusinessValue - a.BusinessValue || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -66,7 +66,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -81,45 +81,34 @@ function getPriority(workItemType, priority) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getInversePriority(priority) {
|
function getPollValue(description, pollValue) {
|
||||||
var result;
|
var result;
|
||||||
if (priority == null || priority === 0)
|
if (pollValue == undefined || pollValue.BusinessValue == undefined || pollValue.BusinessValue.InverseAverage == undefined)
|
||||||
result = "0.000";
|
result = "";
|
||||||
else if (priority === 1)
|
else if (pollValue.BusinessValue.InverseAverage >= 4)
|
||||||
result = "3.000";
|
result = `${pollValue.BusinessValue.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 2)
|
else if (pollValue.BusinessValue.InverseAverage >= 3)
|
||||||
result = "2.000";
|
result = `${pollValue.BusinessValue.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 3)
|
else if (pollValue.BusinessValue.InverseAverage >= 2)
|
||||||
result = "1.000";
|
result = `${pollValue.BusinessValue.InverseAverage} - 3-Medium - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.BusinessValue.InverseAverage >= 1)
|
||||||
|
result = `${pollValue.BusinessValue.InverseAverage} - 4-Low - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.BusinessValue.InverseAverage >= 0)
|
||||||
|
result = `${pollValue.BusinessValue.InverseAverage} - 5-Lowest - ${pollValue.Count} Vote(s)`;
|
||||||
else
|
else
|
||||||
result = "0.000";
|
result = "";
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPollValue(description, priority, priorityDisplay, pollValue) {
|
|
||||||
var result;
|
|
||||||
if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0 || pollValue.Average === null)
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
else if (pollValue.Average > 2)
|
|
||||||
result = `${pollValue.Average} - 1-High (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 1)
|
|
||||||
result = `${pollValue.Average} - 2-Medium - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 0)
|
|
||||||
result = `${pollValue.Average} - 3-Low - ${pollValue.Count} Vote(s)`;
|
|
||||||
else
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -128,12 +117,12 @@ function updateRecordCoD(workItem) {
|
|||||||
function updateRecordOther(workItem, dataB, description) {
|
function updateRecordOther(workItem, dataB, description) {
|
||||||
workItem["State"] = getState(workItem["State"]);
|
workItem["State"] = getState(workItem["State"]);
|
||||||
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
||||||
workItem["PollValue"] = getPollValue(description, workItem["Priority"], priority, dataB[workItem.Id]);
|
workItem["PollValue"] = getPollValue(description, dataB[workItem.Id]);
|
||||||
workItem["Priority"] = priority;
|
workItem["Priority"] = priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
@ -183,13 +172,46 @@ function sendValue(element, page, id) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFibonacciValue(average) {
|
||||||
|
var result;
|
||||||
|
if (average >= 7)
|
||||||
|
result = 34;
|
||||||
|
else if (average >= 6)
|
||||||
|
result = 21;
|
||||||
|
else if (average >= 5)
|
||||||
|
result = 13;
|
||||||
|
else if (average >= 4)
|
||||||
|
result = 8;
|
||||||
|
else if (average >= 3)
|
||||||
|
result = 5;
|
||||||
|
else if (average >= 2)
|
||||||
|
result = 3;
|
||||||
|
else if (average >= 1)
|
||||||
|
result = 2;
|
||||||
|
else if (average >= 0)
|
||||||
|
result = 1;
|
||||||
|
else
|
||||||
|
result = "";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
function setRecords(workItems, page, description, th) {
|
function setRecords(workItems, page, description, th) {
|
||||||
var record;
|
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>State</th><th>Value</th><th>Up</th><th>Down</th><th>Poll Value</th><th>" + th + "</th></tr>";
|
var array = [];
|
||||||
|
var count = "";
|
||||||
|
var select = "";
|
||||||
|
var average = "";
|
||||||
|
var fibonacciValue = "";
|
||||||
|
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>Value</th><th>Poll Average</th><th>Fibonacci</th><th>Poll Description</th><th>Vote(s)</th><th>" + th + "</th><th>Up</th><th>Down</th></tr>";
|
||||||
const element = document.getElementById("HeaderGrid");
|
const element = document.getElementById("HeaderGrid");
|
||||||
for (var i = 0; i < workItems.length; i++) {
|
for (var i = 0; i < workItems.length; i++) {
|
||||||
record = workItems[i];
|
record = workItems[i];
|
||||||
var length = record.BusinessValue === null ? "" : record.BusinessValue.toString().length;
|
array = record.PollValue.split('-')
|
||||||
|
average = array.length > 0 ? array[0] : "";
|
||||||
|
fibonacciValue = getFibonacciValue(average);
|
||||||
|
select = array.length > 2 ? array[1] + '-' + array[2] : "";
|
||||||
|
count = array.length > 3 ? array[3].trim().split(' ')[0] : "";
|
||||||
|
var length = record.BusinessValue == undefined ? "" : record.BusinessValue.toString().length;
|
||||||
html += "<tr><td>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
html += "<tr><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>" + 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>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.Id + '">' + record.Id + "</a>" +
|
||||||
@ -201,14 +223,19 @@ function setRecords(workItems, page, description, th) {
|
|||||||
"</td><td>" +
|
"</td><td>" +
|
||||||
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
||||||
'<option value="9">Unknown</option>' +
|
'<option value="9">Unknown</option>' +
|
||||||
'<option value="1">High (Most ' + description + ')</option>' +
|
'<option value="1">Highest (Most ' + description + ')</option>' +
|
||||||
'<option value="2">Medium</option>' +
|
'<option value="2">High</option>' +
|
||||||
'<option value="3">Low</option>' +
|
'<option value="3">Medium</option>' +
|
||||||
|
'<option value="4">Low</option>' +
|
||||||
|
'<option value="5">Lowest</option>' +
|
||||||
"</select>" +
|
"</select>" +
|
||||||
|
"</td><td>" + average +
|
||||||
|
"</td><td>" + fibonacciValue +
|
||||||
|
"</td><td>" + select +
|
||||||
|
"</td><td>" + count +
|
||||||
|
"</td><td>" + length + " - " + record.BusinessValue +
|
||||||
"</td><td><a href='#' class='up'>Up</a>" +
|
"</td><td><a href='#' class='up'>Up</a>" +
|
||||||
"</td><td><a href='#' class='down'>Down</a>" +
|
"</td><td><a href='#' class='down'>Down</a>" +
|
||||||
"</td><td>" + record.PollValue +
|
|
||||||
"</td><td>" + length + " - " + record.BusinessValue +
|
|
||||||
"</td></tr>";
|
"</td></tr>";
|
||||||
}
|
}
|
||||||
element.innerHTML = html.replaceAll(">null<", "> <");
|
element.innerHTML = html.replaceAll(">null<", "> <");
|
||||||
|
|||||||
17114
Adaptation/FileHandlers/json/StaticSite/js/cod-b.js
Normal file
17114
Adaptation/FileHandlers/json/StaticSite/js/cod-b.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,22 +1,22 @@
|
|||||||
var _apiUrl = null;
|
var _apiUrl = null;
|
||||||
|
|
||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.Effort === null || b.Effort === null) {
|
if (a.Effort == undefined || b.Effort == undefined) {
|
||||||
var aPollValue = a.PollValue.split('-');
|
var aPollValue = a.PollValue.split('-');
|
||||||
var bPollValue = b.PollValue.split('-');
|
var bPollValue = b.PollValue.split('-');
|
||||||
return bPollValue[0].trim() - aPollValue[0].trim() || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return bPollValue[0] - aPollValue[0] || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.Effort - a.Effort || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.Effort - a.Effort || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -66,7 +66,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -81,45 +81,34 @@ function getPriority(workItemType, priority) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getInversePriority(priority) {
|
function getPollValue(description, pollValue) {
|
||||||
var result;
|
var result;
|
||||||
if (priority == null || priority === 0)
|
if (pollValue == undefined || pollValue.Effort == undefined || pollValue.Effort.InverseAverage == undefined)
|
||||||
result = "0.000";
|
result = "";
|
||||||
else if (priority === 1)
|
else if (pollValue.Effort.InverseAverage >= 4)
|
||||||
result = "3.000";
|
result = `${pollValue.Effort.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 2)
|
else if (pollValue.Effort.InverseAverage >= 3)
|
||||||
result = "2.000";
|
result = `${pollValue.Effort.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 3)
|
else if (pollValue.Effort.InverseAverage >= 2)
|
||||||
result = "1.000";
|
result = `${pollValue.Effort.InverseAverage} - 3-Medium - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.Effort.InverseAverage >= 1)
|
||||||
|
result = `${pollValue.Effort.InverseAverage} - 4-Low - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.Effort.InverseAverage >= 0)
|
||||||
|
result = `${pollValue.Effort.InverseAverage} - 5-Lowest - ${pollValue.Count} Vote(s)`;
|
||||||
else
|
else
|
||||||
result = "0.000";
|
result = "";
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPollValue(description, priority, priorityDisplay, pollValue) {
|
|
||||||
var result;
|
|
||||||
if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0 || pollValue.Average === null)
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
else if (pollValue.Average > 2)
|
|
||||||
result = `${pollValue.Average} - 1-High (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 1)
|
|
||||||
result = `${pollValue.Average} - 2-Medium - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 0)
|
|
||||||
result = `${pollValue.Average} - 3-Low - ${pollValue.Count} Vote(s)`;
|
|
||||||
else
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -128,12 +117,12 @@ function updateRecordCoD(workItem) {
|
|||||||
function updateRecordOther(workItem, dataB, description) {
|
function updateRecordOther(workItem, dataB, description) {
|
||||||
workItem["State"] = getState(workItem["State"]);
|
workItem["State"] = getState(workItem["State"]);
|
||||||
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
||||||
workItem["PollValue"] = getPollValue(description, workItem["Priority"], priority, dataB[workItem.Id]);
|
workItem["PollValue"] = getPollValue(description, dataB[workItem.Id]);
|
||||||
workItem["Priority"] = priority;
|
workItem["Priority"] = priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
@ -183,13 +172,46 @@ function sendValue(element, page, id) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFibonacciValue(average) {
|
||||||
|
var result;
|
||||||
|
if (average >= 7)
|
||||||
|
result = 34;
|
||||||
|
else if (average >= 6)
|
||||||
|
result = 21;
|
||||||
|
else if (average >= 5)
|
||||||
|
result = 13;
|
||||||
|
else if (average >= 4)
|
||||||
|
result = 8;
|
||||||
|
else if (average >= 3)
|
||||||
|
result = 5;
|
||||||
|
else if (average >= 2)
|
||||||
|
result = 3;
|
||||||
|
else if (average >= 1)
|
||||||
|
result = 2;
|
||||||
|
else if (average >= 0)
|
||||||
|
result = 1;
|
||||||
|
else
|
||||||
|
result = "";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
function setRecords(workItems, page, description, th) {
|
function setRecords(workItems, page, description, th) {
|
||||||
var record;
|
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>State</th><th>Value</th><th>Up</th><th>Down</th><th>Poll Value</th><th>" + th + "</th></tr>";
|
var array = [];
|
||||||
|
var count = "";
|
||||||
|
var select = "";
|
||||||
|
var average = "";
|
||||||
|
var fibonacciValue = "";
|
||||||
|
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>Value</th><th>Poll Average</th><th>Fibonacci</th><th>Poll Description</th><th>Vote(s)</th><th>" + th + "</th><th>Up</th><th>Down</th></tr>";
|
||||||
const element = document.getElementById("HeaderGrid");
|
const element = document.getElementById("HeaderGrid");
|
||||||
for (var i = 0; i < workItems.length; i++) {
|
for (var i = 0; i < workItems.length; i++) {
|
||||||
record = workItems[i];
|
record = workItems[i];
|
||||||
var length = record.Effort === null ? "" : record.Effort.toString().length;
|
array = record.PollValue.split('-')
|
||||||
|
average = array.length > 0 ? array[0] : "";
|
||||||
|
fibonacciValue = getFibonacciValue(average);
|
||||||
|
select = array.length > 2 ? array[1] + '-' + array[2] : "";
|
||||||
|
count = array.length > 3 ? array[3].trim().split(' ')[0] : "";
|
||||||
|
var length = record.Effort == undefined ? "" : record.Effort.toString().length;
|
||||||
html += "<tr><td>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
html += "<tr><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>" + 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>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.Id + '">' + record.Id + "</a>" +
|
||||||
@ -201,14 +223,19 @@ function setRecords(workItems, page, description, th) {
|
|||||||
"</td><td>" +
|
"</td><td>" +
|
||||||
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
||||||
'<option value="9">Unknown</option>' +
|
'<option value="9">Unknown</option>' +
|
||||||
'<option value="1">High (Most ' + description + ')</option>' +
|
'<option value="1">Highest (Most ' + description + ')</option>' +
|
||||||
'<option value="2">Medium</option>' +
|
'<option value="2">High</option>' +
|
||||||
'<option value="3">Low</option>' +
|
'<option value="3">Medium</option>' +
|
||||||
|
'<option value="4">Low</option>' +
|
||||||
|
'<option value="5">Lowest</option>' +
|
||||||
"</select>" +
|
"</select>" +
|
||||||
|
"</td><td>" + average +
|
||||||
|
"</td><td>" + fibonacciValue +
|
||||||
|
"</td><td>" + select +
|
||||||
|
"</td><td>" + count +
|
||||||
|
"</td><td>" + length + " - " + record.Effort +
|
||||||
"</td><td><a href='#' class='up'>Up</a>" +
|
"</td><td><a href='#' class='up'>Up</a>" +
|
||||||
"</td><td><a href='#' class='down'>Down</a>" +
|
"</td><td><a href='#' class='down'>Down</a>" +
|
||||||
"</td><td>" + record.PollValue +
|
|
||||||
"</td><td>" + length + " - " + record.Effort +
|
|
||||||
"</td></tr>";
|
"</td></tr>";
|
||||||
}
|
}
|
||||||
element.innerHTML = html.replaceAll(">null<", "> <");
|
element.innerHTML = html.replaceAll(">null<", "> <");
|
||||||
|
|||||||
9046
Adaptation/FileHandlers/json/StaticSite/js/jquery/v1.6.4/jquery.js
vendored
Normal file
9046
Adaptation/FileHandlers/json/StaticSite/js/jquery/v1.6.4/jquery.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.CoD === null || b.CoD === null) {
|
if (a.CoD == undefined || b.CoD == undefined) {
|
||||||
return b.Id - a.Id;
|
return b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.CoD - a.CoD || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
@ -1,22 +1,22 @@
|
|||||||
var _apiUrl = null;
|
var _apiUrl = null;
|
||||||
|
|
||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.RiskReductionMinusOpportunityEnablement === null || b.RiskReductionMinusOpportunityEnablement === null) {
|
if (a.RiskReductionMinusOpportunityEnablement == undefined || b.RiskReductionMinusOpportunityEnablement == undefined) {
|
||||||
var aPollValue = a.PollValue.split('-');
|
var aPollValue = a.PollValue.split('-');
|
||||||
var bPollValue = b.PollValue.split('-');
|
var bPollValue = b.PollValue.split('-');
|
||||||
return bPollValue[0].trim() - aPollValue[0].trim() || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return bPollValue[0] - aPollValue[0] || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.RiskReductionMinusOpportunityEnablement - a.RiskReductionMinusOpportunityEnablement || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.RiskReductionMinusOpportunityEnablement - a.RiskReductionMinusOpportunityEnablement || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -66,7 +66,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -81,45 +81,34 @@ function getPriority(workItemType, priority) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getInversePriority(priority) {
|
function getPollValue(description, pollValue) {
|
||||||
var result;
|
var result;
|
||||||
if (priority == null || priority === 0)
|
if (pollValue == undefined || pollValue.RiskReductionOpportunityEnablement == undefined || pollValue.RiskReductionOpportunityEnablement.InverseAverage == undefined)
|
||||||
result = "0.000";
|
result = "";
|
||||||
else if (priority === 1)
|
else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 4)
|
||||||
result = "3.000";
|
result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 2)
|
else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 3)
|
||||||
result = "2.000";
|
result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 3)
|
else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 2)
|
||||||
result = "1.000";
|
result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 3-Medium - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 1)
|
||||||
|
result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 4-Low - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 0)
|
||||||
|
result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 5-Lowest - ${pollValue.Count} Vote(s)`;
|
||||||
else
|
else
|
||||||
result = "0.000";
|
result = "";
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPollValue(description, priority, priorityDisplay, pollValue) {
|
|
||||||
var result;
|
|
||||||
if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0 || pollValue.Average === null)
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
else if (pollValue.Average > 2)
|
|
||||||
result = `${pollValue.Average} - 1-High (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 1)
|
|
||||||
result = `${pollValue.Average} - 2-Medium - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 0)
|
|
||||||
result = `${pollValue.Average} - 3-Low - ${pollValue.Count} Vote(s)`;
|
|
||||||
else
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -128,12 +117,12 @@ function updateRecordCoD(workItem) {
|
|||||||
function updateRecordOther(workItem, dataB, description) {
|
function updateRecordOther(workItem, dataB, description) {
|
||||||
workItem["State"] = getState(workItem["State"]);
|
workItem["State"] = getState(workItem["State"]);
|
||||||
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
||||||
workItem["PollValue"] = getPollValue(description, workItem["Priority"], priority, dataB[workItem.Id]);
|
workItem["PollValue"] = getPollValue(description, dataB[workItem.Id]);
|
||||||
workItem["Priority"] = priority;
|
workItem["Priority"] = priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
@ -183,13 +172,46 @@ function sendValue(element, page, id) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFibonacciValue(average) {
|
||||||
|
var result;
|
||||||
|
if (average >= 7)
|
||||||
|
result = 34;
|
||||||
|
else if (average >= 6)
|
||||||
|
result = 21;
|
||||||
|
else if (average >= 5)
|
||||||
|
result = 13;
|
||||||
|
else if (average >= 4)
|
||||||
|
result = 8;
|
||||||
|
else if (average >= 3)
|
||||||
|
result = 5;
|
||||||
|
else if (average >= 2)
|
||||||
|
result = 3;
|
||||||
|
else if (average >= 1)
|
||||||
|
result = 2;
|
||||||
|
else if (average >= 0)
|
||||||
|
result = 1;
|
||||||
|
else
|
||||||
|
result = "";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
function setRecords(workItems, page, description, th) {
|
function setRecords(workItems, page, description, th) {
|
||||||
var record;
|
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>State</th><th>Value</th><th>Up</th><th>Down</th><th>Poll Value</th><th>" + th + "</th></tr>";
|
var array = [];
|
||||||
|
var count = "";
|
||||||
|
var select = "";
|
||||||
|
var average = "";
|
||||||
|
var fibonacciValue = "";
|
||||||
|
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>Value</th><th>Poll Average</th><th>Fibonacci</th><th>Poll Description</th><th>Vote(s)</th><th>" + th + "</th><th>Up</th><th>Down</th></tr>";
|
||||||
const element = document.getElementById("HeaderGrid");
|
const element = document.getElementById("HeaderGrid");
|
||||||
for (var i = 0; i < workItems.length; i++) {
|
for (var i = 0; i < workItems.length; i++) {
|
||||||
record = workItems[i];
|
record = workItems[i];
|
||||||
var length = record.RiskReductionMinusOpportunityEnablement === null ? "" : record.RiskReductionMinusOpportunityEnablement.toString().length;
|
array = record.PollValue.split('-')
|
||||||
|
average = array.length > 0 ? array[0] : "";
|
||||||
|
fibonacciValue = getFibonacciValue(average);
|
||||||
|
select = array.length > 2 ? array[1] + '-' + array[2] : "";
|
||||||
|
count = array.length > 3 ? array[3].trim().split(' ')[0] : "";
|
||||||
|
var length = record.RiskReductionMinusOpportunityEnablement == undefined ? "" : record.RiskReductionMinusOpportunityEnablement.toString().length;
|
||||||
html += "<tr><td>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
html += "<tr><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>" + 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>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.Id + '">' + record.Id + "</a>" +
|
||||||
@ -201,14 +223,19 @@ function setRecords(workItems, page, description, th) {
|
|||||||
"</td><td>" +
|
"</td><td>" +
|
||||||
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
||||||
'<option value="9">Unknown</option>' +
|
'<option value="9">Unknown</option>' +
|
||||||
'<option value="1">High (Most ' + description + ')</option>' +
|
'<option value="1">Highest (Most ' + description + ')</option>' +
|
||||||
'<option value="2">Medium</option>' +
|
'<option value="2">High</option>' +
|
||||||
'<option value="3">Low</option>' +
|
'<option value="3">Medium</option>' +
|
||||||
|
'<option value="4">Low</option>' +
|
||||||
|
'<option value="5">Lowest</option>' +
|
||||||
"</select>" +
|
"</select>" +
|
||||||
|
"</td><td>" + average +
|
||||||
|
"</td><td>" + fibonacciValue +
|
||||||
|
"</td><td>" + select +
|
||||||
|
"</td><td>" + count +
|
||||||
|
"</td><td>" + length + " - " + record.RiskReductionMinusOpportunityEnablement +
|
||||||
"</td><td><a href='#' class='up'>Up</a>" +
|
"</td><td><a href='#' class='up'>Up</a>" +
|
||||||
"</td><td><a href='#' class='down'>Down</a>" +
|
"</td><td><a href='#' class='down'>Down</a>" +
|
||||||
"</td><td>" + record.PollValue +
|
|
||||||
"</td><td>" + length + " - " + record.RiskReductionMinusOpportunityEnablement +
|
|
||||||
"</td></tr>";
|
"</td></tr>";
|
||||||
}
|
}
|
||||||
element.innerHTML = html.replaceAll(">null<", "> <");
|
element.innerHTML = html.replaceAll(">null<", "> <");
|
||||||
|
|||||||
7024
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery-1.6.4-vsdoc.js
vendored
Normal file
7024
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery-1.6.4-vsdoc.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9046
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery-1.6.4.js
vendored
Normal file
9046
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery-1.6.4.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery-1.6.4.min.js
vendored
Normal file
4
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery-1.6.4.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
9
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery.signalR-2.4.3.min.js
vendored
Normal file
9
Adaptation/FileHandlers/json/StaticSite/js/scripts/jquery.signalR-2.4.3.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
3190
Adaptation/FileHandlers/json/StaticSite/js/signalr/dist/browser/signalr.js
vendored
Normal file
3190
Adaptation/FileHandlers/json/StaticSite/js/signalr/dist/browser/signalr.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
95
Adaptation/FileHandlers/json/StaticSite/js/signalr/hubs.js
Normal file
95
Adaptation/FileHandlers/json/StaticSite/js/signalr/hubs.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*!
|
||||||
|
* ASP.NET SignalR JavaScript Library 2.4.3
|
||||||
|
* http://signalr.net/
|
||||||
|
*
|
||||||
|
* Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
* Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// <reference path="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" />
|
||||||
|
/// <reference path="jquery.signalR.js" />
|
||||||
|
(function ($, window, undefined) {
|
||||||
|
/// <param name="$" type="jQuery" />
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if (typeof ($.signalR) !== "function") {
|
||||||
|
throw new Error("SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/js.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var signalR = $.signalR;
|
||||||
|
|
||||||
|
function makeProxyCallback(hub, callback) {
|
||||||
|
return function () {
|
||||||
|
// Call the client hub method
|
||||||
|
callback.apply(hub, $.makeArray(arguments));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function registerHubProxies(instance, shouldSubscribe) {
|
||||||
|
var key, hub, memberKey, memberValue, subscriptionMethod;
|
||||||
|
|
||||||
|
for (key in instance) {
|
||||||
|
if (instance.hasOwnProperty(key)) {
|
||||||
|
hub = instance[key];
|
||||||
|
|
||||||
|
if (!(hub.hubName)) {
|
||||||
|
// Not a client hub
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldSubscribe) {
|
||||||
|
// We want to subscribe to the hub events
|
||||||
|
subscriptionMethod = hub.on;
|
||||||
|
} else {
|
||||||
|
// We want to unsubscribe from the hub events
|
||||||
|
subscriptionMethod = hub.off;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop through all members on the hub and find client hub functions to subscribe/unsubscribe
|
||||||
|
for (memberKey in hub.client) {
|
||||||
|
if (hub.client.hasOwnProperty(memberKey)) {
|
||||||
|
memberValue = hub.client[memberKey];
|
||||||
|
|
||||||
|
if (!$.isFunction(memberValue)) {
|
||||||
|
// Not a client hub function
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the actual user-provided callback as the "identity" value for the registration.
|
||||||
|
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue), memberValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$.hubConnection.prototype.createHubProxies = function () {
|
||||||
|
var proxies = {};
|
||||||
|
this.starting(function () {
|
||||||
|
// Register the hub proxies as subscribed
|
||||||
|
// (instance, shouldSubscribe)
|
||||||
|
registerHubProxies(proxies, true);
|
||||||
|
|
||||||
|
this._registerSubscribedHubs();
|
||||||
|
}).disconnected(function () {
|
||||||
|
// Unsubscribe all hub proxies when we "disconnect". This is to ensure that we do not re-add functional call backs.
|
||||||
|
// (instance, shouldSubscribe)
|
||||||
|
registerHubProxies(proxies, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
proxies['weightedShortestJobFirstHub'] = this.createHubProxy('weightedShortestJobFirstHub');
|
||||||
|
proxies['weightedShortestJobFirstHub'].client = { };
|
||||||
|
proxies['weightedShortestJobFirstHub'].server = {
|
||||||
|
send: function (name, message) {
|
||||||
|
return proxies['weightedShortestJobFirstHub'].invoke.apply(proxies['weightedShortestJobFirstHub'], $.merge(["Send"], $.makeArray(arguments)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return proxies;
|
||||||
|
};
|
||||||
|
|
||||||
|
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false });
|
||||||
|
$.extend(signalR, signalR.hub.createHubProxies());
|
||||||
|
|
||||||
|
}(window.jQuery, window));
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,22 +1,22 @@
|
|||||||
var _apiUrl = null;
|
var _apiUrl = null;
|
||||||
|
|
||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.TimeCriticality === null || b.TimeCriticality === null) {
|
if (a.TimeCriticality == undefined || b.TimeCriticality == undefined) {
|
||||||
var aPollValue = a.PollValue.split('-');
|
var aPollValue = a.PollValue.split('-');
|
||||||
var bPollValue = b.PollValue.split('-');
|
var bPollValue = b.PollValue.split('-');
|
||||||
return bPollValue[0].trim() - aPollValue[0].trim() || b.State[0] - a.State[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.State[0] - a.State[0] || bPollValue[0] - aPollValue[0] || bPollValue[bPollValue.length - 1].trim()[0] - aPollValue[aPollValue.length - 1].trim()[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.TimeCriticality - a.TimeCriticality || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.TimeCriticality - a.TimeCriticality || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -66,7 +66,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -81,45 +81,34 @@ function getPriority(workItemType, priority) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getInversePriority(priority) {
|
function getPollValue(description, pollValue) {
|
||||||
var result;
|
var result;
|
||||||
if (priority == null || priority === 0)
|
if (pollValue == undefined || pollValue.TimeCriticality == undefined || pollValue.TimeCriticality.InverseAverage == undefined)
|
||||||
result = "0.000";
|
result = "";
|
||||||
else if (priority === 1)
|
else if (pollValue.TimeCriticality.InverseAverage >= 4)
|
||||||
result = "3.000";
|
result = `${pollValue.TimeCriticality.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 2)
|
else if (pollValue.TimeCriticality.InverseAverage >= 3)
|
||||||
result = "2.000";
|
result = `${pollValue.TimeCriticality.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`;
|
||||||
else if (priority === 3)
|
else if (pollValue.TimeCriticality.InverseAverage >= 2)
|
||||||
result = "1.000";
|
result = `${pollValue.TimeCriticality.InverseAverage} - 3-Medium - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.TimeCriticality.InverseAverage >= 1)
|
||||||
|
result = `${pollValue.TimeCriticality.InverseAverage} - 4-Low - ${pollValue.Count} Vote(s)`;
|
||||||
|
else if (pollValue.TimeCriticality.InverseAverage >= 0)
|
||||||
|
result = `${pollValue.TimeCriticality.InverseAverage} - 5-Lowest - ${pollValue.Count} Vote(s)`;
|
||||||
else
|
else
|
||||||
result = "0.000";
|
result = "";
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPollValue(description, priority, priorityDisplay, pollValue) {
|
|
||||||
var result;
|
|
||||||
if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0 || pollValue.Average === null)
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
else if (pollValue.Average > 2)
|
|
||||||
result = `${pollValue.Average} - 1-High (Most ${description}) - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 1)
|
|
||||||
result = `${pollValue.Average} - 2-Medium - ${pollValue.Count} Vote(s)`;
|
|
||||||
else if (pollValue.Average > 0)
|
|
||||||
result = `${pollValue.Average} - 3-Low - ${pollValue.Count} Vote(s)`;
|
|
||||||
else
|
|
||||||
result = getInversePriority(priority) + ' - ' + priorityDisplay + ' - *Priority';
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -128,12 +117,12 @@ function updateRecordCoD(workItem) {
|
|||||||
function updateRecordOther(workItem, dataB, description) {
|
function updateRecordOther(workItem, dataB, description) {
|
||||||
workItem["State"] = getState(workItem["State"]);
|
workItem["State"] = getState(workItem["State"]);
|
||||||
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
||||||
workItem["PollValue"] = getPollValue(description, workItem["Priority"], priority, dataB[workItem.Id]);
|
workItem["PollValue"] = getPollValue(description, dataB[workItem.Id]);
|
||||||
workItem["Priority"] = priority;
|
workItem["Priority"] = priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
@ -183,13 +172,47 @@ function sendValue(element, page, id) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFibonacciValue(average) {
|
||||||
|
var result;
|
||||||
|
if (average >= 7)
|
||||||
|
result = 34;
|
||||||
|
else if (average >= 6)
|
||||||
|
result = 21;
|
||||||
|
else if (average >= 5)
|
||||||
|
result = 13;
|
||||||
|
else if (average >= 4)
|
||||||
|
result = 8;
|
||||||
|
else if (average >= 3)
|
||||||
|
result = 5;
|
||||||
|
else if (average >= 2)
|
||||||
|
result = 3;
|
||||||
|
else if (average >= 1)
|
||||||
|
result = 2;
|
||||||
|
else if (average >= 0)
|
||||||
|
result = 1;
|
||||||
|
else
|
||||||
|
result = "";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function setRecords(workItems, page, description, th) {
|
function setRecords(workItems, page, description, th) {
|
||||||
var record;
|
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>State</th><th>Value</th><th>Up</th><th>Down</th><th>Poll Value</th><th>" + th + "</th></tr>";
|
var array = [];
|
||||||
|
var count = "";
|
||||||
|
var select = "";
|
||||||
|
var average = "";
|
||||||
|
var fibonacciValue = "";
|
||||||
|
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>Value</th><th>Poll Average</th><th>Fibonacci</th><th>Poll Description</th><th>Vote(s)</th><th>" + th + "</th><th>Up</th><th>Down</th></tr>";
|
||||||
const element = document.getElementById("HeaderGrid");
|
const element = document.getElementById("HeaderGrid");
|
||||||
for (var i = 0; i < workItems.length; i++) {
|
for (var i = 0; i < workItems.length; i++) {
|
||||||
record = workItems[i];
|
record = workItems[i];
|
||||||
var length = record.TimeCriticality === null ? "" : record.TimeCriticality.toString().length;
|
array = record.PollValue.split('-')
|
||||||
|
average = array.length > 0 ? array[0] : "";
|
||||||
|
fibonacciValue = getFibonacciValue(average);
|
||||||
|
select = array.length > 2 ? array[1] + '-' + array[2] : "";
|
||||||
|
count = array.length > 3 ? array[3].trim().split(' ')[0] : "";
|
||||||
|
var length = record.TimeCriticality == undefined ? "" : record.TimeCriticality.toString().length;
|
||||||
html += "<tr><td>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
html += "<tr><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>" + 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>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.Id + '">' + record.Id + "</a>" +
|
||||||
@ -201,14 +224,19 @@ function setRecords(workItems, page, description, th) {
|
|||||||
"</td><td>" +
|
"</td><td>" +
|
||||||
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
'<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' +
|
||||||
'<option value="9">Unknown</option>' +
|
'<option value="9">Unknown</option>' +
|
||||||
'<option value="1">High (Most ' + description + ')</option>' +
|
'<option value="1">Highest (Most ' + description + ')</option>' +
|
||||||
'<option value="2">Medium</option>' +
|
'<option value="2">High</option>' +
|
||||||
'<option value="3">Low</option>' +
|
'<option value="3">Medium</option>' +
|
||||||
|
'<option value="4">Low</option>' +
|
||||||
|
'<option value="5">Lowest</option>' +
|
||||||
"</select>" +
|
"</select>" +
|
||||||
|
"</td><td>" + average +
|
||||||
|
"</td><td>" + fibonacciValue +
|
||||||
|
"</td><td>" + select +
|
||||||
|
"</td><td>" + count +
|
||||||
|
"</td><td>" + length + " - " + record.TimeCriticality +
|
||||||
"</td><td><a href='#' class='up'>Up</a>" +
|
"</td><td><a href='#' class='up'>Up</a>" +
|
||||||
"</td><td><a href='#' class='down'>Down</a>" +
|
"</td><td><a href='#' class='down'>Down</a>" +
|
||||||
"</td><td>" + record.PollValue +
|
|
||||||
"</td><td>" + length + " - " + record.TimeCriticality +
|
|
||||||
"</td></tr>";
|
"</td></tr>";
|
||||||
}
|
}
|
||||||
element.innerHTML = html.replaceAll(">null<", "> <");
|
element.innerHTML = html.replaceAll(">null<", "> <");
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
function compareFunction(a, b) {
|
function compareFunction(a, b) {
|
||||||
if (a.ParentCoD === null || b.ParentCoD === null) {
|
if (a.ParentCoD == undefined || b.ParentCoD == undefined) {
|
||||||
return b.ParentCoD - a.ParentCoD || b.Id - a.Id;
|
return b.ParentCoD - a.ParentCoD || b.Id - a.Id;
|
||||||
} else {
|
} else {
|
||||||
return b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
return b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
@ -7,12 +7,12 @@ function compareFunction(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -62,7 +62,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -78,14 +78,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem.Effort === null)
|
if (workItem.Effort == undefined)
|
||||||
workItem.Effort = 10123;
|
workItem.Effort = 10123;
|
||||||
if (workItem.BusinessValue === null)
|
if (workItem.BusinessValue == undefined)
|
||||||
workItem.BusinessValue = 99999;
|
workItem.BusinessValue = 99999;
|
||||||
if (workItem.TimeCriticality === null)
|
if (workItem.TimeCriticality == undefined)
|
||||||
workItem.TimeCriticality = 99999;
|
workItem.TimeCriticality = 99999;
|
||||||
if (workItem.RiskReductionMinusOpportunityEnablement === null)
|
if (workItem.RiskReductionMinusOpportunityEnablement == undefined)
|
||||||
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
workItem.RiskReductionMinusOpportunityEnablement = 99999;
|
||||||
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
|
|||||||
321
Adaptation/FileHandlers/json/StaticSite/js/wsjf-b.js
Normal file
321
Adaptation/FileHandlers/json/StaticSite/js/wsjf-b.js
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
var _apiUrl = null;
|
||||||
|
|
||||||
|
function compareFunction(a, b) {
|
||||||
|
return b.WeightedShortestJobFirst - a.WeightedShortestJobFirst || b.CoDRank - b.CoDRank || 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 compareCostOfDelay(a, b) {
|
||||||
|
return b.CoD - b.CoD || b.ParentId - a.ParentId || a.Id - b.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showOne(rowData) {
|
||||||
|
if (rowData == undefined)
|
||||||
|
return;
|
||||||
|
var data = [];
|
||||||
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
|
for (const property in rowData) {
|
||||||
|
if (rowData[property] == undefined)
|
||||||
|
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 == undefined)
|
||||||
|
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 == 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) {
|
||||||
|
var result;
|
||||||
|
if (workItemType === "Bug")
|
||||||
|
result = "0-Bug";
|
||||||
|
else if (priority == undefined || 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 != undefined) {
|
||||||
|
if (workItem["Effort"] == undefined)
|
||||||
|
workItem["Effort"] = 1;
|
||||||
|
if (workItem["BusinessValue"] == undefined)
|
||||||
|
workItem["BusinessValue"] = 99999;
|
||||||
|
if (workItem["TimeCriticality"] == undefined)
|
||||||
|
workItem["TimeCriticality"] = 99999;
|
||||||
|
if (workItem["RiskReductionMinusOpportunityEnablement"] == undefined)
|
||||||
|
workItem["RiskReductionMinusOpportunityEnablement"] = 99999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getFibonacci(length) {
|
||||||
|
var results = [];
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
results.push(21);
|
||||||
|
}
|
||||||
|
var index = 0;
|
||||||
|
var fibonacci = [3, 5, 8, 13, 20];
|
||||||
|
var factor = (length / fibonacci.length).toFixed();
|
||||||
|
for (var j = 0; j < fibonacci.length; j++) {
|
||||||
|
for (var i = 0; i < factor; i++) {
|
||||||
|
results[index] = fibonacci[j];
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// for (var i = 0; i < results.length; i++) {
|
||||||
|
// console.log(results[i]);
|
||||||
|
// }
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateCoD(records) {
|
||||||
|
var workItem;
|
||||||
|
var collection = [];
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
if (workItem.Priority[0] === '2') {
|
||||||
|
workItem.EffortFibonacci = 2;
|
||||||
|
workItem.BusinessValueFibonacci = 2;
|
||||||
|
workItem.TimeCriticalityFibonacci = 2;
|
||||||
|
workItem.RiskReductionMinusOpportunityEnablementFibonacci = 2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (workItem.Priority[0] === '3') {
|
||||||
|
workItem.EffortFibonacci = 1;
|
||||||
|
workItem.BusinessValueFibonacci = 1;
|
||||||
|
workItem.TimeCriticalityFibonacci = 1;
|
||||||
|
workItem.RiskReductionMinusOpportunityEnablementFibonacci = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
collection.push(workItem);
|
||||||
|
}
|
||||||
|
var fibonacci = getFibonacci(collection.length);
|
||||||
|
collection.sort(compareEffortFunction);
|
||||||
|
for (var i = 0; i < collection.length; i++) {
|
||||||
|
workItem = collection[i];
|
||||||
|
workItem.EffortFibonacci = fibonacci[i];
|
||||||
|
}
|
||||||
|
records.sort(compareEffortFunction);
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
workItem.EffortRank = (((i + 1) / records.length) * 100).toFixed();
|
||||||
|
}
|
||||||
|
collection.sort(compareBusinessValueFunction);
|
||||||
|
for (var i = 0; i < collection.length; i++) {
|
||||||
|
workItem = collection[i];
|
||||||
|
workItem.BusinessValueFibonacci = fibonacci[i];
|
||||||
|
}
|
||||||
|
records.sort(compareBusinessValueFunction);
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
workItem.BusinessValueRank = (((i + 1) / records.length) * 100).toFixed();
|
||||||
|
}
|
||||||
|
collection.sort(compareTimeCriticalityFunction);
|
||||||
|
for (var i = 0; i < collection.length; i++) {
|
||||||
|
workItem = collection[i];
|
||||||
|
workItem.TimeCriticalityFibonacci = fibonacci[i];
|
||||||
|
}
|
||||||
|
records.sort(compareTimeCriticalityFunction);
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
workItem.TimeCriticalityRank = (((i + 1) / records.length) * 100).toFixed();
|
||||||
|
}
|
||||||
|
collection.sort(compareRiskReductionMinusOpportunityEnablementFunction);
|
||||||
|
for (var i = 0; i < collection.length; i++) {
|
||||||
|
workItem = collection[i];
|
||||||
|
workItem.RiskReductionMinusOpportunityEnablementFibonacci = fibonacci[i];
|
||||||
|
}
|
||||||
|
records.sort(compareRiskReductionMinusOpportunityEnablementFunction);
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
workItem.RiskReductionMinusOpportunityEnablementRank = (((i + 1) / records.length) * 100).toFixed();
|
||||||
|
}
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
workItem.CoD = workItem.RiskReductionMinusOpportunityEnablementFibonacci + workItem.TimeCriticalityFibonacci + workItem.BusinessValueFibonacci;
|
||||||
|
}
|
||||||
|
records.sort(compareCostOfDelay);
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
workItem.CoDRank = (((i + 1) / records.length) * 100).toFixed();
|
||||||
|
}
|
||||||
|
for (var i = 0; i < records.length; i++) {
|
||||||
|
workItem = records[i];
|
||||||
|
if (workItem.Priority[0] !== '1' && workItem.Priority[0] !== '4') {
|
||||||
|
workItem.WeightedShortestJobFirst = 0.000001;
|
||||||
|
workItem.WeightedShortestJobFirstRank = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
workItem.WeightedShortestJobFirstRank = (((i + 1) / records.length) * 100).toFixed();
|
||||||
|
workItem.WeightedShortestJobFirst = (workItem.CoD / workItem.EffortFibonacci).toFixed(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateRecordOther(workItem) {
|
||||||
|
workItem["State"] = getState(workItem["State"]);
|
||||||
|
workItem["Priority"] = getPriority(workItem["WorkItemType"], workItem["Priority"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
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(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 !== 'Active' && workItem.State !== 'New')
|
||||||
|
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 = "<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];
|
||||||
|
html += "<tr><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>" + record.RiskReductionMinusOpportunityEnablementRank + '% - ' + record.RiskReductionMinusOpportunityEnablement + ' - ' + record.RiskReductionMinusOpportunityEnablementFibonacci +
|
||||||
|
"</td><td>" + record.TimeCriticalityRank + '% - ' +record.TimeCriticality + ' - ' + record.TimeCriticalityFibonacci +
|
||||||
|
"</td><td>" + record.BusinessValueRank + '% - ' +record.BusinessValue + ' - ' + record.BusinessValueFibonacci +
|
||||||
|
"</td><td>" + record.CoDRank + '% - ' + record.CoD +
|
||||||
|
"</td><td>" + record.EffortRank + '% - ' +record.Effort + ' - ' + record.EffortFibonacci +
|
||||||
|
"</td><td>" + record.WeightedShortestJobFirst +
|
||||||
|
"</td><td><a href='#' class='up'>Up</a></td><td><a href='#' class='down'>Down</a></td></tr>";
|
||||||
|
}
|
||||||
|
element.innerHTML = html.replaceAll(">null<", "> <");
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateSite() {
|
||||||
|
if (window.location.href.indexOf('=LEO') > -1) {
|
||||||
|
document.title = document.title.replace("Infineon", "HiRel (Leominster)");
|
||||||
|
document.getElementById("siteHeader").innerText = "HiRel (Leominster)";
|
||||||
|
}
|
||||||
|
else if (window.location.href.indexOf('=MES') > -1) {
|
||||||
|
document.title = document.title.replace("Infineon", "Mesa");
|
||||||
|
document.getElementById("siteHeader").innerText = "Mesa";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.title = document.title.replace("Infineon", "Infineon");
|
||||||
|
document.getElementById("siteHeader").innerText = "Infineon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function initIndex(url, apiUrl) {
|
||||||
|
_apiUrl = apiUrl;
|
||||||
|
updateSite();
|
||||||
|
$.getJSON(url, { _: new Date().getTime() }, function (data) {
|
||||||
|
var records = getRecords(data);
|
||||||
|
console.log(data.length);
|
||||||
|
if (data.length > 0)
|
||||||
|
console.log(data[0]);
|
||||||
|
setRecords(records);
|
||||||
|
$(".up,.down").click(function () {
|
||||||
|
var row = $(this).parents("tr:first");
|
||||||
|
if ($(this).is(".up")) {
|
||||||
|
row.insertBefore(row.prev());
|
||||||
|
} else {
|
||||||
|
row.insertAfter(row.next());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$("#HeaderGrid").on("dblclick", "tr", loadOne);
|
||||||
|
}
|
||||||
47
Adaptation/FileHandlers/json/StaticSite/js/wsjf-c.js
Normal file
47
Adaptation/FileHandlers/json/StaticSite/js/wsjf-c.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
var _apiUrl = null;
|
||||||
|
|
||||||
|
function initIndex(url, apiUrl) {
|
||||||
|
_apiUrl = apiUrl;
|
||||||
|
|
||||||
|
//Set the hubs URL for the connection
|
||||||
|
$.connection.hub.url = url;
|
||||||
|
$.connection.hub.logging = true;
|
||||||
|
|
||||||
|
// Declare a proxy to reference the hub.
|
||||||
|
// var chat = $.connection.myHub;
|
||||||
|
var chat = $.connection.weightedShortestJobFirstHub;
|
||||||
|
|
||||||
|
// Create a function that the hub can call to broadcast messages.
|
||||||
|
chat.client.addNotification = function (name, message) {
|
||||||
|
// Html encode display name and message.
|
||||||
|
console.log(message);
|
||||||
|
var encodedName = $('<div />').text(name).html();
|
||||||
|
var encodedMsg = $('<div />').text("hash").html();
|
||||||
|
// Add the message to the page.
|
||||||
|
$('#discussion').append('<li><strong>' + encodedName
|
||||||
|
+ '</strong>: ' + encodedMsg + '</li>');
|
||||||
|
};
|
||||||
|
// Get the user name and store it to prepend to messages.
|
||||||
|
$('#displayname').val(prompt('Enter your name:', ''));
|
||||||
|
// Set initial focus to message input box.
|
||||||
|
$('#message').focus();
|
||||||
|
// Start the connection.
|
||||||
|
$.connection.hub.start({ transport: 'longPolling' }).done(function () {
|
||||||
|
$('#sendmessage').click(function () {
|
||||||
|
// Call the Send method on the hub.
|
||||||
|
// chat.server.send($('#displayname').val(), $('#message').val());
|
||||||
|
var notification = {
|
||||||
|
"Json": null,
|
||||||
|
"id": 110743,
|
||||||
|
"page": "effort",
|
||||||
|
"QueryString": "time=1737573418926\u0026id=110743\u0026page=effort\u0026value=1",
|
||||||
|
"RemoteIpAddress": "10.95.36.87",
|
||||||
|
"time": 1737573418926,
|
||||||
|
"value": 1
|
||||||
|
};
|
||||||
|
chat.server.notifyAll(notification);
|
||||||
|
// Clear text box and reset focus for next comment.
|
||||||
|
$('#message').val('').focus();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
@ -25,12 +25,12 @@ function compareCostOfDelay(a, b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showOne(rowData) {
|
function showOne(rowData) {
|
||||||
if (rowData == null)
|
if (rowData == undefined)
|
||||||
return;
|
return;
|
||||||
var data = [];
|
var data = [];
|
||||||
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
data.push({ name: "Edit in ADO", value: '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + rowData["Id"] + '">Edit in ADO ' + rowData["Id"] + '</a>' });
|
||||||
for (const property in rowData) {
|
for (const property in rowData) {
|
||||||
if (rowData[property] == null)
|
if (rowData[property] == undefined)
|
||||||
continue;
|
continue;
|
||||||
data.push({ name: property, value: rowData[property].toString() });
|
data.push({ name: property, value: rowData[property].toString() });
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ function showOne(rowData) {
|
|||||||
|
|
||||||
function loadOne() {
|
function loadOne() {
|
||||||
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow();
|
||||||
if (selectedRow == null)
|
if (selectedRow == undefined)
|
||||||
return;
|
return;
|
||||||
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index];
|
||||||
showOne(rowData);
|
showOne(rowData);
|
||||||
@ -59,7 +59,7 @@ function detailSelectionChangedRunInfo(evt, ui) {
|
|||||||
|
|
||||||
function getState(state) {
|
function getState(state) {
|
||||||
var result;
|
var result;
|
||||||
if (state == null)
|
if (state == undefined)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (state === "New")
|
else if (state === "New")
|
||||||
result = `1-${state}`;
|
result = `1-${state}`;
|
||||||
@ -80,7 +80,7 @@ function getPriority(workItemType, priority) {
|
|||||||
var result;
|
var result;
|
||||||
if (workItemType === "Bug")
|
if (workItemType === "Bug")
|
||||||
result = "0-Bug";
|
result = "0-Bug";
|
||||||
else if (priority == null || priority === 0)
|
else if (priority == undefined || priority === 0)
|
||||||
result = "9-Null";
|
result = "9-Null";
|
||||||
else if (priority === 1)
|
else if (priority === 1)
|
||||||
result = `${priority}-High`;
|
result = `${priority}-High`;
|
||||||
@ -96,14 +96,14 @@ function getPriority(workItemType, priority) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordCoD(workItem) {
|
function updateRecordCoD(workItem) {
|
||||||
if (workItem !== null) {
|
if (workItem != undefined) {
|
||||||
if (workItem["Effort"] === null)
|
if (workItem["Effort"] == undefined)
|
||||||
workItem["Effort"] = 1;
|
workItem["Effort"] = 1;
|
||||||
if (workItem["BusinessValue"] === null)
|
if (workItem["BusinessValue"] == undefined)
|
||||||
workItem["BusinessValue"] = 99999;
|
workItem["BusinessValue"] = 99999;
|
||||||
if (workItem["TimeCriticality"] === null)
|
if (workItem["TimeCriticality"] == undefined)
|
||||||
workItem["TimeCriticality"] = 99999;
|
workItem["TimeCriticality"] = 99999;
|
||||||
if (workItem["RiskReductionMinusOpportunityEnablement"] === null)
|
if (workItem["RiskReductionMinusOpportunityEnablement"] == undefined)
|
||||||
workItem["RiskReductionMinusOpportunityEnablement"] = 99999;
|
workItem["RiskReductionMinusOpportunityEnablement"] = 99999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,7 +218,7 @@ function updateRecordOther(workItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateRecordParent(parent, workItem) {
|
function updateRecordParent(parent, workItem) {
|
||||||
if (parent === null) {
|
if (parent == undefined) {
|
||||||
workItem["ParentId"] = 9999999;
|
workItem["ParentId"] = 9999999;
|
||||||
workItem["ParentTitle"] = null;
|
workItem["ParentTitle"] = null;
|
||||||
workItem["ParentState"] = null;
|
workItem["ParentState"] = null;
|
||||||
@ -241,7 +241,7 @@ function getRecords(data) {
|
|||||||
workItem = data[i].WorkItem;
|
workItem = data[i].WorkItem;
|
||||||
if (workItem.WorkItemType !== 'Feature')
|
if (workItem.WorkItemType !== 'Feature')
|
||||||
continue;
|
continue;
|
||||||
if (workItem.State !== 'New' && workItem.State !== 'Active')
|
if (workItem.State !== 'Active' && workItem.State !== 'New')
|
||||||
continue;
|
continue;
|
||||||
if (workItem.Tags != null && workItem.Tags.includes("Ignore"))
|
if (workItem.Tags != null && workItem.Tags.includes("Ignore"))
|
||||||
continue;
|
continue;
|
||||||
@ -265,7 +265,7 @@ function setRecords(workItems) {
|
|||||||
for (var i = 0; i < workItems.length; i++) {
|
for (var i = 0; i < workItems.length; i++) {
|
||||||
record = workItems[i];
|
record = workItems[i];
|
||||||
html += "<tr><td>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
html += "<tr><td>" + '<a target="_blank" href="https://tfs.intra.infineon.com/tfs/FactoryIntegration/ART%20SPS/_workitems/edit/' + record.ParentId + '">' + record.ParentId + "</a>" +
|
||||||
"</td><td>" + record.Title +
|
"</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>" + '<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.Requester +
|
||||||
"</td><td>" + record.Title +
|
"</td><td>" + record.Title +
|
||||||
|
|||||||
37
Adaptation/FileHandlers/json/StaticSite/styles/cod.css
Normal file
37
Adaptation/FileHandlers/json/StaticSite/styles/cod.css
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#HeaderGridDiv,
|
||||||
|
#DetailsGridDiv {
|
||||||
|
font-size: 12px;
|
||||||
|
min-width: 1200px;
|
||||||
|
max-width: 1200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#HeaderGrid {
|
||||||
|
font-family: monospace;
|
||||||
|
margin-top: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#HeaderGrid tr td {
|
||||||
|
max-width: 200px;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#AllGrid {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
min-width: 1200px;
|
||||||
|
background-color: whitesmoke;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-of-type(odd) {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
#AllTextarea {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
#th-span {
|
||||||
|
margin-right: 500px;
|
||||||
|
}
|
||||||
@ -37,13 +37,27 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="coverlet.collector" Version="6.0.3" />
|
<PackageReference Include="coverlet.collector" Version="6.0.3" />
|
||||||
<PackageReference Include="FFMpegCore" Version="5.1.0" />
|
<PackageReference Include="FFMpegCore" Version="5.1.0" />
|
||||||
<PackageReference Include="IKVM.AWT.WinForms" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
<PackageReference Include="IKVM.AWT.WinForms" Version="7.2.4630.5">
|
||||||
<PackageReference Include="IKVM.OpenJDK.Core" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
<NoWarn>NU1701</NoWarn>
|
||||||
<PackageReference Include="IKVM.OpenJDK.Media" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="IKVM.OpenJDK.Text" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
<PackageReference Include="IKVM.OpenJDK.Core" Version="7.2.4630.5">
|
||||||
<PackageReference Include="IKVM.OpenJDK.Util" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
<NoWarn>NU1701</NoWarn>
|
||||||
<PackageReference Include="IKVM.OpenJDK.XML.API" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="IKVM.Runtime" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference>
|
<PackageReference Include="IKVM.OpenJDK.Media" Version="7.2.4630.5">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="IKVM.OpenJDK.Text" Version="7.2.4630.5">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="IKVM.OpenJDK.Util" Version="7.2.4630.5">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="IKVM.OpenJDK.XML.API" Version="7.2.4630.5">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="IKVM.Runtime" Version="7.2.4630.5">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="Instances" Version="3.0.1" />
|
<PackageReference Include="Instances" Version="3.0.1" />
|
||||||
<PackageReference Include="log4net" Version="3.0.3"></PackageReference>
|
<PackageReference Include="log4net" Version="3.0.3"></PackageReference>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0" />
|
||||||
@ -60,7 +74,9 @@
|
|||||||
<PackageReference Include="Microsoft.Win32.SystemEvents" Version="9.0.0" />
|
<PackageReference Include="Microsoft.Win32.SystemEvents" Version="9.0.0" />
|
||||||
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
<PackageReference Include="MSTest.TestAdapter" Version="3.7.0" />
|
||||||
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
<PackageReference Include="MSTest.TestFramework" Version="3.7.0" />
|
||||||
<PackageReference Include="Pdfbox" Version="1.1.1"><NoWarn>NU1701</NoWarn></PackageReference>
|
<PackageReference Include="Pdfbox" Version="1.1.1">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="RoboSharp" Version="1.6.0" />
|
<PackageReference Include="RoboSharp" Version="1.6.0" />
|
||||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.0" />
|
<PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.0" />
|
||||||
<PackageReference Include="System.Data.OleDb" Version="9.0.0" />
|
<PackageReference Include="System.Data.OleDb" Version="9.0.0" />
|
||||||
@ -78,7 +94,9 @@
|
|||||||
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.205.1" />
|
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.205.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Infineon.Mesa.PDF.Text.Stripper" Version="4.8.0.1"><NoWarn>NU1701</NoWarn></PackageReference>
|
<PackageReference Include="Infineon.Mesa.PDF.Text.Stripper" Version="4.8.0.1">
|
||||||
|
<NoWarn>NU1701</NoWarn>
|
||||||
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Infineon.Yoda.DotNetCore" Version="5.4.3" />
|
<PackageReference Include="Infineon.Yoda.DotNetCore" Version="5.4.3" />
|
||||||
@ -87,6 +105,15 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Tesseract" Version="5.2.0" />
|
<PackageReference Include="Tesseract" Version="5.2.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNet.SignalR" Version="2.4.3" />
|
||||||
|
<PackageReference Include="Microsoft.AspNet.SignalR.Core" Version="2.4.3" />
|
||||||
|
<PackageReference Include="Microsoft.Owin" Version="4.2.2" />
|
||||||
|
<PackageReference Include="Microsoft.Owin.Cors" Version="4.2.2" />
|
||||||
|
<PackageReference Include="Microsoft.Owin.Hosting" Version="4.2.2" />
|
||||||
|
<PackageReference Include="Microsoft.Owin.Security" Version="4.2.2" />
|
||||||
|
<PackageReference Include="Owin" Version="1.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="appsettings.json">
|
<None Include="appsettings.json">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
|||||||
@ -87,5 +87,18 @@ public class MESAFIBACKLOG : EAFLoggingUnitTesting
|
|||||||
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
|
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
[Ignore]
|
||||||
|
#endif
|
||||||
|
[TestMethod]
|
||||||
|
public void Development__v2_58_0__MESAFIBACKLOG__Priority()
|
||||||
|
{
|
||||||
|
string check = "*.json";
|
||||||
|
MethodBase methodBase = new StackFrame().GetMethod();
|
||||||
|
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Getting configuration"));
|
||||||
|
_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);
|
||||||
|
EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, " - Exit"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1,5 +1,6 @@
|
|||||||
#if true
|
#if true
|
||||||
using Adaptation.FileHandlers.json.WorkItems;
|
using Adaptation.FileHandlers.json.WorkItems;
|
||||||
|
using Adaptation.FileHandlers.Priority;
|
||||||
using Adaptation.Shared;
|
using Adaptation.Shared;
|
||||||
using Adaptation.Shared.Methods;
|
using Adaptation.Shared.Methods;
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
@ -173,8 +174,8 @@ public class MESAFIBACKLOG
|
|||||||
{
|
{
|
||||||
string check = "*.json";
|
string check = "*.json";
|
||||||
bool validatePDSF = false;
|
bool validatePDSF = false;
|
||||||
_MESAFIBACKLOG.Development__v2_58_0__MESAFIBACKLOG__ADO();
|
|
||||||
MethodBase methodBase = new StackFrame().GetMethod();
|
MethodBase methodBase = new StackFrame().GetMethod();
|
||||||
|
_MESAFIBACKLOG.Development__v2_58_0__MESAFIBACKLOG__ADO();
|
||||||
Assert.IsFalse(string.IsNullOrEmpty(_MESAFIBACKLOG.AdaptationTesting.TestContext.FullyQualifiedTestClassName));
|
Assert.IsFalse(string.IsNullOrEmpty(_MESAFIBACKLOG.AdaptationTesting.TestContext.FullyQualifiedTestClassName));
|
||||||
string[] variables = _MESAFIBACKLOG.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
|
string[] variables = _MESAFIBACKLOG.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
|
||||||
IFileRead fileRead = _MESAFIBACKLOG.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
|
IFileRead fileRead = _MESAFIBACKLOG.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
|
||||||
@ -185,5 +186,37 @@ public class MESAFIBACKLOG
|
|||||||
NonThrowTryCatch();
|
NonThrowTryCatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
[Ignore]
|
||||||
|
#endif
|
||||||
|
[TestMethod]
|
||||||
|
public void Development__v2_58_0__MESAFIBACKLOG__Priority638323658386612552__Normal()
|
||||||
|
{
|
||||||
|
string check = "*.json";
|
||||||
|
bool validatePDSF = false;
|
||||||
|
MethodBase methodBase = new StackFrame().GetMethod();
|
||||||
|
_MESAFIBACKLOG.Development__v2_58_0__MESAFIBACKLOG__Priority();
|
||||||
|
Assert.IsFalse(string.IsNullOrEmpty(_MESAFIBACKLOG.AdaptationTesting.TestContext.FullyQualifiedTestClassName));
|
||||||
|
string[] variables = _MESAFIBACKLOG.AdaptationTesting.GetVariables(methodBase, check, validatePDSF);
|
||||||
|
IFileRead fileRead = _MESAFIBACKLOG.AdaptationTesting.Get(methodBase, sourceFileLocation: variables[2], sourceFileFilter: variables[3], useCyclicalForDescription: false);
|
||||||
|
Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResult = fileRead.ReExtract();
|
||||||
|
Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1));
|
||||||
|
Assert.IsNotNull(extractResult.Item3);
|
||||||
|
Assert.IsNotNull(extractResult.Item4);
|
||||||
|
WeightedShortestJobFirstHub weightedShortestJobFirstHub = new();
|
||||||
|
Notification notification = new(fibonacci: null,
|
||||||
|
id: 1107438888,
|
||||||
|
inverse: null,
|
||||||
|
machineId: Environment.MachineName,
|
||||||
|
page: "effort",
|
||||||
|
remoteIpAddress: "10.95.36.87",
|
||||||
|
site: "MES",
|
||||||
|
time: 1737573418926,
|
||||||
|
username: Environment.UserName,
|
||||||
|
value: 1);
|
||||||
|
weightedShortestJobFirstHub.NotifyAll(notification);
|
||||||
|
NonThrowTryCatch();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -150,7 +150,11 @@
|
|||||||
<Compile Include="Adaptation\FileHandlers\OpenInsightMetrologyViewerAttachments\FileRead.cs" />
|
<Compile Include="Adaptation\FileHandlers\OpenInsightMetrologyViewerAttachments\FileRead.cs" />
|
||||||
<Compile Include="Adaptation\FileHandlers\Priority\Aggregation.cs" />
|
<Compile Include="Adaptation\FileHandlers\Priority\Aggregation.cs" />
|
||||||
<Compile Include="Adaptation\FileHandlers\Priority\FileRead.cs" />
|
<Compile Include="Adaptation\FileHandlers\Priority\FileRead.cs" />
|
||||||
<Compile Include="Adaptation\FileHandlers\Priority\Record.cs" />
|
<Compile Include="Adaptation\FileHandlers\Priority\Notification.cs" />
|
||||||
|
<Compile Include="Adaptation\FileHandlers\Priority\Settings.cs" />
|
||||||
|
<Compile Include="Adaptation\FileHandlers\Priority\Startup.cs" />
|
||||||
|
<Compile Include="Adaptation\FileHandlers\Priority\WeightedShortestJobFirstHub.cs" />
|
||||||
|
<Compile Include="Adaptation\FileHandlers\Priority\WorkItem.cs" />
|
||||||
<Compile Include="Adaptation\FileHandlers\Processed\FileRead.cs" />
|
<Compile Include="Adaptation\FileHandlers\Processed\FileRead.cs" />
|
||||||
<Compile Include="Adaptation\FileHandlers\SPaCe\FileRead.cs" />
|
<Compile Include="Adaptation\FileHandlers\SPaCe\FileRead.cs" />
|
||||||
<Compile Include="Adaptation\Ifx\Eaf\Common\Configuration\ConnectionSetting.cs" />
|
<Compile Include="Adaptation\Ifx\Eaf\Common\Configuration\ConnectionSetting.cs" />
|
||||||
@ -209,6 +213,27 @@
|
|||||||
<PackageReference Include="Infineon.EAF.Runtime">
|
<PackageReference Include="Infineon.EAF.Runtime">
|
||||||
<Version>2.58.0</Version>
|
<Version>2.58.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.AspNet.SignalR.SelfHost">
|
||||||
|
<Version>2.4.3</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.AspNet.SignalR.Core">
|
||||||
|
<Version>2.4.3</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Owin">
|
||||||
|
<Version>1.0.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.Owin">
|
||||||
|
<Version>2.1.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.Owin.Cors">
|
||||||
|
<Version>2.1.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.Owin.Security">
|
||||||
|
<Version>2.1.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.Owin.Hosting">
|
||||||
|
<Version>2.1.0</Version>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.TeamFoundationServer.Client">
|
<PackageReference Include="Microsoft.TeamFoundationServer.Client">
|
||||||
<Version>16.205.1</Version>
|
<Version>16.205.1</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
Reference in New Issue
Block a user