diff --git a/F4SD-Docu-Engine/DocuEngineParser/DocuEngineParserException.cs b/F4SD-Docu-Engine/DocuEngineParser/DocuEngineParserException.cs deleted file mode 100644 index 3c294a8..0000000 --- a/F4SD-Docu-Engine/DocuEngineParser/DocuEngineParserException.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace F4SD.DocuEngine.DocuEngineParser -{ - internal abstract class DocuEngineParserException : Exception - { - public string CurrentText { get; protected set; } - public string PrintedErrorMessage { get; protected set; } - public DocuEngineParserException(string message) : base(message) - { - - } - public abstract void AddToCurrentText(string text); - } -} \ No newline at end of file diff --git a/F4SD-Docu-Engine/DocuEngineParser/SyntaxErrorException.cs b/F4SD-Docu-Engine/DocuEngineParser/SyntaxErrorException.cs deleted file mode 100644 index d6ac138..0000000 --- a/F4SD-Docu-Engine/DocuEngineParser/SyntaxErrorException.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace F4SD.DocuEngine.DocuEngineParser -{ - internal class SyntaxErrorException : DocuEngineParserException - { - private const string errorMessageTemplate = "<>"; - private const string defaultMessage = "You're syntax is wrong. Get good."; - - public SyntaxErrorException(string currentText) : base(defaultMessage) - { - CurrentText = currentText; - } - public SyntaxErrorException(string expected, string actual) : base(defaultMessage) - { - PrintedErrorMessage = string.Format(errorMessageTemplate, expected, actual); - } - public SyntaxErrorException(string currentText, string expected, string actual) : base(defaultMessage) - { - CurrentText = currentText; - PrintedErrorMessage = string.Format(errorMessageTemplate, expected, actual); - } - public override void AddToCurrentText(string text) - { - CurrentText = text + CurrentText; - } - } -} \ No newline at end of file diff --git a/F4SD-Docu-Engine/DocuEngineParser/VariableErrorException.cs b/F4SD-Docu-Engine/DocuEngineParser/VariableErrorException.cs deleted file mode 100644 index 2e1a403..0000000 --- a/F4SD-Docu-Engine/DocuEngineParser/VariableErrorException.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace F4SD.DocuEngine.DocuEngineParser -{ - internal class VariableErrorException : DocuEngineParserException - { - private const string errorMessageTemplate = "<>"; - private const string defaultMessage = "Your variable is the wrong type. Get good."; - public VariableErrorException(string currentText) : base(defaultMessage) - { - CurrentText = currentText; - } - public VariableErrorException(string expected, string actual) : base(defaultMessage) - { - PrintedErrorMessage = string.Format(errorMessageTemplate, expected, actual); - } - public VariableErrorException(string currentText, string expected, string actual) : base(defaultMessage) - { - CurrentText = currentText; - PrintedErrorMessage = string.Format(errorMessageTemplate, expected, actual); - } - public override void AddToCurrentText(string text) - { - CurrentText = text + CurrentText; - } - } -} \ No newline at end of file diff --git a/FasdDesktopUi/Basics/Helper/RichTextBoxHelper.cs b/FasdDesktopUi/Basics/Helper/RichTextBoxHelper.cs index 007b744..c1a916e 100644 --- a/FasdDesktopUi/Basics/Helper/RichTextBoxHelper.cs +++ b/FasdDesktopUi/Basics/Helper/RichTextBoxHelper.cs @@ -1,18 +1,11 @@ using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; using System.IO; using System.Linq; -using System.Reflection; using System.Text; using System.Windows; -using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Media.Imaging; -using System.Windows.Shapes; using static C4IT.Logging.cLogManager; -using static System.Net.Mime.MediaTypeNames; namespace FasdDesktopUi.Basics.Helper { @@ -20,7 +13,7 @@ namespace FasdDesktopUi.Basics.Helper { #region Unicode - public static void TraverseBlockAsUnicode(BlockCollection blocks, StringBuilder stringBuilder, bool isBlockFromList = false) + public static void TraverseBlockAsUnicode(BlockCollection blocks, StringBuilder stringBuilder) { try { @@ -54,15 +47,11 @@ namespace FasdDesktopUi.Basics.Helper private static void TraverseParagraphAsUnicode(Paragraph paragraph, StringBuilder stringBuilder) { - try { - foreach (var inline in paragraph.Inlines) + foreach (Run run in paragraph.Inlines.OfType()) { - if (inline is Run run) - { - stringBuilder.Append(run.Text); - } + stringBuilder.Append(run.Text); } } catch (Exception E) @@ -73,32 +62,24 @@ namespace FasdDesktopUi.Basics.Helper private static void TraverseListAsUnicode(List list, StringBuilder stringBuilder) { - try { - if (list.MarkerStyle == TextMarkerStyle.Decimal) { - for (int i = 0; i < list.ListItems.Count; i++) { - stringBuilder.Append(i + 1 + ". "); - TraverseBlockAsUnicode(list.ListItems.ElementAt(i).Blocks, stringBuilder, true); - + TraverseBlockAsUnicode(list.ListItems.ElementAt(i).Blocks, stringBuilder); } } else { foreach (var item in list.ListItems) { - stringBuilder.Append("- "); - TraverseBlockAsUnicode(item.Blocks, stringBuilder, true); - + TraverseBlockAsUnicode(item.Blocks, stringBuilder); } } - } catch (Exception E) { @@ -108,18 +89,14 @@ namespace FasdDesktopUi.Basics.Helper private static void TraverseImageAsUnicode(System.Windows.Controls.Image image, StringBuilder stringBuilder) { - - try { - stringBuilder.Append("[Image]"); + stringBuilder.Append($"[Image:\"{image.Name}\"]"); } catch (Exception E) { LogException(E); } - - } #endregion @@ -151,12 +128,7 @@ namespace FasdDesktopUi.Basics.Helper else if (block is BlockUIContainer container) { if (container.Child is System.Windows.Controls.Image image) - { - TraverseImageAsHtml(image, stringBuilder); - - } - } } } @@ -223,7 +195,6 @@ namespace FasdDesktopUi.Basics.Helper try { - byte[] arr; using (MemoryStream ms = new MemoryStream()) { @@ -242,7 +213,6 @@ namespace FasdDesktopUi.Basics.Helper { LogException(E); } - } public static void TraverseRunAsHtml(Run run, StringBuilder stringBuilder) diff --git a/FasdDesktopUi/Basics/Models/NamedParameterEntry.cs b/FasdDesktopUi/Basics/Models/NamedParameterEntry.cs index 41babfc..0a0082d 100644 --- a/FasdDesktopUi/Basics/Models/NamedParameterEntry.cs +++ b/FasdDesktopUi/Basics/Models/NamedParameterEntry.cs @@ -1,13 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Windows; - -using C4IT.F4SD.DisplayFormatting; +using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.SupportCaseProtocoll.Models; using C4IT.FASD.Base; - using FasdCockpitBase; +using FasdDesktopUi.Basics.Helper; using FasdDesktopUi.Basics.Services.ProtocollService; +using FasdDesktopUi.Basics.Services.SupportCase.Processors; +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Media.Imaging; using static C4IT.Logging.cLogManager; namespace FasdDesktopUi.Basics.Models @@ -193,6 +195,33 @@ namespace FasdDesktopUi.Basics.Models } } + public class cNamedParameterEntryCaseNotes : cNamedParameterEntryBase + { + private readonly bool _getHtmlAsDefaultValue; + + public cNamedParameterEntryCaseNotes(cSupportCaseDataProvider dataProvider, bool getHtmlAsDefaultValue) : base(dataProvider) + { + _getHtmlAsDefaultValue = getHtmlAsDefaultValue; + } + + public override string GetValue() + { + if (_getHtmlAsDefaultValue) + return GetHtmlValue(); + + StringBuilder caseNotesStringBuilder = new StringBuilder(); + cRichTextBoxHelper.TraverseBlockAsUnicode(dataProvider.CaseNotes.Blocks, caseNotesStringBuilder); + return caseNotesStringBuilder.ToString(); + } + + public override string GetHtmlValue() + { + StringBuilder caseNotesHtmlStringBuilder = new StringBuilder(); + cRichTextBoxHelper.TraverseBlockAsHtml(dataProvider.CaseNotes.Blocks, caseNotesHtmlStringBuilder); + return caseNotesHtmlStringBuilder.ToString(); + } + } + public class cNamedParameterList : Dictionary { public cNamedParameterList() @@ -204,8 +233,11 @@ namespace FasdDesktopUi.Basics.Models { try { - Add("F4SD_QuickActionProtocolLast", new cNamedParameterEntryQuickActionResult(dataProvider)); - Add("F4SD_QuickActionProtocol", new cNamedParameterEntryQuickActionResultProtocol(dataProvider)); + Add(SupportCaseProcessor.QuickActionProtocolLastNamedParameterName, new cNamedParameterEntryQuickActionResult(dataProvider)); + Add(SupportCaseProcessor.QuickActionProtocolNamedParameterName, new cNamedParameterEntryQuickActionResultProtocol(dataProvider)); + + Add(SupportCaseProcessor.CaseNotesNamedParameterName, new cNamedParameterEntryCaseNotes(dataProvider, false)); + Add(SupportCaseProcessor.CaseNotesHtmlNamedParameterName, new cNamedParameterEntryCaseNotes(dataProvider, true)); } catch (Exception E) { diff --git a/FasdDesktopUi/Basics/Models/QuickActionCopyData.cs b/FasdDesktopUi/Basics/Models/QuickActionCopyData.cs index f7d9494..a25967c 100644 --- a/FasdDesktopUi/Basics/Models/QuickActionCopyData.cs +++ b/FasdDesktopUi/Basics/Models/QuickActionCopyData.cs @@ -1,9 +1,6 @@ -using FasdDesktopUi.Basics.UserControls; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace FasdDesktopUi.Basics.Models { @@ -13,7 +10,7 @@ namespace FasdDesktopUi.Basics.Models public string Name { get; set; } public string AffectedDeviceName { get; set; } public bool WasRunningOnAffectedDevice { get; set; } - public QuickActionStatusMonitor.cQuickActionOutput QuickActionOutput { get; set; } - public List MeasureValues { get; set; } + public cQuickActionOutput QuickActionOutput { get; set; } + public List MeasureValues { get; set; } } } diff --git a/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionMeasureValue.cs b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionMeasureValue.cs new file mode 100644 index 0000000..f39c587 --- /dev/null +++ b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionMeasureValue.cs @@ -0,0 +1,39 @@ +using C4IT.F4SD.DisplayFormatting; +using C4IT.FASD.Base; +using C4IT.MultiLanguage; + +namespace FasdDesktopUi.Basics.Models.QuickActionOutput +{ + + public class cQuickActionMeasureValue + { + public int Id { get; set; } + public cMultiLanguageDictionary Names { get; set; } + public object Value { get; set; } + public object PostValue { get; set; } + + public object Difference + { + get + { + switch (Display) + { + case RawValueType.INTEGER: + case RawValueType.PERCENT: + case RawValueType.PERCENT100: + case RawValueType.PERCENT1000: + case RawValueType.BYTES: + var valueDouble = cF4SDHealthCardRawData.GetDouble(Value); + var postValueDouble = cF4SDHealthCardRawData.GetDouble(PostValue); + + if (valueDouble != null && postValueDouble != null) + return postValueDouble - valueDouble; + break; + } + return null; + } + } + + public RawValueType Display { get; set; } + } +} \ No newline at end of file diff --git a/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutput.cs b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutput.cs new file mode 100644 index 0000000..69b7953 --- /dev/null +++ b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutput.cs @@ -0,0 +1,137 @@ +using C4IT.F4SD.DisplayFormatting; +using C4IT.FASD.Base; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using static C4IT.Logging.cLogManager; + +namespace FasdDesktopUi.Basics.Models.QuickActionOutput +{ + public abstract class cQuickActionOutput + { + protected const string veiledText = "********"; + + protected readonly IRawValueFormatter _rawValueFormatter = new RawValueFormatter(); + + public cQuickActionOutput(cF4sdQuickActionRevision.cOutput scriptOutput) + { + _rawValueFormatter.SetDefaultCulture(cFasdCockpitConfig.Instance.SelectedCulture); + _rawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local); + ErrorCode = scriptOutput.ErrorCode; + ErrorDescription = scriptOutput.ErrorDescription; + ResultCode = scriptOutput.ResultCode.GetValueOrDefault(); + IsError = HasError(scriptOutput); + } + + public cSupportCaseDataProvider DataProvider { get; private set; } + public enumQuickActionSuccess? ResultCode { get; set; } + public int? ErrorCode { get; set; } + public string ErrorDescription { get; set; } + + public bool IsError { get; private set; } + + internal static KeyValuePair GetDisplayType(dynamic columnTypeObject) + { + var output = new KeyValuePair(); + + try + { + var columnType = columnTypeObject.ToObject(); + string name = string.Empty; + RawValueType type = RawValueType.STRING; + + + if (columnType.Name != null) + if (columnType.Name is Newtonsoft.Json.Linq.JValue nameJValue) + name = nameJValue.Value.ToString(); + + if (columnType.Type != null) + if (columnType.Type is Newtonsoft.Json.Linq.JValue typeJValue) + if (Enum.TryParse(typeJValue.Value.ToString(), out RawValueType typeJValueType)) + type = typeJValueType; + + output = new KeyValuePair(name, type); + + } + catch (Exception E) + { + LogException(E); + } + + return output; + } + + public static cQuickActionOutput GetQuickActionOutput(cF4sdQuickActionRevision.cOutput scriptOutput, cSupportCaseDataProvider dataProvider) + { + if (scriptOutput == null) + return null; + + try + { + if (scriptOutput?.Values == null) + { + var output = new cQuickActionOutputSingle(scriptOutput) { DataProvider = dataProvider }; + return output; + } + else if (scriptOutput.Values is JArray scriptValueJArray) + { + var scriptValues = scriptValueJArray.ToObject>(); + if (scriptValues != null && scriptValues.Count > 0) + { + var output = new cQuickActionOutputList(scriptOutput) { DataProvider = dataProvider }; + + foreach (var scriptValue in scriptValues) + { + if (scriptValue is JObject scriptValueJObject) + { + try + { + var scriptValueHelperDictionary = scriptValueJObject.ToObject>(); + output.Values.Add(scriptValueHelperDictionary.ToList()); + } + catch (Exception E) + { + LogException(E); + } + } + } + + return output; + } + } + else if (scriptOutput.Values is JObject scriptValueJObject) + { + try + { + var output = new cQuickActionOutputObject(scriptOutput) { DataProvider = dataProvider }; + return output; + } + catch (Exception E) + { + LogException(E); + } + } + else + { + return new cQuickActionOutputSingle(scriptOutput) { DataProvider = dataProvider }; + } + } + catch (Exception E) + { + LogException(E); + } + + return null; + } + + public static bool HasError(cF4sdQuickActionRevision.cOutput quickActionOutput) + { + if ((quickActionOutput?.ResultCode == null || quickActionOutput?.ResultCode == enumQuickActionSuccess.finished || quickActionOutput?.ResultCode == enumQuickActionSuccess.successfull) + && (quickActionOutput?.ErrorCode == null || quickActionOutput?.ErrorCode == 0) + && string.IsNullOrEmpty(quickActionOutput?.ErrorDescription)) + return false; + return true; + } + } +} diff --git a/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputList.cs b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputList.cs new file mode 100644 index 0000000..8d2deb9 --- /dev/null +++ b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputList.cs @@ -0,0 +1,101 @@ +using C4IT.F4SD.DisplayFormatting; +using C4IT.FASD.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using static C4IT.Logging.cLogManager; + +namespace FasdDesktopUi.Basics.Models.QuickActionOutput +{ + public class cQuickActionOutputList : cQuickActionOutput + { + public cQuickActionOutputList(cF4sdQuickActionRevision.cOutput scriptOutput) : base(scriptOutput) + { + InstantiateDisplayTypes(scriptOutput); + } + + public Dictionary DisplayTypes { get; set; } = new Dictionary(); + public List>> Values { get; set; } = new List>>(); + + private void InstantiateDisplayTypes(cF4sdQuickActionRevision.cOutput scriptOutput) + { + try + { + if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JArray columnTypeJArray) + { + var columnTypes = columnTypeJArray.ToObject>(); + if (columnTypes != null && columnTypes.Count > 0) + { + foreach (var columnTypeObject in columnTypes) + { + var displayType = GetDisplayType(columnTypeObject); + DisplayTypes[displayType.Key] = displayType.Value; + } + } + } + else if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JObject columnTypeJObject) + { + try + { + var displayType = GetDisplayType(columnTypeJObject); + + DisplayTypes[displayType.Key] = displayType.Value; + } + catch (Exception E) + { + LogException(E); + } + } + } + catch (Exception E) + { + LogException(E); + } + } + + public string GetDisplayValue(int row, int column, Dictionary columnOutputFormattings, bool getSecretValue = false) + { + string output = null; + + try + { + RawValueType displayType = RawValueType.STRING; + DisplayTypes.TryGetValue(Values[row][column].Key, out displayType); + output = _rawValueFormatter.GetDisplayValue(Values[row][column].Value, displayType); + + if (columnOutputFormattings != null && columnOutputFormattings.TryGetValue(Values[row][column].Key, out var outputFormatting)) + { + if (outputFormatting.Hidden) + return string.Empty; + + if (outputFormatting.IsSecret && !getSecretValue) + return veiledText; + + if (outputFormatting.DisplayType != null) + output = _rawValueFormatter.GetDisplayValue(Values[row][column].Value, outputFormatting.DisplayType.Value); + + if (outputFormatting.Translation != null) + { + var abstractTranslation = cF4SDHealthCardConfig.GetTranslationsWithName(DataProvider?.HealthCardDataHelper?.SelectedHealthCard, outputFormatting.Translation); + if (abstractTranslation != null && abstractTranslation is cHealthCardTranslator translator) + { + output = translator.DefaultTranslation?.Translation.GetValue() ?? Values[row].ToList()[column].Value.ToString(); + + foreach (var translation in translator.Translations) + { + if (translation.Values.Any(value => value.Equals(Values[row].ToList()[column].Value.ToString(), StringComparison.InvariantCultureIgnoreCase))) + output = translation.Translation.GetValue(); + } + } + } + } + } + catch (Exception E) + { + LogException(E); + } + + return output; + } + } +} diff --git a/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputObject.cs b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputObject.cs new file mode 100644 index 0000000..ff3ac63 --- /dev/null +++ b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputObject.cs @@ -0,0 +1,136 @@ +using C4IT.F4SD.DisplayFormatting; +using C4IT.FASD.Base; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using static C4IT.Logging.cLogManager; + +namespace FasdDesktopUi.Basics.Models.QuickActionOutput +{ + public class cQuickActionOutputObject : cQuickActionOutput + { + public Dictionary DisplayTypes { get; set; } = new Dictionary(); + public List> Values { get; set; } = new List>(); + + public cQuickActionOutputObject(cF4sdQuickActionRevision.cOutput scriptOutput) : base(scriptOutput) + { + try + { + InstantiateDisplayTypes(scriptOutput); + InstantiateValues(scriptOutput); + } + catch (Exception E) + { + LogException(E); + } + } + + private void InstantiateDisplayTypes(cF4sdQuickActionRevision.cOutput scriptOutput) + { + try + { + if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JArray columnTypeJArray) + { + var columnTypes = columnTypeJArray.ToObject>(); + if (columnTypes != null && columnTypes.Count > 0) + { + foreach (var columnTypeObject in columnTypes) + { + var displayType = GetDisplayType(columnTypeObject); + DisplayTypes[displayType.Key] = displayType.Value; + } + } + } + else if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JObject columnTypeJObject) + { + try + { + var displayType = GetDisplayType(columnTypeJObject); + + DisplayTypes[displayType.Key] = displayType.Value; + } + catch (Exception E) + { + LogException(E); + } + } + } + catch (Exception E) + { + LogException(E); + } + } + + private void InstantiateValues(cF4sdQuickActionRevision.cOutput scriptOutput) + { + try + { + if (!(scriptOutput.Values is JObject valuesJObject)) + return; + + if (valuesJObject.Properties() == null) + return; + + foreach (var property in valuesJObject.Properties()) + { + Values.Add(new KeyValuePair(property.Name, property.Value)); + } + } + catch (Exception E) + { + LogException(E); + } + } + + public string GetDisplayValue(int index, Dictionary columnOutputFormattings, bool getSecretValue = false) + { + string output = null; + + try + { + if (Values.Count <= index) + return null; + + var selectedItem = Values[index]; + + RawValueType displayType = RawValueType.STRING; + DisplayTypes.TryGetValue(selectedItem.Key, out displayType); + output = _rawValueFormatter.GetDisplayValue(selectedItem.Value, displayType); + + if (columnOutputFormattings != null && columnOutputFormattings.TryGetValue(selectedItem.Key, out var outputFormatting)) + { + if (outputFormatting.Hidden) + return string.Empty; + + if (outputFormatting.IsSecret && !getSecretValue) + return veiledText; + + if (outputFormatting.DisplayType != null) + output = _rawValueFormatter.GetDisplayValue(selectedItem.Value, outputFormatting.DisplayType.Value); + + if (outputFormatting.Translation != null) + { + var abstractTranslation = cF4SDHealthCardConfig.GetTranslationsWithName(DataProvider?.HealthCardDataHelper?.SelectedHealthCard, outputFormatting.Translation); + if (abstractTranslation != null && abstractTranslation is cHealthCardTranslator translator) + { + output = translator.DefaultTranslation?.Translation.GetValue() ?? selectedItem.Value.ToString(); + + foreach (var translation in translator.Translations) + { + if (translation.Values.Any(value => value.Equals(selectedItem.Value.ToString(), StringComparison.InvariantCultureIgnoreCase))) + output = translation.Translation.GetValue(); + } + } + } + } + } + catch (Exception E) + { + LogException(E); + } + + return output; + } + } +} diff --git a/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputSingle.cs b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputSingle.cs new file mode 100644 index 0000000..10dca54 --- /dev/null +++ b/FasdDesktopUi/Basics/Models/QuickActionOutput/cQuickActionOutputSingle.cs @@ -0,0 +1,128 @@ +using C4IT.F4SD.DisplayFormatting; +using C4IT.FASD.Base; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using static C4IT.Logging.cLogManager; + +namespace FasdDesktopUi.Basics.Models.QuickActionOutput +{ + public class cQuickActionOutputSingle : cQuickActionOutput + { + public cQuickActionOutputSingle(cF4sdQuickActionRevision.cOutput scriptOutput) : base(scriptOutput) + { + Instantiate(scriptOutput); + } + + + public RawValueType DisplayType { get; set; } + public string Key { get; set; } + public object Value { get; set; } + + private void Instantiate(cF4sdQuickActionRevision.cOutput scriptOutput) + { + try + { + Value = scriptOutput.Values; + + if (scriptOutput.Values is JObject scriptValueJObject) + { + string scriptValueKey = null; + + try + { + var scriptValueHelperDictionary = scriptValueJObject.ToObject>(); + scriptValueKey = scriptValueHelperDictionary.Keys.ToList()[0]; + + Key = scriptValueKey; + Value = scriptValueHelperDictionary[scriptValueKey]; + } + catch (Exception E) + { + LogException(E); + } + + if (scriptOutput.ColumnTypes is JArray columnTypeJArray) + { + var columnTypes = columnTypeJArray.ToObject>(); + if (columnTypes != null && columnTypes.Count > 0) + { + foreach (var columnTypeObject in columnTypes) + { + var displayType = cQuickActionOutput.GetDisplayType(columnTypeObject); + + if (displayType.Key == scriptValueKey) + DisplayType = displayType.Value; + } + } + + } + else if (scriptOutput.ColumnTypes is JObject columnTypeJObject) + { + try + { + var dispayType = cQuickActionOutput.GetDisplayType(columnTypeJObject); + DisplayType = dispayType.Value; + } + catch (Exception E) + { + LogException(E); + } + } + } + } + catch (Exception E) + { + LogException(E); + } + } + + public string GetDisplayValue(Dictionary columnOutputFormattings, bool getSecretValue = false) + { + string output = null; + + try + { + output = _rawValueFormatter.GetDisplayValue(Value, DisplayType); + + cColumnOutputFormatting outputFormatting = null; + + if (string.IsNullOrEmpty(Key)) + outputFormatting = columnOutputFormattings?.Values.FirstOrDefault(); + else + columnOutputFormattings?.TryGetValue(Key, out outputFormatting); + + if (outputFormatting != null) + { + if (outputFormatting.IsSecret && !getSecretValue) + return veiledText; + + if (outputFormatting.DisplayType != null) + output = _rawValueFormatter.GetDisplayValue(Value, outputFormatting.DisplayType.Value); + + if (outputFormatting.Translation != null) + { + var abstractTranslation = cF4SDHealthCardConfig.GetTranslationsWithName(DataProvider?.HealthCardDataHelper?.SelectedHealthCard, outputFormatting.Translation); + if (abstractTranslation != null && abstractTranslation is cHealthCardTranslator translator) + { + output = translator.DefaultTranslation?.Translation.GetValue() ?? Value.ToString(); + + foreach (var translation in translator.Translations) + { + if (translation.Values.Any(value => value.Equals(Value.ToString(), StringComparison.InvariantCultureIgnoreCase))) + output = translation.Translation.GetValue(); + } + } + } + } + } + catch (Exception E) + { + LogException(E); + } + + return output; + } + } +} diff --git a/FasdDesktopUi/Basics/Services/ProtocollService/QuickActionProtocollEntry.cs b/FasdDesktopUi/Basics/Services/ProtocollService/QuickActionProtocollEntry.cs index 9260fde..103531d 100644 --- a/FasdDesktopUi/Basics/Services/ProtocollService/QuickActionProtocollEntry.cs +++ b/FasdDesktopUi/Basics/Services/ProtocollService/QuickActionProtocollEntry.cs @@ -3,13 +3,11 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; -using C4IT.F4SD.DisplayFormatting; using C4IT.FASD.Base; using C4IT.MultiLanguage; using FasdDesktopUi.Basics.Models; -using FasdDesktopUi.Basics.UserControls; using static C4IT.Logging.cLogManager; -using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor; +using FasdDesktopUi.Basics.Models.QuickActionOutput; namespace FasdDesktopUi.Basics.Services.ProtocollService { @@ -155,7 +153,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService return errorMessage; } - private static string GetQuickActionAsciiOutput(cFasdQuickAction quickActionDefinition, QuickActionStatusMonitor.cQuickActionOutput quickActionOutput) + private static string GetQuickActionAsciiOutput(cFasdQuickAction quickActionDefinition, cQuickActionOutput quickActionOutput) { string output = string.Empty; @@ -166,7 +164,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService switch (quickActionOutput) { - case QuickActionStatusMonitor.cQuickActionOutputSingle singleOutput: + case cQuickActionOutputSingle singleOutput: { if (singleOutput.Value is null) return output; @@ -177,7 +175,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService break; } - case QuickActionStatusMonitor.cQuickActionOutputList listOutput: + case cQuickActionOutputList listOutput: { output += AsciiSeperator; output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + "\n"; @@ -219,7 +217,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService break; } - case QuickActionStatusMonitor.cQuickActionOutputObject objectOutput: + case cQuickActionOutputObject objectOutput: { output += AsciiSeperator; output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + "\n"; @@ -259,7 +257,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService return output; } - private static string GetQuickActionAsciiValueComparisonString(List measureValues) + private static string GetQuickActionAsciiValueComparisonString(List measureValues) { string output = string.Empty; @@ -365,7 +363,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService return errorMessage; } - private static string GetQuickActionHtmlOutput(cFasdQuickAction quickActionDefinition, QuickActionStatusMonitor.cQuickActionOutput quickActionOutput) + private static string GetQuickActionHtmlOutput(cFasdQuickAction quickActionDefinition, cQuickActionOutput quickActionOutput) { string output = string.Empty; @@ -378,7 +376,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService switch (quickActionOutput) { - case QuickActionStatusMonitor.cQuickActionOutputSingle singleOutput: + case cQuickActionOutputSingle singleOutput: { if (singleOutput.Value is null) return output; @@ -387,7 +385,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService output += "

" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Html") + " " + displayValue + "

"; break; } - case QuickActionStatusMonitor.cQuickActionOutputList listOutput: + case cQuickActionOutputList listOutput: { output += "

" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Html") + "

