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,110 @@
using C4IT.FASD.Base;
using C4IT.Logging;
using C4IT.MultiLanguage;
using FasdDesktopUi.Basics.Services.RelationService;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UiActions
{
public class cUiProcessSearchRelationAction : cUiActionBase
{
private readonly List<cFasdApiSearchResultEntry> _selectedSearchResult;
private readonly List<cF4sdApiSearchResultRelation> _relations;
private readonly cF4sdApiSearchResultRelation _selectedRelation;
private readonly IRelationService _relationService;
private readonly ISearchUiProvider _searchUiProvider;
private readonly cSearchHistoryEntryBase _searchHistoryEntry;
public cUiProcessSearchRelationAction(cSearchHistorySearchResultEntry searchHistoryEntry, cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService, ISearchUiProvider searchUiProvider)
{
Name = $"{searchHistoryEntry.HeaderText} → {selectedRelation.DisplayName}";
_selectedSearchResult = searchHistoryEntry.SelectedSearchResult;
_relations = searchHistoryEntry.Relations;
_selectedRelation = selectedRelation;
_relationService = relationService;
_searchUiProvider = searchUiProvider;
_searchHistoryEntry = searchHistoryEntry;
}
public cUiProcessSearchRelationAction(string name, List<cFasdApiSearchResultEntry> selectedSearchResult, List<cF4sdApiSearchResultRelation> relations, cF4sdApiSearchResultRelation selectedRelation, ISearchUiProvider searchUiProvider, cSearchHistoryEntryBase searchHistoryEntry)
{
Name = name;
_selectedSearchResult = selectedSearchResult;
_relations = relations;
_selectedRelation = selectedRelation;
_searchUiProvider = searchUiProvider;
_searchHistoryEntry = searchHistoryEntry;
}
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
{
// return false: The search action has finished, the search could be canceled
// return true: The search action is ongoing
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (dataProvider != null)
{
Debug.Assert(true, "At this moment, we want to create a new support call, so we must not have a dataProvider");
LogEntry("At this moment, we want to create a new support call, so we must not have a dataProvider", LogLevels.Error);
return false;
}
if (_selectedRelation == null)
{
Debug.Assert(true, "A new support case can't be opend, if we have no selected relation or seach result");
LogEntry("A new support case can't be opend, if we have no sselected relation or seach result", LogLevels.Error);
return false;
}
// check, if have an active support case
var supportCaseActive = dataProvider?.IsActive ?? false;
// create the search histroy entry
var _seachHistoryEntry = new cSearchHistoryRelationEntry(Name, _selectedSearchResult, _relations, _selectedRelation, _searchUiProvider);
cSearchManager.Instance.ReplaceEntry(_seachHistoryEntry, _searchHistoryEntry);
// show the loading information
string caseObjectName = _selectedRelation.DisplayName;
string loadingStatusText = string.Format(cMultiLanguageSupport.GetItem("Searchbar.Loading.CaseData"), caseObjectName);
_searchUiProvider.ShowLoadingTextItem(loadingStatusText);
// if we have an opened support case, close it immediately
if (supportCaseActive)
{
if (!await cSupportCaseDataProvider.SupportTicketActiveNoticeAsync())
return false;
}
// set the new result menu properies for loading ....
_seachHistoryEntry.isSeen = true;
// get the new data provider for the support call informations (get it from the cache or create a new one)
dataProvider = await cSupportCaseDataProvider.GetDataProviderForAsync(_relations, _selectedRelation, _relationService);
if (dataProvider is null)
{
Debug.Assert(true, "Could not start a data provider for the selected criterias.");
LogEntry("Could not start a data provider for the selected criterias.", LogLevels.Error);
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return false;
}
}
}