This commit is contained in:
Meik
2025-11-11 11:03:42 +01:00
commit dc3e8a2e4c
582 changed files with 191465 additions and 0 deletions

View File

@@ -0,0 +1,207 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using FasdDesktopUi.Basics.Models;
using C4IT.FASD.Base;
using C4IT.MultiLanguage;
using static C4IT.Logging.cLogManager;
using C4IT.F4SD.DisplayFormatting;
namespace FasdDesktopUi.Basics.UiActions
{
public class cUiChainQuickAction : cUiQuickAction
{
private readonly List<cFasdQuickAction> chainedQuickActionConfigs = new List<cFasdQuickAction>();
public int QuickActionCount { get => chainedQuickActionConfigs?.Count ?? 0; }
public cF4sdQuickActionChained ChainedQuickAction { get; set; }
public cUiChainQuickAction(cF4sdQuickActionChained quickAction) : base(quickAction)
{
ChainedQuickAction = quickAction;
foreach (var quickActionName in quickAction.QuickActionNames)
{
if ((cF4SDCockpitXmlConfig.Instance?.QuickActionConfig?.F4SDQuickActions.QuickActions.TryGetValue(quickActionName, out var chainedQuickAction) ?? false))
chainedQuickActionConfigs.Add(chainedQuickAction);
else
LogEntry($"Couldn't find Quick Action with name '{quickActionName}'", C4IT.Logging.LogLevels.Warning);
}
}
public async override Task<cQuickActionStatusMonitorModel> GetQuickActionStatusMonitorDataAsync()
{
try
{
var quickActionSteps = new List<cQuickActionStatusMonitorModel.cQuickActionStep>();
bool requiresUserPermission = false;
foreach (var quickActionConfig in chainedQuickActionConfigs)
{
var tempStep = new cQuickActionStatusMonitorModel.cQuickActionStep(quickActionConfig.Names.GetValue(), quickActionConfig.Name, cQuickActionStatusMonitorModel.cQuickActionStep.enumActionStepType.main);
var uiAction = cUiActionBase.GetUiAction(quickActionConfig);
if (uiAction is cUiQuickAction uiQuickAction)
{
var statusMonitorData = await uiQuickAction.GetQuickActionStatusMonitorDataAsync();
tempStep.SubSteps = statusMonitorData.ActionSteps;
requiresUserPermission = requiresUserPermission || statusMonitorData.RequiresUserPermission;
}
quickActionSteps.Add(tempStep);
}
var output = new cQuickActionStatusMonitorModel()
{
ActionName = ChainedQuickAction.Names.GetValue(),
QuickActionDefinition = ChainedQuickAction,
ActionSteps = quickActionSteps,
RequiresUserPermission = requiresUserPermission,
RunQuickAction = ProcessActionAsync
};
if (chainedQuickActionConfigs.Any(config => config.AdjustableParameters?.Count > 0))
output.QuickActionParameters = new Dictionary<string, cAdjustableParameter>();
foreach (var quickActionConfig in chainedQuickActionConfigs)
{
if (quickActionConfig.AdjustableParameters is null)
continue;
foreach (var quickActionParam in quickActionConfig.AdjustableParameters)
{
if (output.QuickActionParameters is null || output.QuickActionParameters.ContainsKey(quickActionParam.Key))
continue;
output.QuickActionParameters.Add(quickActionParam.Key, quickActionParam.Value);
}
}
return output;
}
catch (Exception E)
{
LogException(E);
}
return null;
}
public override async Task<cDataCanvasDataModel> GetQuickActionDataAsync(cSupportCaseDataProvider dataProvider, bool isDetailedLayout)
{
DataProvider = dataProvider;
var detailedData = new cDetailedDataModel() { Heading = cMultiLanguageSupport.GetItem("DetailsPage.History") };
//Get QuickAciton Data
detailedData.FullDetailedData = new List<object>() { new List<object>() { "Status", cMultiLanguageSupport.GetItem("QuickAction.Revision.ExecutionTime") } };
if (dataProvider != null)
{
var quickActionHistory = await dataProvider.QuickActionProtocollHelper.GetQuickActionHistoryAsync(ChainedQuickAction.Name);
foreach (var historyLine in quickActionHistory)
{
detailedData.FullDetailedData.Add(historyLine);
}
}
//Get Process Steps of Action
var quickActionData = await GetQuickActionStatusMonitorDataAsync();
//Get Recommendation
cRecommendationDataModel recommendationData = QuickActionRecommendation?.Recommendation != null ? QuickActionRecommendation : null;
return new cDataCanvasDataModel() { DetailedData = detailedData, QuickActionStatusMonitorData = quickActionData, RecommendationData = recommendationData };
}
private void CancelRunningActionSteps()
{
try
{
foreach (var actionStep in StatusMonitor.QuickActionData.ActionSteps)
{
if (actionStep.Status is enumQuickActionRevisionStatus.inProgress)
actionStep.Status = enumQuickActionRevisionStatus.canceled;
foreach (var subSteps in actionStep.SubSteps)
{
if (subSteps.Status is enumQuickActionRevisionStatus.inProgress)
subSteps.Status = enumQuickActionRevisionStatus.canceled;
}
}
}
catch (Exception E)
{
LogException(E);
}
}
public override async Task<List<object>> ProcessActionAsync(CancellationToken token, Dictionary<cAdjustableParameter, object> ParameterDictionary = null)
{
try
{
if (chainedQuickActionConfigs?.Count <= 0)
return null;
foreach (var quickActionConfig in chainedQuickActionConfigs)
{
if (token.IsCancellationRequested)
break;
var uiAction = GetUiAction(quickActionConfig);
if (uiAction is null)
continue;
if (!(uiAction is cUiQuickAction uiQuickAction))
continue;
uiQuickAction.DataProvider = DataProvider;
uiQuickAction.StatusMonitor = StatusMonitor;
foreach (var child in StatusMonitor.CompletionStatusPanel.Children)
{
if (child is System.Windows.Controls.StackPanel childStackPanel)
childStackPanel.Visibility = System.Windows.Visibility.Collapsed;
if (child is System.Windows.FrameworkElement childFrameworkElement)
if (childFrameworkElement.Tag?.Equals(quickActionConfig.Name) ?? false)
childFrameworkElement.Visibility = System.Windows.Visibility.Visible;
}
var result = await uiQuickAction.ProcessActionAsync(token, ParameterDictionary);
if (result != null && result[0].Equals(cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedWithError")))
{
CancelRunningActionSteps();
return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedWithError"), _rawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
}
}
if (token.IsCancellationRequested)
{
CancelRunningActionSteps();
return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), _rawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
}
return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedSuccessfull"), _rawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
}
catch (Exception E)
{
LogException(E);
}
return null;
}
}
}