"; @@ -436,7 +434,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService output += ""; break; } - case QuickActionStatusMonitor.cQuickActionOutputObject objectOutput: + case cQuickActionOutputObject objectOutput: { output += "

" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Html") + "

"; @@ -479,7 +477,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService return output; } - private static string GetQuickActionHtmlValueComparison(List measureValues) + private static string GetQuickActionHtmlValueComparison(List measureValues) { string output = string.Empty; diff --git a/FasdDesktopUi/Basics/Services/RemoteDesktop/AgentRemoteDesktopService.cs b/FasdDesktopUi/Basics/Services/RemoteDesktop/AgentRemoteDesktopService.cs index 1775d9b..804576d 100644 --- a/FasdDesktopUi/Basics/Services/RemoteDesktop/AgentRemoteDesktopService.cs +++ b/FasdDesktopUi/Basics/Services/RemoteDesktop/AgentRemoteDesktopService.cs @@ -105,7 +105,7 @@ namespace FasdDesktopUi.Basics.Services.RemoteDesktop { ProcessStartInfo info = new ProcessStartInfo(GetViewerPath()) { - Arguments = $"-connectionId {connectionDetails.ConnectionId} -phoenixServiceUrl {connectionDetails.PhoenixServiceUrl} -secret {connectionDetails.Secret}" + Arguments = $"-connectionId {connectionDetails.ConnectionId} -phoenixServiceUrl {connectionDetails.PhoenixServiceUrl} -secret {connectionDetails.Secret} -hideAi {!cFasdCockpitConfig.Instance.Global.UseAiAnalyzer}" }; Process process = Process.Start(info); diff --git a/FasdDesktopUi/Basics/Services/SupportCase/Processors/SupportCaseProcessor.cs b/FasdDesktopUi/Basics/Services/SupportCase/Processors/SupportCaseProcessor.cs index f2a4dce..a8f0a97 100644 --- a/FasdDesktopUi/Basics/Services/SupportCase/Processors/SupportCaseProcessor.cs +++ b/FasdDesktopUi/Basics/Services/SupportCase/Processors/SupportCaseProcessor.cs @@ -3,6 +3,7 @@ using C4IT.FASD.Cockpit.Communication; using C4IT.Logging; using FasdDesktopUi.Basics.CustomEvents; using FasdDesktopUi.Basics.Enums; +using FasdDesktopUi.Basics.Helper; using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.Services.Models; using FasdDesktopUi.Basics.Services.SupportCase.Controllers; @@ -11,6 +12,7 @@ using FasdDesktopUi.Pages.DetailsPage.Models; using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; using static C4IT.Logging.cLogManager; @@ -24,6 +26,11 @@ namespace FasdDesktopUi.Basics.Services.SupportCase.Processors internal const string AgentDeviceIdNamedParameterName = "F4SD_Agent_DeviceId"; internal const string AgentUserIdNamedParameterName = "F4SD_Agent_UserId"; internal const string AgentOrganisationCodeNamedParameterName = "F4SD_Agent_OrganisationId"; + internal const string CaseNotesNamedParameterName = "F4SD_CaseNotes"; + internal const string CaseNotesHtmlNamedParameterName = "F4SD_CaseNotesHtml"; + internal const string QuickActionProtocolNamedParameterName = "F4SD_QuickActionProtocol"; + internal const string QuickActionProtocolLastNamedParameterName = "F4SD_QuickActionProtocolLast"; + private ISupportCase _supportCase; public cSupportCaseDataProvider SupportCaseDataProviderArtifact { get => _supportCase?.SupportCaseDataProviderArtifact; } @@ -134,6 +141,16 @@ namespace FasdDesktopUi.Basics.Services.SupportCase.Processors } _namedParameterCache[relation][AgentOrganisationCodeNamedParameterName] = cCockpitConfiguration.Instance.agentApiConfiguration.OrganizationCode; + + // todo insert quick action protocoll + + StringBuilder caseNotesStringBuilder = new StringBuilder(); + cRichTextBoxHelper.TraverseBlockAsUnicode(SupportCaseDataProviderArtifact.CaseNotes.Blocks, caseNotesStringBuilder); + _namedParameterCache[relation][CaseNotesNamedParameterName] = caseNotesStringBuilder.ToString(); + + StringBuilder caseNotesHtmlStringBuilder = new StringBuilder(); + cRichTextBoxHelper.TraverseBlockAsHtml(SupportCaseDataProviderArtifact.CaseNotes.Blocks, caseNotesHtmlStringBuilder); + _namedParameterCache[relation][CaseNotesHtmlNamedParameterName] = caseNotesHtmlStringBuilder.ToString(); } } diff --git a/FasdDesktopUi/Basics/UiActions/UiDemoQuickAction.cs b/FasdDesktopUi/Basics/UiActions/UiDemoQuickAction.cs index 0751bf4..ed977e1 100644 --- a/FasdDesktopUi/Basics/UiActions/UiDemoQuickAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiDemoQuickAction.cs @@ -1,22 +1,15 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.SupportCaseProtocoll.Models; using C4IT.FASD.Base; -using C4IT.Logging; using C4IT.MultiLanguage; - -using FasdCockpitBase.Models; - using FasdDesktopUi.Basics.Models; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using FasdDesktopUi.Basics.Services.ProtocollService; -using FasdDesktopUi.Basics.UserControls; - -using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor; namespace FasdDesktopUi.Basics.UiActions { @@ -139,7 +132,7 @@ namespace FasdDesktopUi.Basics.UiActions catch { } StatusMonitor.QuickActionOutputs.Add(_ref.Output); - quickActionOutput = QuickActionStatusMonitor.cQuickActionOutput.GetQuickActionOutput(_ref.Output, DataProvider); + quickActionOutput = cQuickActionOutput.GetQuickActionOutput(_ref.Output, DataProvider); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(quickActionDemo, DataProvider, true, quickActionOutput, StatusMonitor.MeasureValues); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(quickActionDemo, copyData); diff --git a/FasdDesktopUi/Basics/UiActions/UiDummyQuickAction.cs b/FasdDesktopUi/Basics/UiActions/UiDummyQuickAction.cs index d6205c1..d4b1d02 100644 --- a/FasdDesktopUi/Basics/UiActions/UiDummyQuickAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiDummyQuickAction.cs @@ -1,19 +1,12 @@ using C4IT.F4SD.DisplayFormatting; using C4IT.FASD.Base; -using C4IT.Logging; using C4IT.MultiLanguage; -using FasdCockpitBase.Models; using FasdDesktopUi.Basics.Models; -using FasdDesktopUi.Basics.UserControls; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using System; using System.Collections.Generic; -using System.Diagnostics.Tracing; -using System.Linq; -using System.Reflection; -using System.Text; using System.Threading; using System.Threading.Tasks; -using static C4IT.Logging.cLogManager; namespace FasdDesktopUi.Basics.UiActions { @@ -39,7 +32,7 @@ namespace FasdDesktopUi.Basics.UiActions return result; } - private List GetStatusMonitorMeasureValues(List measures) + private List GetStatusMonitorMeasureValues(List measures) { return null; } diff --git a/FasdDesktopUi/Basics/UiActions/UiLocalQuickAction.cs b/FasdDesktopUi/Basics/UiActions/UiLocalQuickAction.cs index 65c43ec..5a234e1 100644 --- a/FasdDesktopUi/Basics/UiActions/UiLocalQuickAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiLocalQuickAction.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; -using System.Text; using System.Threading; using System.Threading.Tasks; using C4IT.F4SD.DisplayFormatting; @@ -11,12 +9,11 @@ using C4IT.FASD.Base; using C4IT.FASD.Cockpit.Communication; using C4IT.Logging; using C4IT.MultiLanguage; -using FasdCockpitBase.Models; using FasdDesktopUi.Basics.Models; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using FasdDesktopUi.Basics.Services.ProtocollService; using Newtonsoft.Json; using static C4IT.Logging.cLogManager; -using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor; namespace FasdDesktopUi.Basics.UiActions { diff --git a/FasdDesktopUi/Basics/UiActions/UiLocalWebRequestQuickAction.cs b/FasdDesktopUi/Basics/UiActions/UiLocalWebRequestQuickAction.cs index 82b1ce7..2371616 100644 --- a/FasdDesktopUi/Basics/UiActions/UiLocalWebRequestQuickAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiLocalWebRequestQuickAction.cs @@ -1,21 +1,15 @@ using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.SupportCaseProtocoll.Models; using C4IT.FASD.Base; -using C4IT.Logging; using C4IT.MultiLanguage; -using FasdCockpitBase.Models; using FasdDesktopUi.Basics.Models; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using FasdDesktopUi.Basics.Services.ProtocollService; using System; using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Reflection; -using System.Text; using System.Threading; using System.Threading.Tasks; using static C4IT.Logging.cLogManager; -using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor; namespace FasdDesktopUi.Basics.UiActions { diff --git a/FasdDesktopUi/Basics/UiActions/UiProcessSearchResultAction.cs b/FasdDesktopUi/Basics/UiActions/UiProcessSearchResultAction.cs index ae1eb58..d10866b 100644 --- a/FasdDesktopUi/Basics/UiActions/UiProcessSearchResultAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiProcessSearchResultAction.cs @@ -85,6 +85,9 @@ namespace FasdDesktopUi.Basics.UiActions cF4sdStagedSearchResultRelationTaskId gatherRelationTask = await _searchUiProvider.SearchService.LoadRelationsAsync(_searchResults, token); + if (gatherRelationTask == null) + return false; + HashSet orderedPendingInfoClasses = GetInformationClassOrderedByPriority(gatherRelationTask.PendingInformationClasses, cF4sdIdentityEntry.GetFromSearchResult(_searchResults.FirstOrDefault()?.Type ?? enumF4sdSearchResultClass.Unknown)); _searchUiProvider.SetPendingInformationClasses(orderedPendingInfoClasses); diff --git a/FasdDesktopUi/Basics/UiActions/UiRemoteQuickAction.cs b/FasdDesktopUi/Basics/UiActions/UiRemoteQuickAction.cs index 54967ce..70f25e7 100644 --- a/FasdDesktopUi/Basics/UiActions/UiRemoteQuickAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiRemoteQuickAction.cs @@ -6,6 +6,7 @@ using C4IT.Logging; using C4IT.MultiLanguage; using FasdCockpitBase.Models; using FasdDesktopUi.Basics.Models; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using FasdDesktopUi.Basics.Services.ProtocollService; using Newtonsoft.Json; using System; diff --git a/FasdDesktopUi/Basics/UiActions/UiServerQuickAction.cs b/FasdDesktopUi/Basics/UiActions/UiServerQuickAction.cs index c14200a..0b3521d 100644 --- a/FasdDesktopUi/Basics/UiActions/UiServerQuickAction.cs +++ b/FasdDesktopUi/Basics/UiActions/UiServerQuickAction.cs @@ -6,6 +6,7 @@ using C4IT.Logging; using C4IT.MultiLanguage; using FasdCockpitBase.Models; using FasdDesktopUi.Basics.Models; +using FasdDesktopUi.Basics.Models.QuickActionOutput; using FasdDesktopUi.Basics.Services.ProtocollService; using FasdDesktopUi.Basics.UserControls; using Newtonsoft.Json; diff --git a/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitor.xaml.cs b/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitor.xaml.cs index 62d9a2e..97decae 100644 --- a/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitor.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitor.xaml.cs @@ -1,14 +1,11 @@ using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.SupportCaseProtocoll.Models; using C4IT.FASD.Base; -using C4IT.MultiLanguage; using F4SD_AdaptableIcon.Enums; using F4SD.Gamification; using FasdDesktopUi.Basics.Converter; using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.Services.ProtocollService; -using FasdDesktopUi.Basics.UiActions; -using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -23,12 +20,12 @@ using System.Windows.Input; using System.Windows.Media; using static C4IT.Logging.cLogManager; using F4SD.Gamification.Services; +using FasdDesktopUi.Basics.Models.QuickActionOutput; namespace FasdDesktopUi.Basics.UserControls { public partial class QuickActionStatusMonitor : UserControl, IBlurInvoker { - private const string veiledText = "********"; private bool secretsAreShown = false; private readonly IRawValueFormatter _rawValueFormatter = new RawValueFormatter(); @@ -42,503 +39,6 @@ namespace FasdDesktopUi.Basics.UserControls set { lock (_currentQuickActionLock) { _currentRunningQuickActionId = value; } } } - #region Helperclasses QuickAction Output - - public abstract class cQuickActionOutput - { - protected readonly IRawValueFormatter _rawValueFormatter = new RawValueFormatter(); - - public cQuickActionOutput(cF4sdQuickActionRevision.cOutput scriptOutput) - { - _rawValueFormatter.SetDefaultCulture(cFasdCockpitConfig.Instance.SelectedCulture); - _rawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local); - ErrorCode = scriptOutput.ErrorCode; - ErrorDescription = scriptOutput.ErrorDescription; - ResultCode = scriptOutput.ResultCode.GetValueOrDefault(); - IsError = HasError(scriptOutput); - } - - public cSupportCaseDataProvider DataProvider { get; private set; } - public enumQuickActionSuccess? ResultCode { get; set; } - public int? ErrorCode { get; set; } - public string ErrorDescription { get; set; } - - public bool IsError { get; private set; } - - internal static KeyValuePair GetDisplayType(dynamic columnTypeObject) - { - var output = new KeyValuePair(); - - try - { - var columnType = columnTypeObject.ToObject(); - string name = string.Empty; - RawValueType type = RawValueType.STRING; - - - if (columnType.Name != null) - if (columnType.Name is Newtonsoft.Json.Linq.JValue nameJValue) - name = nameJValue.Value.ToString(); - - if (columnType.Type != null) - if (columnType.Type is Newtonsoft.Json.Linq.JValue typeJValue) - if (Enum.TryParse(typeJValue.Value.ToString(), out RawValueType typeJValueType)) - type = typeJValueType; - - output = new KeyValuePair(name, type); - - } - catch (Exception E) - { - LogException(E); - } - - return output; - } - - public static cQuickActionOutput GetQuickActionOutput(cF4sdQuickActionRevision.cOutput scriptOutput, cSupportCaseDataProvider dataProvider) - { - if (scriptOutput == null) - return null; - - try - { - if (scriptOutput?.Values == null) - { - var output = new cQuickActionOutputSingle(scriptOutput) { DataProvider = dataProvider }; - return output; - } - else if (scriptOutput.Values is JArray scriptValueJArray) - { - var scriptValues = scriptValueJArray.ToObject>(); - if (scriptValues != null && scriptValues.Count > 0) - { - var output = new cQuickActionOutputList(scriptOutput) { DataProvider = dataProvider }; - - foreach (var scriptValue in scriptValues) - { - if (scriptValue is JObject scriptValueJObject) - { - try - { - var scriptValueHelperDictionary = scriptValueJObject.ToObject>(); - output.Values.Add(scriptValueHelperDictionary.ToList()); - } - catch (Exception E) - { - LogException(E); - } - } - } - - return output; - } - } - else if (scriptOutput.Values is JObject scriptValueJObject) - { - try - { - var output = new cQuickActionOutputObject(scriptOutput) { DataProvider = dataProvider }; - return output; - } - catch (Exception E) - { - LogException(E); - } - } - else - { - return new cQuickActionOutputSingle(scriptOutput) { DataProvider = dataProvider }; - } - } - catch (Exception E) - { - LogException(E); - } - - return null; - } - - public static bool HasError(cF4sdQuickActionRevision.cOutput quickActionOutput) - { - if ((quickActionOutput?.ResultCode == null || quickActionOutput?.ResultCode == enumQuickActionSuccess.finished || quickActionOutput?.ResultCode == enumQuickActionSuccess.successfull) - && (quickActionOutput?.ErrorCode == null || quickActionOutput?.ErrorCode == 0) - && string.IsNullOrEmpty(quickActionOutput?.ErrorDescription)) - return false; - return true; - } - } - - public class cQuickActionOutputSingle : cQuickActionOutput - { - public cQuickActionOutputSingle(cF4sdQuickActionRevision.cOutput scriptOutput) : base(scriptOutput) - { - Instantiate(scriptOutput); - } - - - public RawValueType DisplayType { get; set; } - public string Key { get; set; } - public object Value { get; set; } - - private void Instantiate(cF4sdQuickActionRevision.cOutput scriptOutput) - { - try - { - Value = scriptOutput.Values; - - if (scriptOutput.Values is JObject scriptValueJObject) - { - string scriptValueKey = null; - - try - { - var scriptValueHelperDictionary = scriptValueJObject.ToObject>(); - scriptValueKey = scriptValueHelperDictionary.Keys.ToList()[0]; - - Key = scriptValueKey; - Value = scriptValueHelperDictionary[scriptValueKey]; - } - catch (Exception E) - { - LogException(E); - } - - if (scriptOutput.ColumnTypes is JArray columnTypeJArray) - { - var columnTypes = columnTypeJArray.ToObject>(); - if (columnTypes != null && columnTypes.Count > 0) - { - foreach (var columnTypeObject in columnTypes) - { - var displayType = cQuickActionOutput.GetDisplayType(columnTypeObject); - - if (displayType.Key == scriptValueKey) - DisplayType = displayType.Value; - } - } - - } - else if (scriptOutput.ColumnTypes is JObject columnTypeJObject) - { - try - { - var dispayType = cQuickActionOutput.GetDisplayType(columnTypeJObject); - DisplayType = dispayType.Value; - } - catch (Exception E) - { - LogException(E); - } - } - } - } - catch (Exception E) - { - LogException(E); - } - } - - public string GetDisplayValue(Dictionary columnOutputFormattings, bool getSecretValue = false) - { - string output = null; - - try - { - output = _rawValueFormatter.GetDisplayValue(Value, DisplayType); - - cColumnOutputFormatting outputFormatting = null; - - if (string.IsNullOrEmpty(Key)) - outputFormatting = columnOutputFormattings?.Values.FirstOrDefault(); - else - columnOutputFormattings?.TryGetValue(Key, out outputFormatting); - - if (outputFormatting != null) - { - if (outputFormatting.IsSecret && !getSecretValue) - return veiledText; - - if (outputFormatting.DisplayType != null) - output = _rawValueFormatter.GetDisplayValue(Value, outputFormatting.DisplayType.Value); - - if (outputFormatting.Translation != null) - { - var abstractTranslation = cF4SDHealthCardConfig.GetTranslationsWithName(DataProvider?.HealthCardDataHelper?.SelectedHealthCard, outputFormatting.Translation); - if (abstractTranslation != null && abstractTranslation is cHealthCardTranslator translator) - { - output = translator.DefaultTranslation?.Translation.GetValue() ?? Value.ToString(); - - foreach (var translation in translator.Translations) - { - if (translation.Values.Any(value => value.Equals(Value.ToString(), StringComparison.InvariantCultureIgnoreCase))) - output = translation.Translation.GetValue(); - } - } - } - } - } - catch (Exception E) - { - LogException(E); - } - - return output; - } - } - - public class cQuickActionOutputObject : cQuickActionOutput - { - public Dictionary DisplayTypes { get; set; } = new Dictionary(); - public List> Values { get; set; } = new List>(); - - public cQuickActionOutputObject(cF4sdQuickActionRevision.cOutput scriptOutput) : base(scriptOutput) - { - try - { - InstantiateDisplayTypes(scriptOutput); - InstantiateValues(scriptOutput); - } - catch (Exception E) - { - LogException(E); - } - } - - private void InstantiateDisplayTypes(cF4sdQuickActionRevision.cOutput scriptOutput) - { - try - { - if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JArray columnTypeJArray) - { - var columnTypes = columnTypeJArray.ToObject>(); - if (columnTypes != null && columnTypes.Count > 0) - { - foreach (var columnTypeObject in columnTypes) - { - var displayType = GetDisplayType(columnTypeObject); - DisplayTypes[displayType.Key] = displayType.Value; - } - } - } - else if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JObject columnTypeJObject) - { - try - { - var displayType = GetDisplayType(columnTypeJObject); - - DisplayTypes[displayType.Key] = displayType.Value; - } - catch (Exception E) - { - LogException(E); - } - } - } - catch (Exception E) - { - LogException(E); - } - } - - private void InstantiateValues(cF4sdQuickActionRevision.cOutput scriptOutput) - { - try - { - if (!(scriptOutput.Values is JObject valuesJObject)) - return; - - if (valuesJObject.Properties() == null) - return; - - foreach (var property in valuesJObject.Properties()) - { - Values.Add(new KeyValuePair(property.Name, property.Value)); - } - } - catch (Exception E) - { - LogException(E); - } - } - - public string GetDisplayValue(int index, Dictionary columnOutputFormattings, bool getSecretValue = false) - { - string output = null; - - try - { - if (Values.Count <= index) - return null; - - var selectedItem = Values[index]; - - RawValueType displayType = RawValueType.STRING; - DisplayTypes.TryGetValue(selectedItem.Key, out displayType); - output = _rawValueFormatter.GetDisplayValue(selectedItem.Value, displayType); - - if (columnOutputFormattings != null && columnOutputFormattings.TryGetValue(selectedItem.Key, out var outputFormatting)) - { - if (outputFormatting.Hidden) - return string.Empty; - - if (outputFormatting.IsSecret && !getSecretValue) - return veiledText; - - if (outputFormatting.DisplayType != null) - output = _rawValueFormatter.GetDisplayValue(selectedItem.Value, outputFormatting.DisplayType.Value); - - if (outputFormatting.Translation != null) - { - var abstractTranslation = cF4SDHealthCardConfig.GetTranslationsWithName(DataProvider?.HealthCardDataHelper?.SelectedHealthCard, outputFormatting.Translation); - if (abstractTranslation != null && abstractTranslation is cHealthCardTranslator translator) - { - output = translator.DefaultTranslation?.Translation.GetValue() ?? selectedItem.Value.ToString(); - - foreach (var translation in translator.Translations) - { - if (translation.Values.Any(value => value.Equals(selectedItem.Value.ToString(), StringComparison.InvariantCultureIgnoreCase))) - output = translation.Translation.GetValue(); - } - } - } - } - } - catch (Exception E) - { - LogException(E); - } - - return output; - } - } - - public class cQuickActionOutputList : cQuickActionOutput - { - public cQuickActionOutputList(cF4sdQuickActionRevision.cOutput scriptOutput) : base(scriptOutput) - { - InstantiateDisplayTypes(scriptOutput); - } - - public Dictionary DisplayTypes { get; set; } = new Dictionary(); - public List>> Values { get; set; } = new List>>(); - - private void InstantiateDisplayTypes(cF4sdQuickActionRevision.cOutput scriptOutput) - { - try - { - if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JArray columnTypeJArray) - { - var columnTypes = columnTypeJArray.ToObject>(); - if (columnTypes != null && columnTypes.Count > 0) - { - foreach (var columnTypeObject in columnTypes) - { - var displayType = GetDisplayType(columnTypeObject); - DisplayTypes[displayType.Key] = displayType.Value; - } - } - } - else if (scriptOutput.ColumnTypes is Newtonsoft.Json.Linq.JObject columnTypeJObject) - { - try - { - var displayType = GetDisplayType(columnTypeJObject); - - DisplayTypes[displayType.Key] = displayType.Value; - } - catch (Exception E) - { - LogException(E); - } - } - } - catch (Exception E) - { - LogException(E); - } - } - - public string GetDisplayValue(int row, int column, Dictionary columnOutputFormattings, bool getSecretValue = false) - { - string output = null; - - try - { - RawValueType displayType = RawValueType.STRING; - DisplayTypes.TryGetValue(Values[row][column].Key, out displayType); - output = _rawValueFormatter.GetDisplayValue(Values[row][column].Value, displayType); - - if (columnOutputFormattings != null && columnOutputFormattings.TryGetValue(Values[row][column].Key, out var outputFormatting)) - { - if (outputFormatting.Hidden) - return string.Empty; - - if (outputFormatting.IsSecret && !getSecretValue) - return veiledText; - - if (outputFormatting.DisplayType != null) - output = _rawValueFormatter.GetDisplayValue(Values[row][column].Value, outputFormatting.DisplayType.Value); - - if (outputFormatting.Translation != null) - { - var abstractTranslation = cF4SDHealthCardConfig.GetTranslationsWithName(DataProvider?.HealthCardDataHelper?.SelectedHealthCard, outputFormatting.Translation); - if (abstractTranslation != null && abstractTranslation is cHealthCardTranslator translator) - { - output = translator.DefaultTranslation?.Translation.GetValue() ?? Values[row].ToList()[column].Value.ToString(); - - foreach (var translation in translator.Translations) - { - if (translation.Values.Any(value => value.Equals(Values[row].ToList()[column].Value.ToString(), StringComparison.InvariantCultureIgnoreCase))) - output = translation.Translation.GetValue(); - } - } - } - } - } - catch (Exception E) - { - LogException(E); - } - - return output; - } - } - - public class cQuickActionMeasureValue - { - public int Id { get; set; } - public cMultiLanguageDictionary Names { get; set; } - public object Value { get; set; } - public object PostValue { get; set; } - - public object Difference - { - get - { - switch (Display) - { - case RawValueType.INTEGER: - case RawValueType.PERCENT: - case RawValueType.PERCENT100: - case RawValueType.PERCENT1000: - case RawValueType.BYTES: - var valueDouble = cF4SDHealthCardRawData.GetDouble(Value); - var postValueDouble = cF4SDHealthCardRawData.GetDouble(PostValue); - - if (valueDouble != null && postValueDouble != null) - return postValueDouble - valueDouble; - break; - } - return null; - } - } - - public RawValueType Display { get; set; } - } - - #endregion - #region Properties private CancellationTokenSource tokenSource; diff --git a/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitorResultElement.xaml.cs b/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitorResultElement.xaml.cs index 1c4870e..cbfa55a 100644 --- a/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitorResultElement.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/DataCanvas/QuickActionStatusMonitorResultElement.xaml.cs @@ -1,5 +1,5 @@ using C4IT.FASD.Base; - +using FasdDesktopUi.Basics.Models.QuickActionOutput; using System; using System.Collections.Generic; using System.Linq; diff --git a/FasdDesktopUi/Basics/UserControls/Notepad.xaml b/FasdDesktopUi/Basics/UserControls/Notepad.xaml index 9ea35a9..d0b7ec7 100644 --- a/FasdDesktopUi/Basics/UserControls/Notepad.xaml +++ b/FasdDesktopUi/Basics/UserControls/Notepad.xaml @@ -13,7 +13,7 @@ MinHeight="225" MinWidth="255" x:Name="NotepadUc"> - + - --> - - + Tag="close" + MouseLeftButtonUp="CloseNotepadIcon_Click" + TouchDown="CloseNotepadIcon_Click" /> - + WindowChrome.IsHitTestVisibleInChrome="True" + Tag="lock" + MouseLeftButtonUp="LockNotepadIcon_Click" + TouchDown="LockNotepadIcon_Click" /> - + - + @@ -110,48 +84,56 @@ + Margin="0 0 0 10" + Background="{DynamicResource BackgroundColor.DetailsPage.Widget.Title}" + Padding="5" + CornerRadius="7.5"> - - - + + Style="{DynamicResource Menu.MenuBar.PinnedIcon.Disabled}" /> - + - - - - @@ -161,7 +143,8 @@ - { SetLanguageOfDocument(); - DataProvider.SaveCaseNotes(); + _dataProvider.SaveCaseNotes(); }); } catch (Exception E) @@ -642,7 +612,7 @@ namespace FasdDesktopUi.Basics.UserControls { ToggleDockButton.Visibility = IsUndocked ? Visibility.Collapsed : Visibility.Visible; LockNotepadIcon.Visibility = IsUndocked ? Visibility.Collapsed : Visibility.Visible; - CloseNotepadIcon.IsEnabled = IsUndocked ? true : !IsLocked; + CloseNotepadIcon.IsEnabled = IsUndocked || !IsLocked; } catch (Exception E) @@ -680,23 +650,12 @@ namespace FasdDesktopUi.Basics.UserControls } } - private void CloseNotepadIcon_MouseUp(object sender, MouseButtonEventArgs e) - { - if (e.ChangedButton == MouseButton.Left) - CloseNotepad(); - } - - private void CloseNotepadIcon_TouchDown(object sender, TouchEventArgs e) - { - CloseNotepad(); - } + private void CloseNotepadIcon_Click(object sender, InputEventArgs e) => CloseNotepad(); private void LockNotepad() { - try { - if (IsLocked) { LockNotepadIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.SoftContrast"); @@ -717,19 +676,9 @@ namespace FasdDesktopUi.Basics.UserControls { LogException(E); } - } - private void LockNotepadIcon_MouseUp(object sender, MouseButtonEventArgs e) - { - if (e.ChangedButton == MouseButton.Left) - LockNotepad(); - } - - private void LockNotepadIcon_TouchDown(object sender, TouchEventArgs e) - { - LockNotepad(); - } + private void LockNotepadIcon_Click(object sender, InputEventArgs e) => LockNotepad(); private void LockNotepadIcon_MouseLeave(object sender, MouseEventArgs e) { diff --git a/FasdDesktopUi/Basics/UserControls/QuickActionSelector.xaml b/FasdDesktopUi/Basics/UserControls/QuickActionSelector.xaml index 3e841e1..51b9319 100644 --- a/FasdDesktopUi/Basics/UserControls/QuickActionSelector.xaml +++ b/FasdDesktopUi/Basics/UserControls/QuickActionSelector.xaml @@ -78,14 +78,15 @@ + Height="26" + CancelledSearch="Search_CancelledSearch" /> SearchValueChanged?.Invoke(this, e); + + #region ClearSearch + private void Search_CancelledSearch(object sender, RoutedEventArgs e) + { + Search.Clear(); + } + #endregion } } diff --git a/FasdDesktopUi/Basics/UserControls/SearchBar.xaml.cs b/FasdDesktopUi/Basics/UserControls/SearchBar.xaml.cs index 004f9c7..2cc3186 100644 --- a/FasdDesktopUi/Basics/UserControls/SearchBar.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/SearchBar.xaml.cs @@ -1,4 +1,5 @@ using System; +using System.Timers; using System.Windows; using System.Windows.Controls; using System.Windows.Input; @@ -9,7 +10,7 @@ namespace FasdDesktopUi.Basics.UserControls { public partial class SearchBar : UserControl { - private readonly DispatcherTimer _searchTimer = new DispatcherTimer(); + private readonly Timer _searchTimer = new Timer(); #region Dependency Properties @@ -70,7 +71,8 @@ namespace FasdDesktopUi.Basics.UserControls private static void OnDebounceIntervalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - ((SearchBar)d)._searchTimer.Interval = (TimeSpan)e.NewValue; + TimeSpan interval = (TimeSpan)e.NewValue; + ((SearchBar)d)._searchTimer.Interval = Math.Max(interval.TotalMilliseconds, 10); } public static readonly DependencyProperty IsInputEnabledProperty = @@ -158,7 +160,7 @@ namespace FasdDesktopUi.Basics.UserControls private void HandleSearchValueChanged() { - if (_searchTimer.IsEnabled) + if (_searchTimer.Enabled) _searchTimer.Stop(); _searchTimer.Start(); @@ -183,8 +185,8 @@ namespace FasdDesktopUi.Basics.UserControls private void SearchBar_Loaded(object sender, RoutedEventArgs e) { _searchTimer.Stop(); - _searchTimer.Interval = DebounceInterval; - _searchTimer.Tick += SearchTimerTick; + _searchTimer.Interval = Math.Max(DebounceInterval.TotalMilliseconds, 10); + _searchTimer.Elapsed += SearchTimerTick; BackgroundBorder.CornerRadius = new CornerRadius(BackgroundBorder.ActualHeight / 2.0); } diff --git a/FasdDesktopUi/Basics/UserControls/SearchResult/CustomSearchResultCollection.xaml.cs b/FasdDesktopUi/Basics/UserControls/SearchResult/CustomSearchResultCollection.xaml.cs index 61f9231..fb3ad3b 100644 --- a/FasdDesktopUi/Basics/UserControls/SearchResult/CustomSearchResultCollection.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/SearchResult/CustomSearchResultCollection.xaml.cs @@ -422,9 +422,28 @@ namespace FasdDesktopUi.Basics.UserControls foreach (var informationClass in informationClasses.Reverse()) { + string _title = string.Empty; + switch (informationClass) + { + case enumFasdInformationClass.Computer: + _title = "Searchbar.Relations.SearchFor.Computer"; + break; + case enumFasdInformationClass.User: + _title = "Searchbar.Relations.SearchFor.User"; + break; + case enumFasdInformationClass.Ticket: + _title = "Searchbar.Relations.SearchFor.Ticket"; + break; + case enumFasdInformationClass.VirtualSession: + _title = "Searchbar.Relations.SearchFor.VirtualSession"; + break; + } + if (string.IsNullOrEmpty(_title)) + continue; + var searchResultCategory = new SearchResultCategory() { - Title = string.Format(cMultiLanguageSupport.GetItem("Searchbar.Relations.SearchFor"), informationClass), + Title = cMultiLanguageSupport.GetItem(_title), IsPending = true, TitleIcon = GetIconFrom(informationClass), Margin = new Thickness(0, 7.5, 0, 0) diff --git a/FasdDesktopUi/Config/LanguageDefinitions.xml b/FasdDesktopUi/Config/LanguageDefinitions.xml index 739ae53..4211b12 100644 --- a/FasdDesktopUi/Config/LanguageDefinitions.xml +++ b/FasdDesktopUi/Config/LanguageDefinitions.xml @@ -399,9 +399,24 @@ Wie möchten Sie fortfahren? Letzte Suchanfragen - - Search {0} - Suche {0} + + Search Computers + Suche Computer + + + + Search users + Suche Anwender + + + + Search tickets + Suche Tickets + + + + Search virtual sessions + Suche virtuelle Sitzungen @@ -604,8 +619,8 @@ Alle offenen Fälle werden dabei geschlossen. - Select language - Sprache festlegen + Select language & Format + Sprache & Format festlegen diff --git a/FasdDesktopUi/F4SD-Cockpit-Client.csproj b/FasdDesktopUi/F4SD-Cockpit-Client.csproj index d184b92..8a024b5 100644 --- a/FasdDesktopUi/F4SD-Cockpit-Client.csproj +++ b/FasdDesktopUi/F4SD-Cockpit-Client.csproj @@ -294,6 +294,11 @@ CustomMenuItemToolTipTemplate.xaml + + + + + LevelTracker.xaml @@ -1119,9 +1124,6 @@ taskkill -im "F4SD-Cockpit-Client.exe" -f -FI "STATUS eq RUNNING" - + \ No newline at end of file diff --git a/FasdDesktopUi/Pages/SettingsPage/ShortCutPageView.xaml.cs b/FasdDesktopUi/Pages/SettingsPage/ShortCutPageView.xaml.cs index d911d34..44674bf 100644 --- a/FasdDesktopUi/Pages/SettingsPage/ShortCutPageView.xaml.cs +++ b/FasdDesktopUi/Pages/SettingsPage/ShortCutPageView.xaml.cs @@ -173,10 +173,11 @@ namespace FasdDesktopUi.Pages.ShortCutPage { Names = new C4IT.MultiLanguage.cMultiLanguageDictionary() { - ["EN"] = "Open Quick Action menu", - ["DE"] = "Quick Action Menü öffnen" + ["EN"] = "Open Quick Action menu/close", + ["DE"] = "Quick Action Menü öffnen/schließen" }, HotKey = Key.Q, + AlternativeKey = Key.Escape }, new cHotKeyInformation() {