From c0fdbad7078a3485a796864ddf20ee1a9151b4ba Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Thu, 17 Oct 2024 15:28:29 -0700 Subject: [PATCH] Use Priority when Poll not set --- .../CellInstanceConnectionName.cs | 1 + .../FileHandlers/Priority/Aggregation.cs | 37 +++ Adaptation/FileHandlers/Priority/FileRead.cs | 295 ++++++++++++++++++ Adaptation/FileHandlers/Priority/Record.cs | 37 +++ .../json/StaticSite/html/business.html | 2 +- .../json/StaticSite/html/effort.html | 2 +- .../json/StaticSite/html/risk.html | 2 +- .../json/StaticSite/html/time.html | 2 +- .../json/StaticSite/js/business.js | 13 +- .../FileHandlers/json/StaticSite/js/effort.js | 13 +- .../FileHandlers/json/StaticSite/js/risk.js | 13 +- .../FileHandlers/json/StaticSite/js/time.js | 13 +- MESAFIBACKLOG.csproj | 3 + 13 files changed, 405 insertions(+), 28 deletions(-) create mode 100644 Adaptation/FileHandlers/Priority/Aggregation.cs create mode 100644 Adaptation/FileHandlers/Priority/FileRead.cs create mode 100644 Adaptation/FileHandlers/Priority/Record.cs diff --git a/Adaptation/FileHandlers/CellInstanceConnectionName.cs b/Adaptation/FileHandlers/CellInstanceConnectionName.cs index bb9067d..5c1f6a4 100644 --- a/Adaptation/FileHandlers/CellInstanceConnectionName.cs +++ b/Adaptation/FileHandlers/CellInstanceConnectionName.cs @@ -25,6 +25,7 @@ public class CellInstanceConnectionName nameof(OpenInsight) => new OpenInsight.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(OpenInsightMetrologyViewer) => new OpenInsightMetrologyViewer.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(OpenInsightMetrologyViewerAttachments) => new OpenInsightMetrologyViewerAttachments.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), + nameof(Priority) => new Priority.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(Processed) => new Processed.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), nameof(SPaCe) => new SPaCe.FileRead(smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null), _ => throw new Exception($"\"{cellInstanceConnectionName}\" not mapped") diff --git a/Adaptation/FileHandlers/Priority/Aggregation.cs b/Adaptation/FileHandlers/Priority/Aggregation.cs new file mode 100644 index 0000000..e0485ee --- /dev/null +++ b/Adaptation/FileHandlers/Priority/Aggregation.cs @@ -0,0 +1,37 @@ +using System.Collections.ObjectModel; +using System.Text.Json.Serialization; + +namespace Adaptation.FileHandlers.Priority; + +public class Aggregation +{ + + [JsonConstructor] + public Aggregation( + string average, + int count, + int? inverse, + int maximum, + int minimum, + ReadOnlyCollection records, + int sum + ) + { + Average = average; + Count = count; + Inverse = inverse; + Maximum = maximum; + Minimum = minimum; + Records = records; + Sum = sum; + } + + [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 Records { get; } + [JsonPropertyName("Sum")] public int Sum { get; } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/Priority/FileRead.cs b/Adaptation/FileHandlers/Priority/FileRead.cs new file mode 100644 index 0000000..16c5d4d --- /dev/null +++ b/Adaptation/FileHandlers/Priority/FileRead.cs @@ -0,0 +1,295 @@ +using Adaptation.Eaf.Management.ConfigurationData.CellAutomation; +using Adaptation.Ifx.Eaf.EquipmentConnector.File.Configuration; +using Adaptation.Shared; +using Adaptation.Shared.Duplicator; +using Adaptation.Shared.Methods; +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; + +public class FileRead : Shared.FileRead, IFileRead +{ + + private readonly Timer _Timer; + + public FileRead(ISMTP smtp, Dictionary fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList modelObjectParameters, string equipmentDictionaryName, Dictionary> dummyRuns, Dictionary> 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) + { + _MinFileLength = 10; + _NullData = string.Empty; + _Logistics = new(this); + if (_FileParameter is null) + throw new Exception(cellInstanceConnectionName); + if (_ModelObjectParameterDefinitions is null) + throw new Exception(cellInstanceConnectionName); + if (!_IsDuplicator) + 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 + { + _Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite); + Callback(null); + } + } + + void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults); + + void IFileRead.WaitForThread() => WaitForThread(thread: null, threadExceptions: null); + + string IFileRead.GetEventDescription() + { + string result = _Description.GetEventDescription(); + return result; + } + + List IFileRead.GetHeaderNames() + { + List results = _Description.GetHeaderNames(); + return results; + } + + string[] IFileRead.Move(Tuple> extractResults, string to, string from, string resolvedFileLocation, Exception exception) + { + string[] results = Move(extractResults, to, from, resolvedFileLocation, exception); + return results; + } + + JsonProperty[] IFileRead.GetDefault() + { + JsonProperty[] results = _Description.GetDefault(this, _Logistics); + return results; + } + + Dictionary IFileRead.GetDisplayNamesJsonElement() + { + Dictionary results = _Description.GetDisplayNamesJsonElement(this); + return results; + } + + List IFileRead.GetDescriptions(IFileRead fileRead, List tests, IProcessData processData) + { + List results = _Description.GetDescriptions(fileRead, _Logistics, tests, processData); + return results; + } + + Tuple> IFileRead.GetExtractResult(string reportFullPath, string eventName) + { + Tuple> results; + if (string.IsNullOrEmpty(eventName)) + throw new Exception(); + _ReportFullPath = reportFullPath; + DateTime dateTime = DateTime.Now; + results = GetExtractResult(reportFullPath, dateTime); + if (results.Item3 is null) + results = new Tuple>(results.Item1, Array.Empty(), JsonSerializer.Deserialize("[]"), results.Item4); + if (results.Item3.Length > 0 && _IsEAFHosted) + WritePDSF(this, results.Item3); + UpdateLastTicksDuration(DateTime.Now.Ticks - dateTime.Ticks); + return results; + } + + Tuple> IFileRead.ReExtract() + { + Tuple> results; + List headerNames = _Description.GetHeaderNames(); + Dictionary keyValuePairs = _Description.GetDisplayNamesJsonElement(this); + results = ReExtract(this, headerNames, keyValuePairs); + return results; + } + +#nullable enable + + private static ReadOnlyCollection GetRecords(string directory, string searchPattern) + { + List results = new(); + string text; + Record? record; + string[] files; + List? collection; + Dictionary> 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(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> keyValuePair in keyValuePairs) + { + if (keyValuePair.Value.Count == 1) + results.Add(keyValuePair.Value[0]); + else + { + record = keyValuePair.Value.Select(record => new KeyValuePair(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 GetKeyValuePairs(Dictionary> keyValuePairs) + { + Dictionary results = new(); + Aggregation aggregation; + int? inverse; + double average; + List collection = new(); + foreach (KeyValuePair> 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 GetKeyValuePairs(string directory, string searchPattern) + { + ReadOnlyDictionary results; + List? collection; + Dictionary> keyValuePairs = new(); + ReadOnlyCollection 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 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); } + 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); } + catch (Exception) { } + } + } + +#pragma warning disable IDE0060 + private Tuple> GetExtractResult(string reportFullPath, DateTime dateTime) +#pragma warning restore IDE0060 + { + Tuple> results; + _Logistics = new Logistics(reportFullPath, $"LOGISTICS_1{'\t'}A_JOBID={"BACKLOG"};A_MES_ENTITY={"BACKLOG"};"); + results = new(_Logistics.Logistics1[0], Array.Empty(), Array.Empty(), new List()); + return results; + } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/Priority/Record.cs b/Adaptation/FileHandlers/Priority/Record.cs new file mode 100644 index 0000000..dd08a19 --- /dev/null +++ b/Adaptation/FileHandlers/Priority/Record.cs @@ -0,0 +1,37 @@ +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; } + +} \ No newline at end of file diff --git a/Adaptation/FileHandlers/json/StaticSite/html/business.html b/Adaptation/FileHandlers/json/StaticSite/html/business.html index 2957003..eca1633 100644 --- a/Adaptation/FileHandlers/json/StaticSite/html/business.html +++ b/Adaptation/FileHandlers/json/StaticSite/html/business.html @@ -59,7 +59,7 @@ What is the relative value to the Customer or business? diff --git a/Adaptation/FileHandlers/json/StaticSite/html/effort.html b/Adaptation/FileHandlers/json/StaticSite/html/effort.html index b45cbee..8ce4a87 100644 --- a/Adaptation/FileHandlers/json/StaticSite/html/effort.html +++ b/Adaptation/FileHandlers/json/StaticSite/html/effort.html @@ -55,7 +55,7 @@ diff --git a/Adaptation/FileHandlers/json/StaticSite/html/risk.html b/Adaptation/FileHandlers/json/StaticSite/html/risk.html index 4a47865..dff0468 100644 --- a/Adaptation/FileHandlers/json/StaticSite/html/risk.html +++ b/Adaptation/FileHandlers/json/StaticSite/html/risk.html @@ -59,7 +59,7 @@ What else does this do for our business? diff --git a/Adaptation/FileHandlers/json/StaticSite/html/time.html b/Adaptation/FileHandlers/json/StaticSite/html/time.html index 424a405..9ac77a1 100644 --- a/Adaptation/FileHandlers/json/StaticSite/html/time.html +++ b/Adaptation/FileHandlers/json/StaticSite/html/time.html @@ -60,7 +60,7 @@ How does user/business value decay over time? diff --git a/Adaptation/FileHandlers/json/StaticSite/js/business.js b/Adaptation/FileHandlers/json/StaticSite/js/business.js index b1abee5..644db00 100644 --- a/Adaptation/FileHandlers/json/StaticSite/js/business.js +++ b/Adaptation/FileHandlers/json/StaticSite/js/business.js @@ -75,13 +75,13 @@ function getPriority(workItemType, priority) { return result; } -function getPollValue(pollValue) { +function getPollValue(priority, pollValue) { var result; if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0) - result = "0-9-Unknown"; + result = priority; else { if (pollValue.Average !== null) - result = "0-8-Not"; + result = priority; if (pollValue.Average > 2) result = `${pollValue.Average}-1-${pollValue.Count}-High (Most Critical)`; else if (pollValue.Average > 1) @@ -89,7 +89,7 @@ function getPollValue(pollValue) { else if (pollValue.Average > 0) result = `${pollValue.Average}-3-${pollValue.Count}-Low`; else - result = "0-8-Not"; + result = priority; } return result; } @@ -120,8 +120,9 @@ function getWorkItems(data, dataB) { workItem["ParentState"] = getState(parent["State"]); } workItem["State"] = getState(workItem["State"]) - workItem["PollValue"] = getPollValue(dataB[workItem.Id]); - workItem["Priority"] = getPriority(workItem["WorkItemType"], workItem["Priority"]) + var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]) + workItem["Priority"] = priority; + workItem["PollValue"] = getPollValue(priority, dataB[workItem.Id]); workItems.push(workItem); } workItems.sort(compareFunction); diff --git a/Adaptation/FileHandlers/json/StaticSite/js/effort.js b/Adaptation/FileHandlers/json/StaticSite/js/effort.js index b1abee5..644db00 100644 --- a/Adaptation/FileHandlers/json/StaticSite/js/effort.js +++ b/Adaptation/FileHandlers/json/StaticSite/js/effort.js @@ -75,13 +75,13 @@ function getPriority(workItemType, priority) { return result; } -function getPollValue(pollValue) { +function getPollValue(priority, pollValue) { var result; if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0) - result = "0-9-Unknown"; + result = priority; else { if (pollValue.Average !== null) - result = "0-8-Not"; + result = priority; if (pollValue.Average > 2) result = `${pollValue.Average}-1-${pollValue.Count}-High (Most Critical)`; else if (pollValue.Average > 1) @@ -89,7 +89,7 @@ function getPollValue(pollValue) { else if (pollValue.Average > 0) result = `${pollValue.Average}-3-${pollValue.Count}-Low`; else - result = "0-8-Not"; + result = priority; } return result; } @@ -120,8 +120,9 @@ function getWorkItems(data, dataB) { workItem["ParentState"] = getState(parent["State"]); } workItem["State"] = getState(workItem["State"]) - workItem["PollValue"] = getPollValue(dataB[workItem.Id]); - workItem["Priority"] = getPriority(workItem["WorkItemType"], workItem["Priority"]) + var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]) + workItem["Priority"] = priority; + workItem["PollValue"] = getPollValue(priority, dataB[workItem.Id]); workItems.push(workItem); } workItems.sort(compareFunction); diff --git a/Adaptation/FileHandlers/json/StaticSite/js/risk.js b/Adaptation/FileHandlers/json/StaticSite/js/risk.js index b1abee5..644db00 100644 --- a/Adaptation/FileHandlers/json/StaticSite/js/risk.js +++ b/Adaptation/FileHandlers/json/StaticSite/js/risk.js @@ -75,13 +75,13 @@ function getPriority(workItemType, priority) { return result; } -function getPollValue(pollValue) { +function getPollValue(priority, pollValue) { var result; if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0) - result = "0-9-Unknown"; + result = priority; else { if (pollValue.Average !== null) - result = "0-8-Not"; + result = priority; if (pollValue.Average > 2) result = `${pollValue.Average}-1-${pollValue.Count}-High (Most Critical)`; else if (pollValue.Average > 1) @@ -89,7 +89,7 @@ function getPollValue(pollValue) { else if (pollValue.Average > 0) result = `${pollValue.Average}-3-${pollValue.Count}-Low`; else - result = "0-8-Not"; + result = priority; } return result; } @@ -120,8 +120,9 @@ function getWorkItems(data, dataB) { workItem["ParentState"] = getState(parent["State"]); } workItem["State"] = getState(workItem["State"]) - workItem["PollValue"] = getPollValue(dataB[workItem.Id]); - workItem["Priority"] = getPriority(workItem["WorkItemType"], workItem["Priority"]) + var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]) + workItem["Priority"] = priority; + workItem["PollValue"] = getPollValue(priority, dataB[workItem.Id]); workItems.push(workItem); } workItems.sort(compareFunction); diff --git a/Adaptation/FileHandlers/json/StaticSite/js/time.js b/Adaptation/FileHandlers/json/StaticSite/js/time.js index b1abee5..644db00 100644 --- a/Adaptation/FileHandlers/json/StaticSite/js/time.js +++ b/Adaptation/FileHandlers/json/StaticSite/js/time.js @@ -75,13 +75,13 @@ function getPriority(workItemType, priority) { return result; } -function getPollValue(pollValue) { +function getPollValue(priority, pollValue) { var result; if (pollValue === undefined || pollValue.Records.length === undefined || pollValue.Records.length === 0) - result = "0-9-Unknown"; + result = priority; else { if (pollValue.Average !== null) - result = "0-8-Not"; + result = priority; if (pollValue.Average > 2) result = `${pollValue.Average}-1-${pollValue.Count}-High (Most Critical)`; else if (pollValue.Average > 1) @@ -89,7 +89,7 @@ function getPollValue(pollValue) { else if (pollValue.Average > 0) result = `${pollValue.Average}-3-${pollValue.Count}-Low`; else - result = "0-8-Not"; + result = priority; } return result; } @@ -120,8 +120,9 @@ function getWorkItems(data, dataB) { workItem["ParentState"] = getState(parent["State"]); } workItem["State"] = getState(workItem["State"]) - workItem["PollValue"] = getPollValue(dataB[workItem.Id]); - workItem["Priority"] = getPriority(workItem["WorkItemType"], workItem["Priority"]) + var priority = getPriority(workItem["WorkItemType"], workItem["Priority"]) + workItem["Priority"] = priority; + workItem["PollValue"] = getPollValue(priority, dataB[workItem.Id]); workItems.push(workItem); } workItems.sort(compareFunction); diff --git a/MESAFIBACKLOG.csproj b/MESAFIBACKLOG.csproj index 5a9502d..119e9ac 100644 --- a/MESAFIBACKLOG.csproj +++ b/MESAFIBACKLOG.csproj @@ -144,6 +144,9 @@ + + +