using C4IT.F4SD.SupportCaseProtocoll.Models; using C4IT.FASD.Base; using C4IT.MultiLanguage; using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.UserControls; using System; using System.Collections.Generic; using System.Globalization; using static C4IT.Logging.cLogManager; using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor; namespace FasdDesktopUi.Basics.Services.ProtocollService { internal static class QuickActionProtocollEntryOutput { const string AsciiSeperator = "\n\n"; public static QuickActionProtocollEntry GetQuickActionProtocollEntry(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData) { string ascii = GetAscii(quickActionDefinition, quickActionCopyData); string html = GetHtml(quickActionDefinition, quickActionCopyData); return new QuickActionProtocollEntry(ascii, html) { Id = quickActionDefinition.Id, Name = quickActionDefinition.Name, ExecutionTypeId = (int)quickActionDefinition.ExecutionType, WasRunningOnAffectedDevice = quickActionCopyData.WasRunningOnAffectedDevice, AffectedDeviceName = quickActionCopyData.AffectedDeviceName, ResultCode = (int?)quickActionCopyData.QuickActionOutput?.ResultCode, ErrorMessage = quickActionCopyData.QuickActionOutput?.ErrorDescription, MeasureValues = GetQuickActionHtmlValueComparison(quickActionCopyData.MeasureValues) }; } internal static cQuickActionCopyData GetCopyData(cFasdQuickAction quickActionDefinition, cSupportCaseDataProvider dataProvider, bool wasRunningOnAffectedDevice, cQuickActionOutput quickActionOutput, List measureValues) { cQuickActionCopyData quickActionCopyData = new cQuickActionCopyData(); try { string currentLanguage = cMultiLanguageSupport.CurrentLanguage; cMultiLanguageSupport.CurrentLanguage = cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage ?? currentLanguage; quickActionCopyData.Name = quickActionDefinition.Names.GetValue(); quickActionCopyData.ExecutionTime = DateTime.UtcNow; quickActionCopyData.AffectedDeviceName = dataProvider.HealthCardDataHelper.GetInformationObjectHeadingName(enumFasdInformationClass.Computer); quickActionCopyData.WasRunningOnAffectedDevice = wasRunningOnAffectedDevice; quickActionCopyData.QuickActionOutput = quickActionOutput; quickActionCopyData.MeasureValues = measureValues; cMultiLanguageSupport.CurrentLanguage = currentLanguage; } catch (Exception ex) { LogException(ex); } return quickActionCopyData; } private static string GetAscii(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData) => GetQuickActionAscii(quickActionDefinition, quickActionCopyData); private static string GetHtml(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData) => GetQuickActionHtml(quickActionDefinition, quickActionCopyData); private static bool ShouldHideQuickActionOutput(cFasdQuickAction quickActionDefinition, string outputValueKey) { try { if (quickActionDefinition.ColumnOutputFormattings is null) return false; if (!quickActionDefinition.ShowAllOutputContent && !quickActionDefinition.ColumnOutputFormattings.ContainsKey(outputValueKey)) return true; if (quickActionDefinition.ColumnOutputFormattings.TryGetValue(outputValueKey, out var columnFormatting)) return columnFormatting.Hidden; } catch (Exception ex) { LogException(ex); } return false; } #region Ascii private static string GetQuickActionAscii(cFasdQuickAction quickActionDefinition, cQuickActionCopyData copyData) { string ascii = string.Empty; ascii += GetQuickActionAsciiDescription(copyData.Name, copyData.AffectedDeviceName, copyData.WasRunningOnAffectedDevice, copyData.ExecutionTime, copyData.QuickActionOutput?.ResultCode); ascii += GetQuickActionAsciiError(copyData.QuickActionOutput?.ErrorDescription); ascii += GetQuickActionAsciiOutput(quickActionDefinition, copyData.QuickActionOutput); ascii += GetQuickActionAsciiValueComparisonString(copyData.MeasureValues); return ascii; } private static string GetQuickActionAsciiDescription(string quickActionName, string deviceName, bool wasRunningOnAffectedDevice, DateTime executionTime, enumQuickActionSuccess? quickActionStatus) { string asciiDescription = string.Empty; try { var quickActionStatusString = string.Empty; switch (quickActionStatus) { case null: case enumQuickActionSuccess.successfull: quickActionStatusString = cMultiLanguageSupport.GetItem("QuickAction.Copy.RevisionStatus.Successfull"); break; case enumQuickActionSuccess.error: quickActionStatusString = cMultiLanguageSupport.GetItem("QuickAction.Copy.RevisionStatus.Error"); break; } var rawDescription = wasRunningOnAffectedDevice ? cMultiLanguageSupport.GetItem("QuickAction.Remote.Copy.Description") : cMultiLanguageSupport.GetItem("QuickAction.Local.Copy.Description"); asciiDescription = string.Format(rawDescription, quickActionName, deviceName, executionTime.ToString("g", new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)), quickActionStatusString); } catch (Exception E) { LogException(E); } return asciiDescription; } private static string GetQuickActionAsciiError(string errorMessage) { if (!string.IsNullOrEmpty(errorMessage)) errorMessage.Insert(0, AsciiSeperator); return errorMessage; } private static string GetQuickActionAsciiOutput(cFasdQuickAction quickActionDefinition, QuickActionStatusMonitor.cQuickActionOutput quickActionOutput) { string output = string.Empty; try { if (!string.IsNullOrWhiteSpace(quickActionOutput?.ErrorDescription)) return output; switch (quickActionOutput) { case QuickActionStatusMonitor.cQuickActionOutputSingle singleOutput: { if (singleOutput.Value is null) return output; output += AsciiSeperator; output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + " "; output += singleOutput.GetDisplayValue(quickActionDefinition.ColumnOutputFormattings); break; } case QuickActionStatusMonitor.cQuickActionOutputList listOutput: { output += AsciiSeperator; output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + "\n"; foreach (var value in listOutput.Values[0]) { if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key)) continue; if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) output += outputFormatting.Names.GetValue(); else output += value.Key; output += " | "; } for (int i = 0; i < listOutput.Values.Count; i++) { output += "\n"; for (int j = 0; j < listOutput.Values[i].Count; j++) { string valueKey = listOutput.Values[0][j].Key; if (ShouldHideQuickActionOutput(quickActionDefinition, valueKey)) continue; string displayValue = listOutput.GetDisplayValue(i, j, quickActionDefinition.ColumnOutputFormattings); if (string.IsNullOrWhiteSpace(displayValue)) continue; output += displayValue; output += " | "; } } break; } case QuickActionStatusMonitor.cQuickActionOutputObject objectOutput: { output += AsciiSeperator; output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + "\n"; for (int i = 0; i < objectOutput.Values.Count; i++) { var value = objectOutput.Values[i]; if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key)) continue; string columnTitle = string.Empty; if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) columnTitle = outputFormatting.Names.GetValue(); else columnTitle = value.Key; if (!string.IsNullOrEmpty(columnTitle)) output += $"{columnTitle}: "; string displayValue = objectOutput.GetDisplayValue(i, quickActionDefinition.ColumnOutputFormattings); output += !string.IsNullOrWhiteSpace(displayValue) ? displayValue : null; output += "\n"; } break; } } } catch (Exception E) { LogException(E); } return output; } private static string GetQuickActionAsciiValueComparisonString(List measureValues) { string output = string.Empty; try { if (measureValues is null || measureValues.Count <= 0) return output; output += AsciiSeperator + cMultiLanguageSupport.GetItem("QuickAction.Copy.Measure"); cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local); foreach (var measureValue in measureValues) { try { string value = cUtility.RawValueFormatter.GetDisplayValue(measureValue.Value, measureValue.Display); string postValue = cUtility.RawValueFormatter.GetDisplayValue(measureValue.PostValue, measureValue.Display); string difference = string.Empty; if (measureValue.Difference != null) difference = $" (∆ {cUtility.RawValueFormatter.GetDisplayValue(measureValue.Difference, measureValue.Display)})"; output += "\n" + measureValue.Names.GetValue(cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage) + ": " + value + " ➜ " + postValue + difference; } catch (Exception E) { LogException(E); } } } catch (Exception E) { LogException(E); } return output; } #endregion #region Html private static string GetQuickActionHtml(cFasdQuickAction quickActionDefinition, cQuickActionCopyData copyData) { string output = string.Empty; try { output += GetQuickActionHtmlDescription(copyData.Name, copyData.AffectedDeviceName, copyData.WasRunningOnAffectedDevice, copyData.ExecutionTime, copyData.QuickActionOutput?.ResultCode); output += GetQuickActionHtmlError(copyData.QuickActionOutput?.ErrorDescription); output += GetQuickActionHtmlOutput(quickActionDefinition, copyData.QuickActionOutput); output += GetQuickActionHtmlValueComparison(copyData.MeasureValues); } catch (Exception E) { LogException(E); } return output; } private static string GetQuickActionHtmlDescription(string quickActionName, string deviceName, bool wasRunningOnAffectedDevice, DateTime executionTime, enumQuickActionSuccess? quickActionStatus) { string output = string.Empty; try { var quickActionStatusString = string.Empty; switch (quickActionStatus) { case null: case enumQuickActionSuccess.successfull: quickActionStatusString = cMultiLanguageSupport.GetItem("QuickAction.Copy.RevisionStatus.Successfull"); break; case enumQuickActionSuccess.error: quickActionStatusString = cMultiLanguageSupport.GetItem("QuickAction.Copy.RevisionStatus.Error"); break; } var rawDescription = wasRunningOnAffectedDevice ? cMultiLanguageSupport.GetItem("QuickAction.Remote.Copy.Description.Html") : cMultiLanguageSupport.GetItem("QuickAction.Local.Copy.Description.Html"); output = string.Format(rawDescription, quickActionName, deviceName, executionTime.ToString("g", new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)), quickActionStatusString); } catch (Exception E) { LogException(E); } return output; } private static string GetQuickActionHtmlError(string errorMessage) { if (!string.IsNullOrEmpty(errorMessage)) errorMessage = $"

{errorMessage}

"; return errorMessage; } private static string GetQuickActionHtmlOutput(cFasdQuickAction quickActionDefinition, QuickActionStatusMonitor.cQuickActionOutput quickActionOutput) { string output = string.Empty; try { if (!string.IsNullOrWhiteSpace(quickActionOutput?.ErrorDescription)) return output; output += "
"; switch (quickActionOutput) { case QuickActionStatusMonitor.cQuickActionOutputSingle singleOutput: { if (singleOutput.Value is null) return output; var displayValue = singleOutput.GetDisplayValue(quickActionDefinition?.ColumnOutputFormattings); output += "

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

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

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

"; output += ""; output += ""; foreach (var value in listOutput.Values[0]) { if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key)) continue; string headingValue = value.Key; if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) headingValue = outputFormatting.Names.GetValue(); output += ""; } output += ""; for (int i = 0; i < listOutput.Values.Count; i++) { output += ""; for (int j = 0; j < listOutput.Values[i].Count; j++) { string valueKey = listOutput.Values[0][j].Key; if (ShouldHideQuickActionOutput(quickActionDefinition, valueKey)) continue; string displayValue = listOutput.GetDisplayValue(i, j, quickActionDefinition.ColumnOutputFormattings); if (string.IsNullOrWhiteSpace(displayValue)) continue; output += ""; } output += ""; } output += "
"; output += headingValue; output += "
"; output += displayValue; output += "
"; break; } case QuickActionStatusMonitor.cQuickActionOutputObject objectOutput: { output += "

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

"; output += ""; for (int i = 0; i < objectOutput.Values.Count; i++) { var value = objectOutput.Values[i]; if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key)) continue; string headingValue = value.Key; if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) headingValue = outputFormatting.Names.GetValue(); output += ""; output += ""; output += ""; output += ""; } output += "
"; output += headingValue; output += ""; string displayValue = objectOutput.GetDisplayValue(i, quickActionDefinition.ColumnOutputFormattings); output += !string.IsNullOrWhiteSpace(displayValue) ? displayValue : null; output += "
"; break; } } } catch (Exception E) { LogException(E); } return output; } private static string GetQuickActionHtmlValueComparison(List measureValues) { string output = string.Empty; try { if (measureValues is null || measureValues.Count <= 0) return output; output += "

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

"; cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local); foreach (var measureValue in measureValues) { try { string value = cUtility.RawValueFormatter.GetDisplayValue(measureValue.Value, measureValue.Display); string postValue = cUtility.RawValueFormatter.GetDisplayValue(measureValue.PostValue, measureValue.Display); string difference = string.Empty; if (measureValue.Difference != null) difference = $" (∆ {cUtility.RawValueFormatter.GetDisplayValue(measureValue.Difference, measureValue.Display)})"; output += "

"; output += "" + measureValue.Names.GetValue(cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage) + ": " + value + " ➜ " + postValue + difference; output += "

"; } catch (Exception E) { LogException(E); } } } catch (Exception E) { LogException(E); } return output; } #endregion } }