aktueller stand
This commit is contained in:
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user