aktueller stand

This commit is contained in:
Meik
2026-02-12 08:42:41 +01:00
parent 7392454a63
commit 493e671b9f
30 changed files with 30212 additions and 30217 deletions

View File

@@ -2,17 +2,15 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.IO;
using System.IO;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
using System.Xml;
using Newtonsoft.Json;
using FasdCockpitBase.Models;
using FasdCockpitCommunicationDemo;
using C4IT.Configuration;
using C4IT.FASD.Base;
using static C4IT.Logging.cLogManager;
using FasdCockpitBase;
@@ -48,6 +46,7 @@ namespace C4IT.FASD.Cockpit.Communication
BuildCategoryLookup();
LoadTicketOverviewRelations();
LoadGeneratedTickets();
ApplyMissingDemoTicketActivityTypes();
EnsureOverviewTicketJournalEntries();
}
@@ -276,6 +275,72 @@ namespace C4IT.FASD.Cockpit.Communication
}
}
private void ApplyMissingDemoTicketActivityTypes()
{
try
{
var activityTypesByTicketId = new Dictionary<Guid, string>();
foreach (var tileEntry in TicketOverviewRelations.Values)
{
if (tileEntry == null)
continue;
foreach (var scopeEntry in tileEntry.Values)
{
if (scopeEntry == null)
continue;
foreach (var definition in scopeEntry)
{
if (definition == null || definition.TicketId == Guid.Empty)
continue;
var activityType = NormalizeActivityType(definition.ActivityType);
if (string.IsNullOrWhiteSpace(activityType))
continue;
activityTypesByTicketId[definition.TicketId] = activityType;
}
}
}
foreach (var sampleData in MockupData)
{
if (sampleData?.Tickets == null)
continue;
foreach (var ticket in sampleData.Tickets)
{
if (ticket == null)
continue;
ticket.ActivityType = NormalizeActivityType(ticket.ActivityType);
if (!string.IsNullOrWhiteSpace(ticket.ActivityType))
continue;
if (ticket.Id != Guid.Empty && activityTypesByTicketId.TryGetValue(ticket.Id, out var mappedActivityType))
{
ticket.ActivityType = mappedActivityType;
continue;
}
ticket.ActivityType = NormalizeActivityType(TryGetActivityTypeFromTicketLinks(ticket));
}
}
}
catch (Exception E)
{
LogException(E);
}
}
private static string NormalizeActivityType(string activityType)
{
return string.IsNullOrWhiteSpace(activityType) ? null : activityType.Trim();
}
private void EnsureOverviewTicketJournalEntries()
{
try
@@ -396,10 +461,11 @@ namespace C4IT.FASD.Cockpit.Communication
AffectedUser = detail.AffectedUser ?? record.UserDisplayName,
Asset = detail.Asset,
Category = detail.Category,
ActivityType = NormalizeActivityType(record.ActivityType),
Description = detail.Description,
DescriptionHtml = detail.DescriptionHtml,
Solution = detail.Solution,
SolutionHtml = detail.SolutionHtml,
SolutionHtml = detail.SolutionHtml,
CreationDate = createdAt.ToLocalTime(),
CreationDaysSinceNow = Math.Max(0, (int)(DateTime.UtcNow - createdAt).TotalDays),
Priority = detail.Priority ?? 0,
@@ -562,34 +628,16 @@ namespace C4IT.FASD.Cockpit.Communication
return fallbackData.Tickets.FirstOrDefault(ticket => ticket.Id == definition.TicketId);
}
private static string ResolveTicketActivityType(string displayName, cF4SDTicket detailTicket = null)
private static string ResolveTicketActivityType(cF4SDTicket detailTicket = null)
{
var configuredType = NormalizeActivityType(detailTicket?.ActivityType);
if (!string.IsNullOrWhiteSpace(configuredType))
return configuredType;
var linkType = TryGetActivityTypeFromTicketLinks(detailTicket);
if (!string.IsNullOrWhiteSpace(linkType))
return linkType;
var ticketName = displayName ?? detailTicket?.Name;
if (string.IsNullOrWhiteSpace(ticketName))
return "SPSActivityTypeTicket";
if (ticketName.StartsWith("INC", StringComparison.OrdinalIgnoreCase))
return "SPSActivityTypeIncident";
if (ticketName.StartsWith("SRQ", StringComparison.OrdinalIgnoreCase))
return "SPSActivityTypeServiceRequest";
if (ticketName.StartsWith("PRB", StringComparison.OrdinalIgnoreCase))
return "SPSActivityTypeGroupTicket";
if (ticketName.StartsWith("ALT", StringComparison.OrdinalIgnoreCase))
return "SPSActivityTypeAlert";
if (ticketName.StartsWith("CHG", StringComparison.OrdinalIgnoreCase))
return "SVMChangeRequestType";
if (ticketName.StartsWith("TSK", StringComparison.OrdinalIgnoreCase))
return "SPSActivityTypeBase";
return "SPSActivityTypeTicket";
}
@@ -1258,7 +1306,7 @@ namespace C4IT.FASD.Cockpit.Communication
foreach (var demoTicket in demoTickets)
{
output.Add(new cF4sdApiSearchResultRelation() { id = demoTicket.Id, Name = demoTicket.Name, DisplayName = demoTicket.Name, Infos = new Dictionary<string, string>() { ["Summary"] = demoTicket.Summary, ["Status"] = demoTicket.Status.ToString(), ["StatusId"] = ((int)demoTicket.Status).ToString(), ["Asset"] = demoTicket.Asset, ["ActivityType"] = ResolveTicketActivityType(demoTicket.Name, demoTicket) }, Type = enumF4sdSearchResultClass.Ticket, Identities = new cF4sdIdentityList() { new cF4sdIdentityEntry() { Class = enumFasdInformationClass.User, Id = Guid.Parse(constGuidTimoTicket) }, new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Ticket, Id = demoTicket.Id } } });
output.Add(new cF4sdApiSearchResultRelation() { id = demoTicket.Id, Name = demoTicket.Name, DisplayName = demoTicket.Name, Infos = new Dictionary<string, string>() { ["Summary"] = demoTicket.Summary, ["Status"] = demoTicket.Status.ToString(), ["StatusId"] = ((int)demoTicket.Status).ToString(), ["Asset"] = demoTicket.Asset, ["ActivityType"] = ResolveTicketActivityType(demoTicket) }, Type = enumF4sdSearchResultClass.Ticket, Identities = new cF4sdIdentityList() { new cF4sdIdentityEntry() { Class = enumFasdInformationClass.User, Id = Guid.Parse(constGuidTimoTicket) }, new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Ticket, Id = demoTicket.Id } } });
}
break;
@@ -1318,7 +1366,7 @@ namespace C4IT.FASD.Cockpit.Communication
["Status"] = demoTicket.Status.ToString(),
["StatusId"] = ((int)demoTicket.Status).ToString(),
["Asset"] = demoTicket.Asset ?? string.Empty,
["ActivityType"] = ResolveTicketActivityType(demoTicket.Name, demoTicket)
["ActivityType"] = ResolveTicketActivityType(demoTicket)
},
Identities = new cF4sdIdentityList()
{
@@ -1901,12 +1949,15 @@ namespace C4IT.FASD.Cockpit.Communication
if (writeParams.Values.TryGetValue("Asset", out var asset))
output.Asset = asset.ToString();
if (writeParams.Values.TryGetValue("Category", out var category))
output.Category = category.ToString();
if (writeParams.Values.TryGetValue("CreationSource", out var creationSourceObj))
if (Enum.TryParse(creationSourceObj.ToString(), out cF4SDTicket.enumTicketCreationSource creationSource))
output.CreationSource = creationSource;
if (writeParams.Values.TryGetValue("Category", out var category))
output.Category = category.ToString();
if (writeParams.Values.TryGetValue("ActivityType", out var activityType))
output.ActivityType = NormalizeActivityType(activityType?.ToString());
if (writeParams.Values.TryGetValue("CreationSource", out var creationSourceObj))
if (Enum.TryParse(creationSourceObj.ToString(), out cF4SDTicket.enumTicketCreationSource creationSource))
output.CreationSource = creationSource;
if (writeParams.Values.TryGetValue("Status", out var statusObj))
{
@@ -2143,37 +2194,11 @@ namespace C4IT.FASD.Cockpit.Communication
cCockpitConfiguration.Instance = new cCockpitConfiguration();
cCockpitConfiguration.Instance.agentApiConfiguration = new cAgentApiConfiguration() { ApiUrl = "", ClientId = "", ClientSecret = "", LogonUrl = "", OrganizationCode = 0 };
cCockpitConfiguration.Instance.m42ServerConfiguration = new cM42ServerConfiguration() { Server = ResolveDemoM42Server() };
cCockpitConfiguration.Instance.GlobalConfig = LoadDemoGlobalConfig();
cCockpitConfiguration.Instance.GlobalConfig = null;
await Task.CompletedTask;
return true;
}
private static cConfigHelperParameterList LoadDemoGlobalConfig()
{
try
{
var executingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var filePath = Path.Combine(executingDirectory, "Config", "F4SD-Global-Configuration.xml");
if (!File.Exists(filePath))
return null;
var xmlDocument = new XmlDocument();
xmlDocument.Load(filePath);
var root = xmlDocument.DocumentElement;
if (root == null || !string.Equals(root.Name, "F4SD-Global-Configuration", StringComparison.OrdinalIgnoreCase))
return null;
return cF4sdGlobalConfigParameterParser.Parse(root);
}
catch (Exception E)
{
LogException(E);
}
return null;
}
public override Task<bool> GetAgentOnlineStatus(int AgentDeviceId, int? AgentUserId = null) => Task.FromResult(true);
public override Task<cF4sdAgentScript> GetQuickActionOfAgent(int ScriptId) => Task.FromResult(new cF4sdAgentScript() { Id = ScriptId, Name = "AgentScript", Type = enumAgentScriptType.user, UserPermissionRequired = false });