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", | ||||
|       "request": "attach", | ||||
|       "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); | ||||
|             try | ||||
|             { | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body);  | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body); | ||||
|                 File.WriteAllText(".email", body); | ||||
|             } | ||||
|             catch (Exception) { } | ||||
| @ -242,7 +242,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); | ||||
|             try | ||||
|             { | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body);  | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body); | ||||
|                 File.WriteAllText(".email", body); | ||||
|             } | ||||
|             catch (Exception) { } | ||||
|  | ||||
| @ -138,7 +138,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); | ||||
|             try | ||||
|             { | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body);  | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body); | ||||
|                 File.WriteAllText(".email", body); | ||||
|             } | ||||
|             catch (Exception) { } | ||||
| @ -269,7 +269,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); | ||||
|             try | ||||
|             { | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body);  | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body); | ||||
|                 File.WriteAllText(".email", body); | ||||
|             } | ||||
|             catch (Exception) { } | ||||
| @ -285,7 +285,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace); | ||||
|             try | ||||
|             { | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body);  | ||||
|                 _SMTP.SendHighPriorityEmailMessage(subject, body); | ||||
|                 File.WriteAllText(".email", body); | ||||
|             } | ||||
|             catch (Exception) { } | ||||
|  | ||||
| @ -110,6 +110,8 @@ public class ProcessData : IProcessData | ||||
|     private static FileInfo GetFileInfoAndMaybeWriteFile(string directory, WorkItem workItem) | ||||
|     { | ||||
|         FileInfo result; | ||||
|         if (!Directory.Exists(directory)) | ||||
|             _ = Directory.CreateDirectory(directory); | ||||
|         string json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem); | ||||
|         string singletonDirectory = Path.Combine(directory, $"{workItem.Id}"); | ||||
|         if (Directory.Exists(singletonDirectory)) | ||||
| @ -213,9 +215,13 @@ public class ProcessData : IProcessData | ||||
|     { | ||||
|         string old; | ||||
|         string checkFile; | ||||
|         string checkDirectory; | ||||
|         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; | ||||
|             if (old != json) | ||||
|                 File.WriteAllText(checkFile, json); | ||||
|  | ||||
| @ -1,38 +1,194 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.Priority; | ||||
|  | ||||
| #nullable enable | ||||
|  | ||||
| public class Aggregation | ||||
| { | ||||
|  | ||||
|     [JsonConstructor] | ||||
|     public Aggregation( | ||||
|         string average, | ||||
|         int count, | ||||
|         int? inverse, | ||||
|         int maximum, | ||||
|         int minimum, | ||||
|         ReadOnlyCollection<Record> records, | ||||
|         int sum | ||||
|     ) | ||||
|     public Aggregation(double inverseAverage, | ||||
|                        int valueCount, | ||||
|                        double fibonacciAverage, | ||||
|                        int? inverseValue, | ||||
|                        int valueMaximum, | ||||
|                        int valueMinimum, | ||||
|                        Notification[] notifications, | ||||
|                        int valueSum) | ||||
|     { | ||||
|         Average = average; | ||||
|         Count = count; | ||||
|         Inverse = inverse; | ||||
|         Maximum = maximum; | ||||
|         Minimum = minimum; | ||||
|         Records = records; | ||||
|         Sum = sum; | ||||
|         InverseAverage = inverseAverage; | ||||
|         ValueCount = valueCount; | ||||
|         FibonacciAverage = fibonacciAverage; | ||||
|         InverseValue = inverseValue; | ||||
|         ValueMaximum = valueMaximum; | ||||
|         ValueMinimum = valueMinimum; | ||||
|         Notifications = notifications; | ||||
|         ValueSum = valueSum; | ||||
|     } | ||||
|  | ||||
|     [JsonPropertyName("Average")] public string Average { get; } | ||||
|     [JsonPropertyName("Count")] public int Count { get; } | ||||
|     [JsonPropertyName("Inverse")] public int? Inverse { get; } | ||||
|     [JsonPropertyName("Maximum")] public int Maximum { get; } | ||||
|     [JsonPropertyName("Minimum")] public int Minimum { get; } | ||||
|     [JsonPropertyName("Records")] public ReadOnlyCollection<Record> Records { get; } | ||||
|     [JsonPropertyName("Sum")] public int Sum { get; } | ||||
|     public double InverseAverage { get; } // [JsonPropertyName("InverseAverage")] | ||||
|     public int ValueCount { get; } // [JsonPropertyName("ValueCount")] | ||||
|     public double FibonacciAverage { get; } // [JsonPropertyName("Fibonacci")] | ||||
|     public int? InverseValue { get; } // [JsonPropertyName("InverseValue")] | ||||
|     public int ValueMaximum { get; } // [JsonPropertyName("ValueMaximum")] | ||||
|     public int ValueMinimum { get; } // [JsonPropertyName("ValueMinimum")] | ||||
|     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[]))] | ||||
| 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.Duplicator; | ||||
| using Adaptation.Shared.Methods; | ||||
| using log4net; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Diagnostics; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text.Json; | ||||
| using System.Threading; | ||||
|  | ||||
| namespace Adaptation.FileHandlers.Priority; | ||||
|  | ||||
| #nullable enable | ||||
|  | ||||
| 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) : | ||||
|         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; | ||||
|         _NullData = string.Empty; | ||||
|         _Logistics = new(this); | ||||
|         _NullData = string.Empty; | ||||
|         _Log = LogManager.GetLogger(typeof(FileRead)); | ||||
|         if (_FileParameter is null) | ||||
|             throw new Exception(cellInstanceConnectionName); | ||||
|         if (_ModelObjectParameterDefinitions is null) | ||||
| @ -33,12 +41,23 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|             throw new Exception(cellInstanceConnectionName); | ||||
|         if (_IsEAFHosted) | ||||
|             NestExistingFiles(_FileConnectorConfiguration); | ||||
|         if (!Debugger.IsAttached && fileConnectorConfiguration.PreProcessingMode != FileConnectorConfiguration.PreProcessingModeEnum.Process) | ||||
|             _Timer = new Timer(Callback, null, (int)(fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000), Timeout.Infinite); | ||||
|         else | ||||
|         string parentDirectory = Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation) ?? throw new Exception(); | ||||
|         _Settings = new(digits: 5, | ||||
|                         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); | ||||
|             Callback(null); | ||||
|             _ = Microsoft.Owin.Hosting.WebApp.Start(url); | ||||
|             _Log.Info($"Server running on {url}"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -91,7 +110,7 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         DateTime dateTime = DateTime.Now; | ||||
|         results = GetExtractResult(reportFullPath, dateTime); | ||||
|         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) | ||||
|             WritePDSF(this, results.Item3); | ||||
|         UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); | ||||
| @ -107,187 +126,6 @@ public class FileRead : Shared.FileRead, IFileRead | ||||
|         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) | ||||
|     { | ||||
|         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" /> | ||||
|     <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="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/122508.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -56,7 +56,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <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="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/122514.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -56,7 +56,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <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="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/122517.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -56,7 +56,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <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> | ||||
|     <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/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/123066.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -56,7 +56,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <title>Infineon - 123067 - WIP</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=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/123067.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -56,7 +56,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <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="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/126169.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -56,7 +56,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <title>Infineon - Business Value</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=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/business.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -59,7 +59,7 @@ What is the relative value to the Customer or business? | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
							
								
								
									
										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" /> | ||||
|     <title>Infineon - Effort</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=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/effort.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -55,7 +55,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <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="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/risk.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -59,7 +59,7 @@ What else does this do for our business? | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <title>Infineon - Time Criticality</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=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/time.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -32,7 +32,6 @@ How does user/business value decay over time? | ||||
| • Is there a fixed deadline? | ||||
| • Will they wait for us or move to another Solution? | ||||
| • What is the current effect on Customer satisfaction? | ||||
|  | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="navbar-collapse collapse"> | ||||
| @ -60,7 +59,7 @@ How does user/business value decay over time? | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <meta name="viewport" content="width=device-width" /> | ||||
|     <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="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=2025-01-22-10-49" 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-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/with-parents.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -55,7 +55,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
							
								
								
									
										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" /> | ||||
|     <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=2024-10-07-18-50" rel="stylesheet" /> | ||||
|     <link href="/igniteui/css/structure/infragistics.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=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=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/jquery-ui.min.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/js/wsjf.js?v=2024-10-07-18-50" 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.lob.js?v=2024-10-07-18-50" type="text/javascript"></script> | ||||
|     <script src="/igniteui/js/infragistics.dv.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=2025-01-22-10-49" 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=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> | ||||
| @ -55,7 +55,7 @@ | ||||
|     <script> | ||||
|  | ||||
|         $(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> | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,22 +1,22 @@ | ||||
| var _apiUrl = null; | ||||
|  | ||||
| function compareFunction(a, b) { | ||||
|     if (a.BusinessValue === null || b.BusinessValue === null) { | ||||
|     if (a.BusinessValue == undefined || b.BusinessValue == undefined) { | ||||
|         var aPollValue = a.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 { | ||||
|         return b.BusinessValue - a.BusinessValue || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id; | ||||
|     } | ||||
| } | ||||
|  | ||||
| function showOne(rowData) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -30,7 +30,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -66,7 +66,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -81,45 +81,34 @@ function getPriority(workItemType, priority) { | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function getInversePriority(priority) { | ||||
| function getPollValue(description, pollValue) { | ||||
|     var result; | ||||
|     if (priority == null || priority === 0) | ||||
|         result = "0.000"; | ||||
|     else if (priority === 1) | ||||
|         result = "3.000"; | ||||
|     else if (priority === 2) | ||||
|         result = "2.000"; | ||||
|     else if (priority === 3) | ||||
|         result = "1.000"; | ||||
|     if (pollValue == undefined || pollValue.BusinessValue == undefined || pollValue.BusinessValue.InverseAverage == undefined) | ||||
|         result = ""; | ||||
|     else if (pollValue.BusinessValue.InverseAverage >= 4) | ||||
|         result = `${pollValue.BusinessValue.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.BusinessValue.InverseAverage >= 3) | ||||
|         result = `${pollValue.BusinessValue.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.BusinessValue.InverseAverage >= 2) | ||||
|         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 | ||||
|         result = "0.000"; | ||||
|     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'; | ||||
|         result = ""; | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -128,12 +117,12 @@ function updateRecordCoD(workItem) { | ||||
| function updateRecordOther(workItem, dataB, description) { | ||||
|     workItem["State"] = getState(workItem["State"]); | ||||
|     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; | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = 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) { | ||||
|     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"); | ||||
|     for (var i = 0; i < workItems.length; 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>" + | ||||
|             "</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>" + | ||||
| @ -201,14 +223,19 @@ function setRecords(workItems, page, description, th) { | ||||
|             "</td><td>" + | ||||
|             '<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' + | ||||
|             '<option value="9">Unknown</option>' + | ||||
|             '<option value="1">High (Most ' + description + ')</option>' + | ||||
|             '<option value="2">Medium</option>' + | ||||
|             '<option value="3">Low</option>' + | ||||
|             '<option value="1">Highest (Most ' + description + ')</option>' + | ||||
|             '<option value="2">High</option>' + | ||||
|             '<option value="3">Medium</option>' + | ||||
|             '<option value="4">Low</option>' + | ||||
|             '<option value="5">Lowest</option>' + | ||||
|             "</select>" + | ||||
|             "</td><td>" + 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='down'>Down</a>" + | ||||
|             "</td><td>" + record.PollValue + | ||||
|             "</td><td>" + length + " - " + record.BusinessValue + | ||||
|             "</td></tr>"; | ||||
|     } | ||||
|     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; | ||||
|  | ||||
| function compareFunction(a, b) { | ||||
|     if (a.Effort === null || b.Effort === null) { | ||||
|     if (a.Effort == undefined || b.Effort == undefined) { | ||||
|         var aPollValue = a.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 { | ||||
|         return b.Effort - a.Effort || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id; | ||||
|     } | ||||
| } | ||||
|  | ||||
| function showOne(rowData) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -30,7 +30,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -66,7 +66,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -81,45 +81,34 @@ function getPriority(workItemType, priority) { | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function getInversePriority(priority) { | ||||
| function getPollValue(description, pollValue) { | ||||
|     var result; | ||||
|     if (priority == null || priority === 0) | ||||
|         result = "0.000"; | ||||
|     else if (priority === 1) | ||||
|         result = "3.000"; | ||||
|     else if (priority === 2) | ||||
|         result = "2.000"; | ||||
|     else if (priority === 3) | ||||
|         result = "1.000"; | ||||
|     if (pollValue == undefined || pollValue.Effort == undefined || pollValue.Effort.InverseAverage == undefined) | ||||
|         result = ""; | ||||
|     else if (pollValue.Effort.InverseAverage >= 4) | ||||
|         result = `${pollValue.Effort.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.Effort.InverseAverage >= 3) | ||||
|         result = `${pollValue.Effort.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.Effort.InverseAverage >= 2) | ||||
|         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 | ||||
|         result = "0.000"; | ||||
|     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'; | ||||
|         result = ""; | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -128,12 +117,12 @@ function updateRecordCoD(workItem) { | ||||
| function updateRecordOther(workItem, dataB, description) { | ||||
|     workItem["State"] = getState(workItem["State"]); | ||||
|     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; | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = 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) { | ||||
|     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"); | ||||
|     for (var i = 0; i < workItems.length; 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>" + | ||||
|             "</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>" + | ||||
| @ -201,14 +223,19 @@ function setRecords(workItems, page, description, th) { | ||||
|             "</td><td>" + | ||||
|             '<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' + | ||||
|             '<option value="9">Unknown</option>' + | ||||
|             '<option value="1">High (Most ' + description + ')</option>' + | ||||
|             '<option value="2">Medium</option>' + | ||||
|             '<option value="3">Low</option>' + | ||||
|             '<option value="1">Highest (Most ' + description + ')</option>' + | ||||
|             '<option value="2">High</option>' + | ||||
|             '<option value="3">Medium</option>' + | ||||
|             '<option value="4">Low</option>' + | ||||
|             '<option value="5">Lowest</option>' + | ||||
|             "</select>" + | ||||
|             "</td><td>" + 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='down'>Down</a>" + | ||||
|             "</td><td>" + record.PollValue + | ||||
|             "</td><td>" + length + " - " + record.Effort + | ||||
|             "</td></tr>"; | ||||
|     } | ||||
|     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) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| function compareFunction(a, b) { | ||||
|     if (a.CoD === null || b.CoD === null) { | ||||
|     if (a.CoD == undefined || b.CoD == undefined) { | ||||
|         return b.Id - a.Id; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
|  | ||||
| @ -1,22 +1,22 @@ | ||||
| var _apiUrl = null; | ||||
|  | ||||
| function compareFunction(a, b) { | ||||
|     if (a.RiskReductionMinusOpportunityEnablement === null || b.RiskReductionMinusOpportunityEnablement === null) { | ||||
|     if (a.RiskReductionMinusOpportunityEnablement == undefined || b.RiskReductionMinusOpportunityEnablement == undefined) { | ||||
|         var aPollValue = a.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 { | ||||
|         return b.RiskReductionMinusOpportunityEnablement - a.RiskReductionMinusOpportunityEnablement || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id; | ||||
|     } | ||||
| } | ||||
|  | ||||
| function showOne(rowData) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -30,7 +30,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -66,7 +66,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -81,45 +81,34 @@ function getPriority(workItemType, priority) { | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function getInversePriority(priority) { | ||||
| function getPollValue(description, pollValue) { | ||||
|     var result; | ||||
|     if (priority == null || priority === 0) | ||||
|         result = "0.000"; | ||||
|     else if (priority === 1) | ||||
|         result = "3.000"; | ||||
|     else if (priority === 2) | ||||
|         result = "2.000"; | ||||
|     else if (priority === 3) | ||||
|         result = "1.000"; | ||||
|     if (pollValue == undefined || pollValue.RiskReductionOpportunityEnablement == undefined || pollValue.RiskReductionOpportunityEnablement.InverseAverage == undefined) | ||||
|         result = ""; | ||||
|     else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 4) | ||||
|         result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 3) | ||||
|         result = `${pollValue.RiskReductionOpportunityEnablement.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.RiskReductionOpportunityEnablement.InverseAverage >= 2) | ||||
|         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 | ||||
|         result = "0.000"; | ||||
|     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'; | ||||
|         result = ""; | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -128,12 +117,12 @@ function updateRecordCoD(workItem) { | ||||
| function updateRecordOther(workItem, dataB, description) { | ||||
|     workItem["State"] = getState(workItem["State"]); | ||||
|     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; | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = 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) { | ||||
|     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"); | ||||
|     for (var i = 0; i < workItems.length; 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>" + | ||||
|             "</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>" + | ||||
| @ -201,14 +223,19 @@ function setRecords(workItems, page, description, th) { | ||||
|             "</td><td>" + | ||||
|             '<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' + | ||||
|             '<option value="9">Unknown</option>' + | ||||
|             '<option value="1">High (Most ' + description + ')</option>' + | ||||
|             '<option value="2">Medium</option>' + | ||||
|             '<option value="3">Low</option>' + | ||||
|             '<option value="1">Highest (Most ' + description + ')</option>' + | ||||
|             '<option value="2">High</option>' + | ||||
|             '<option value="3">Medium</option>' + | ||||
|             '<option value="4">Low</option>' + | ||||
|             '<option value="5">Lowest</option>' + | ||||
|             "</select>" + | ||||
|             "</td><td>" + 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='down'>Down</a>" + | ||||
|             "</td><td>" + record.PollValue + | ||||
|             "</td><td>" + length + " - " + record.RiskReductionMinusOpportunityEnablement + | ||||
|             "</td></tr>"; | ||||
|     } | ||||
|     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; | ||||
|  | ||||
| function compareFunction(a, b) { | ||||
|     if (a.TimeCriticality === null || b.TimeCriticality === null) { | ||||
|     if (a.TimeCriticality == undefined || b.TimeCriticality == undefined) { | ||||
|         var aPollValue = a.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 { | ||||
|         return b.TimeCriticality - a.TimeCriticality || b.State[0] - a.State[0] || b.ParentId - a.ParentId || a.Id - b.Id; | ||||
|     } | ||||
| } | ||||
|  | ||||
| function showOne(rowData) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -30,7 +30,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -45,7 +45,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -66,7 +66,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -81,45 +81,34 @@ function getPriority(workItemType, priority) { | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function getInversePriority(priority) { | ||||
| function getPollValue(description, pollValue) { | ||||
|     var result; | ||||
|     if (priority == null || priority === 0) | ||||
|         result = "0.000"; | ||||
|     else if (priority === 1) | ||||
|         result = "3.000"; | ||||
|     else if (priority === 2) | ||||
|         result = "2.000"; | ||||
|     else if (priority === 3) | ||||
|         result = "1.000"; | ||||
|     if (pollValue == undefined || pollValue.TimeCriticality == undefined || pollValue.TimeCriticality.InverseAverage == undefined) | ||||
|         result = ""; | ||||
|     else if (pollValue.TimeCriticality.InverseAverage >= 4) | ||||
|         result = `${pollValue.TimeCriticality.InverseAverage} - 1-Highest (Most ${description}) - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.TimeCriticality.InverseAverage >= 3) | ||||
|         result = `${pollValue.TimeCriticality.InverseAverage} - 2-High - ${pollValue.Count} Vote(s)`; | ||||
|     else if (pollValue.TimeCriticality.InverseAverage >= 2) | ||||
|         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 | ||||
|         result = "0.000"; | ||||
|     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'; | ||||
|         result = ""; | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -128,12 +117,12 @@ function updateRecordCoD(workItem) { | ||||
| function updateRecordOther(workItem, dataB, description) { | ||||
|     workItem["State"] = getState(workItem["State"]); | ||||
|     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; | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = 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) { | ||||
|     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"); | ||||
|     for (var i = 0; i < workItems.length; 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>" + | ||||
|             "</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>" + | ||||
| @ -201,14 +224,19 @@ function setRecords(workItems, page, description, th) { | ||||
|             "</td><td>" + | ||||
|             '<select onchange="sendValue(this, \'' + page + '\', ' + record.Id + ')">' + | ||||
|             '<option value="9">Unknown</option>' + | ||||
|             '<option value="1">High (Most ' + description + ')</option>' + | ||||
|             '<option value="2">Medium</option>' + | ||||
|             '<option value="3">Low</option>' + | ||||
|             '<option value="1">Highest (Most ' + description + ')</option>' + | ||||
|             '<option value="2">High</option>' + | ||||
|             '<option value="3">Medium</option>' + | ||||
|             '<option value="4">Low</option>' + | ||||
|             '<option value="5">Lowest</option>' + | ||||
|             "</select>" + | ||||
|             "</td><td>" + 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='down'>Down</a>" + | ||||
|             "</td><td>" + record.PollValue + | ||||
|             "</td><td>" + length + " - " + record.TimeCriticality + | ||||
|             "</td></tr>"; | ||||
|     } | ||||
|     element.innerHTML = html.replaceAll(">null<", "> <"); | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 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; | ||||
|     } else { | ||||
|         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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -26,7 +26,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -41,7 +41,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -62,7 +62,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -78,14 +78,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem.Effort === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem.Effort == undefined) | ||||
|             workItem.Effort = 10123; | ||||
|         if (workItem.BusinessValue === null) | ||||
|         if (workItem.BusinessValue == undefined) | ||||
|             workItem.BusinessValue = 99999; | ||||
|         if (workItem.TimeCriticality === null) | ||||
|         if (workItem.TimeCriticality == undefined) | ||||
|             workItem.TimeCriticality = 99999; | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement === null) | ||||
|         if (workItem.RiskReductionMinusOpportunityEnablement == undefined) | ||||
|             workItem.RiskReductionMinusOpportunityEnablement = 99999; | ||||
|         workItem.CoD = workItem.RiskReductionMinusOpportunityEnablement + workItem.TimeCriticality + workItem.BusinessValue; | ||||
|     } | ||||
| @ -97,7 +97,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = 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) { | ||||
|     if (rowData == null) | ||||
|     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] == null) | ||||
|         if (rowData[property] == undefined) | ||||
|             continue; | ||||
|         data.push({ name: property, value: rowData[property].toString() }); | ||||
|     } | ||||
| @ -44,7 +44,7 @@ function showOne(rowData) { | ||||
|  | ||||
| function loadOne() { | ||||
|     var selectedRow = $("#HeaderGrid").data("igGridSelection").selectedRow(); | ||||
|     if (selectedRow == null) | ||||
|     if (selectedRow == undefined) | ||||
|         return; | ||||
|     var rowData = $("#HeaderGrid").data("igGrid").dataSource.dataView()[selectedRow.index]; | ||||
|     showOne(rowData); | ||||
| @ -59,7 +59,7 @@ function detailSelectionChangedRunInfo(evt, ui) { | ||||
|  | ||||
| function getState(state) { | ||||
|     var result; | ||||
|     if (state == null) | ||||
|     if (state == undefined) | ||||
|         result = "9-Null"; | ||||
|     else if (state === "New") | ||||
|         result = `1-${state}`; | ||||
| @ -80,7 +80,7 @@ function getPriority(workItemType, priority) { | ||||
|     var result; | ||||
|     if (workItemType === "Bug") | ||||
|         result = "0-Bug"; | ||||
|     else if (priority == null || priority === 0) | ||||
|     else if (priority == undefined || priority === 0) | ||||
|         result = "9-Null"; | ||||
|     else if (priority === 1) | ||||
|         result = `${priority}-High`; | ||||
| @ -96,14 +96,14 @@ function getPriority(workItemType, priority) { | ||||
| } | ||||
|  | ||||
| function updateRecordCoD(workItem) { | ||||
|     if (workItem !== null) { | ||||
|         if (workItem["Effort"] === null) | ||||
|     if (workItem != undefined) { | ||||
|         if (workItem["Effort"] == undefined) | ||||
|             workItem["Effort"] = 1; | ||||
|         if (workItem["BusinessValue"] === null) | ||||
|         if (workItem["BusinessValue"] == undefined) | ||||
|             workItem["BusinessValue"] = 99999; | ||||
|         if (workItem["TimeCriticality"] === null) | ||||
|         if (workItem["TimeCriticality"] == undefined) | ||||
|             workItem["TimeCriticality"] = 99999; | ||||
|         if (workItem["RiskReductionMinusOpportunityEnablement"] === null) | ||||
|         if (workItem["RiskReductionMinusOpportunityEnablement"] == undefined) | ||||
|             workItem["RiskReductionMinusOpportunityEnablement"] = 99999; | ||||
|     } | ||||
| } | ||||
| @ -218,7 +218,7 @@ function updateRecordOther(workItem) { | ||||
| } | ||||
|  | ||||
| function updateRecordParent(parent, workItem) { | ||||
|     if (parent === null) { | ||||
|     if (parent == undefined) { | ||||
|         workItem["ParentId"] = 9999999; | ||||
|         workItem["ParentTitle"] = null; | ||||
|         workItem["ParentState"] = null; | ||||
| @ -241,7 +241,7 @@ function getRecords(data) { | ||||
|         workItem = data[i].WorkItem; | ||||
|         if (workItem.WorkItemType !== 'Feature') | ||||
|             continue; | ||||
|         if (workItem.State !== 'New' && workItem.State !== 'Active') | ||||
|         if (workItem.State !== 'Active' && workItem.State !== 'New') | ||||
|             continue; | ||||
|         if (workItem.Tags != null && workItem.Tags.includes("Ignore")) | ||||
|             continue; | ||||
| @ -265,7 +265,7 @@ function setRecords(workItems) { | ||||
|     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.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>" + record.Requester + | ||||
|             "</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> | ||||
|         <PackageReference Include="coverlet.collector" Version="6.0.3" /> | ||||
|         <PackageReference Include="FFMpegCore" Version="5.1.0" /> | ||||
|         <PackageReference Include="IKVM.AWT.WinForms" Version="7.2.4630.5"><NoWarn>NU1701</NoWarn></PackageReference> | ||||
|         <PackageReference Include="IKVM.OpenJDK.Core" 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="IKVM.AWT.WinForms" Version="7.2.4630.5"> | ||||
|             <NoWarn>NU1701</NoWarn> | ||||
|         </PackageReference> | ||||
|         <PackageReference Include="IKVM.OpenJDK.Core" 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="log4net" Version="3.0.3"></PackageReference> | ||||
|         <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="MSTest.TestAdapter" 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="System.Configuration.ConfigurationManager" 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" /> | ||||
|     </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> | ||||
|         <PackageReference Include="Infineon.Yoda.DotNetCore" Version="5.4.3" /> | ||||
| @ -87,6 +105,15 @@ | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Tesseract" Version="5.2.0" /> | ||||
|     </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> | ||||
|         <None Include="appsettings.json"> | ||||
|             <CopyToOutputDirectory>Always</CopyToOutputDirectory> | ||||
|  | ||||
| @ -87,5 +87,18 @@ public class MESAFIBACKLOG : EAFLoggingUnitTesting | ||||
|         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 | ||||
| @ -1,5 +1,6 @@ | ||||
| #if true | ||||
| using Adaptation.FileHandlers.json.WorkItems; | ||||
| using Adaptation.FileHandlers.Priority; | ||||
| using Adaptation.Shared; | ||||
| using Adaptation.Shared.Methods; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| @ -173,8 +174,8 @@ public class MESAFIBACKLOG | ||||
|     { | ||||
|         string check = "*.json"; | ||||
|         bool validatePDSF = false; | ||||
|         _MESAFIBACKLOG.Development__v2_58_0__MESAFIBACKLOG__ADO(); | ||||
|         MethodBase methodBase = new StackFrame().GetMethod(); | ||||
|         _MESAFIBACKLOG.Development__v2_58_0__MESAFIBACKLOG__ADO(); | ||||
|         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); | ||||
| @ -185,5 +186,37 @@ public class MESAFIBACKLOG | ||||
|         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 | ||||
| @ -150,7 +150,11 @@ | ||||
|     <Compile Include="Adaptation\FileHandlers\OpenInsightMetrologyViewerAttachments\FileRead.cs" /> | ||||
|     <Compile Include="Adaptation\FileHandlers\Priority\Aggregation.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\SPaCe\FileRead.cs" /> | ||||
|     <Compile Include="Adaptation\Ifx\Eaf\Common\Configuration\ConnectionSetting.cs" /> | ||||
| @ -209,6 +213,27 @@ | ||||
|     <PackageReference Include="Infineon.EAF.Runtime"> | ||||
|       <Version>2.58.0</Version> | ||||
|     </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"> | ||||
|       <Version>16.205.1</Version> | ||||
|     </PackageReference> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user