Compare commits

...

2 Commits

Author SHA1 Message Date
Meik
c1f600bc0d aktueller Stand 2026-02-04 13:27:03 +01:00
Meik
195d5c9188 aktueller Stand 2026-02-04 11:22:55 +01:00
3 changed files with 75 additions and 1 deletions

View File

@@ -506,7 +506,7 @@ namespace FasdDesktopUi
closeUserSessionTask = cFasdCockpitCommunicationBase.Instance?.CloseUserSession(cFasdCockpitConfig.SessionId).ConfigureAwait(false); closeUserSessionTask = cFasdCockpitCommunicationBase.Instance?.CloseUserSession(cFasdCockpitConfig.SessionId).ConfigureAwait(false);
} }
await cFasdCockpitCommunicationBase.Instance.TerminateAsync(); await cFasdCockpitCommunicationBase.Instance?.TerminateAsync();
if (notifyIcon != null) if (notifyIcon != null)
{ {

View File

@@ -69,6 +69,8 @@ namespace FasdDesktopUi.Basics.UserControls
private const string CategoryTableNamePrimary = "M42Wpm-Ticket-Categories"; private const string CategoryTableNamePrimary = "M42Wpm-Ticket-Categories";
private const string CategoryTableNameLegacy = "M42Wpm-Ticket-CloseCase-Categories"; private const string CategoryTableNameLegacy = "M42Wpm-Ticket-CloseCase-Categories";
private const string TicketDetailsTableName = "M42Wpm-Tickets";
private const string TicketDetailsCategoryIdColumnName = "CategoryId";
private string activeCategoryTableName = CategoryTableNamePrimary; private string activeCategoryTableName = CategoryTableNamePrimary;
private static readonly Brush SharedValidationBorderBrush = CreateValidationBrush(); private static readonly Brush SharedValidationBorderBrush = CreateValidationBrush();
@@ -240,6 +242,7 @@ namespace FasdDesktopUi.Basics.UserControls
EnableHoldTicketAction = statusId != enumTicketStatus.OnHold; EnableHoldTicketAction = statusId != enumTicketStatus.OnHold;
} }
TrySelectTicketCategoryFromTicketInfos(); TrySelectTicketCategoryFromTicketInfos();
_ = EnsureSelectedTicketCategoryFromDetailsAsync(_selectedTicket);
} }
} }
@@ -1182,6 +1185,76 @@ namespace FasdDesktopUi.Basics.UserControls
} }
} }
private bool ShouldLoadCategoryFromDetails(cF4sdApiSearchResultRelation ticket)
{
if (ticket == null || ticket == _newTicketRelation || ticket == _selectTicketRelation || ticket == _noTicketRelation)
return false;
if (ticket.Infos == null)
return true;
if (!ticket.Infos.TryGetValue(TicketInfoKeys.Category, out var categoryValue) || string.IsNullOrWhiteSpace(categoryValue))
return true;
return !Guid.TryParse(categoryValue, out _);
}
private async Task EnsureSelectedTicketCategoryFromDetailsAsync(cF4sdApiSearchResultRelation ticket)
{
try
{
if (!ShouldLoadCategoryFromDetails(ticket))
return;
var communication = cFasdCockpitCommunicationBase.Instance;
if (communication == null)
return;
var request = new cF4sdHealthCardRawDataRequest
{
Tables = new List<string> { TicketDetailsTableName },
Identities = new cF4sdIdentityList
{
new cF4sdIdentityEntry { Class = enumFasdInformationClass.Ticket, Id = ticket.id }
},
MaxAge = 1
};
var rawData = await communication.GetHealthCardData(request).ConfigureAwait(false);
if (rawData?.Tables == null)
return;
if (!rawData.Tables.TryGetValue(TicketDetailsTableName, out var ticketTable))
return;
if (!ticketTable.Columns.TryGetValue(TicketDetailsCategoryIdColumnName, out var categoryColumn))
return;
var categoryId = categoryColumn.Values?.FirstOrDefault()?.ToString();
if (string.IsNullOrWhiteSpace(categoryId))
return;
await Dispatcher.InvokeAsync(() =>
{
if (SelectedTicket == null)
return;
if (!ReferenceEquals(SelectedTicket, ticket) && SelectedTicket.id != ticket.id)
return;
if (SelectedTicket.Infos == null)
SelectedTicket.Infos = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
SelectedTicket.Infos[TicketInfoKeys.Category] = categoryId;
TrySelectTicketCategoryFromTicketInfos();
});
}
catch (Exception E)
{
LogException(E);
}
}
private Guid? GetSelectedCategoryGuid() private Guid? GetSelectedCategoryGuid()
{ {
if (SelectedCategory == null || string.IsNullOrWhiteSpace(SelectedCategory.Id)) if (SelectedCategory == null || string.IsNullOrWhiteSpace(SelectedCategory.Id))

View File

@@ -1064,6 +1064,7 @@ namespace FasdDesktopUi.Pages.SearchPage
var _ticketRelation = new cF4sdApiSearchResultRelation() var _ticketRelation = new cF4sdApiSearchResultRelation()
{ {
Type = enumF4sdSearchResultClass.Ticket, Type = enumF4sdSearchResultClass.Ticket,
Name = ticketName,
DisplayName = ticketName, DisplayName = ticketName,
id = ticketId, id = ticketId,
Status = enumF4sdSearchResultStatus.Active, Status = enumF4sdSearchResultStatus.Active,