SmartIT_Extensions/BMC/smart-it-full-helix/components/chat/chat-swarm.js

395 lines
23 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('myitsmApp')
.factory('chatSwarm', ['$http', '$timeout', '$filter', '$q', 'relationModel', 'chatService', 'consoleService', 'userModel', 'personModel', 'searchService', 'ticketService', 'systemAlertService', 'personService', 'ticketModel', 'assetModel', 'utilityFunctions',
function ($http, $timeout, $filter, $q, relationModel, chatService, consoleService, userModel, personModel, searchService, ticketService, systemAlertService, personService, ticketModel, assetModel, utilityFunctions) {
var chatSwarm = {};
chatSwarm.processChatMessage = function (messageText, chatWindow) {
var deferred = $q.defer();
var response = "";
switch (messageText) {
case EntityVO.CHATOPS_DETAILS:
ticketModel.getTicket(chatWindow.parent.id, 'incident').then(function (result) {
var ticketInfo = result;
ticketInfo.chatWindowParentId = chatWindow.parent.id;
ticketInfo.chatWindowParentType = chatWindow.parent.type;
response = (EntityVO.CHATOPS_DETAILS + JSON.stringify(ticketInfo));
deferred.resolve(response);
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
break;
case EntityVO.CHATOPS_KNOWLEDGE:
ticketModel.getTicket(chatWindow.parent.id, 'incident').then(function (result1) {
var summary = result1.summary;
var filters = { "types": ["knowledge"], "search_text": summary };
searchService.getGlobalSearchResults(summary, filters).then(function (resultK) {
relationModel.getRelations(chatWindow.parent.id, 'incident').then(function (resultKA) {
var json = resultK.items[0].results;
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < resultKA.length; j++) {
if (json[i].id == resultKA[j].id) {
json[i].related = 'true';
break;
}
else {
json[i].related = 'false';
}
}
}
json = sortPinnedItems(json);
var knowledgeArticles = JSON.stringify(json);
var json1 = { "KA": knowledgeArticles, "chatWindowParentId": chatWindow.parent.id, "chatWindowParentType": chatWindow.parent.type };
resultK = (EntityVO.CHATOPS_KNOWLEDGE + JSON.stringify(json1));
deferred.resolve(resultK);
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
break;
case EntityVO.CHATOPS_SIMILARINCIDENTS:
ticketModel.getTicket(chatWindow.parent.id, 'incident').then(function (result1) {
var summary = result1.summary;
var filters = { "types": ["incident"], "search_text": summary };
searchService.getGlobalSearchResults(summary, filters).then(function (result) {
relationModel.getRelations(chatWindow.parent.id, 'incident').then(function (resultKA) {
var json = result.items[0].results;
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < resultKA.length; j++) {
if (json[i].id == resultKA[j].id) {
json[i].related = "true";
break;
}
else {
json[i].related = "false";
}
}
}
json = sortPinnedItems(json);
var incidents = JSON.stringify(json);
var json1 = { "incidents": incidents, "chatWindowParentId": chatWindow.parent.id, "chatWindowParentType": chatWindow.parent.type };
result = (EntityVO.CHATOPS_INCIDENT + JSON.stringify(json1));
deferred.resolve(result);
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
break;
case EntityVO.CHATOPS_SWARM:
ticketModel.getTicket(chatWindow.parent.id, 'incident').then(function (result1) {
var summary = result1.summary;
var filters = { "types": ["incident"], "search_text": summary };
searchService.getGlobalSearchResults(summary, filters).then(function (result) {
var json = result.items[0].results;
var names = [];
for (var i = 0; i < json.length; i++) {
if (json[i].hasOwnProperty("additionalInformation") && json[i].additionalInformation.hasOwnProperty("assignee")
&& json[i].additionalInformation.assignee.hasOwnProperty("fullName")) {
names[names.length] = json[i].additionalInformation.assignee.fullName;
}
}
var namesSet1 = new Set(names);
var namesSet = Array.from(namesSet1);
var participants = [];
var count = 0;
var successFunction = function (person) {
participants[count++] = person;
if (participants.length == namesSet.length) {
var fullData = { "participants": JSON.stringify(participants), "chatWindowId": chatWindow.id };
response = (EntityVO.CHATOPS_SWARM + JSON.stringify(fullData));
deferred.resolve(response);
}
};
var errFunction = function (err) {
participants[count++] = "Not Found";
if (participants.length == namesSet.length) {
var fullData = { "participants": JSON.stringify(participants), "chatWindowId": chatWindow.id };
response = (EntityVO.CHATOPS_SWARM + JSON.stringify(fullData));
deferred.resolve(response);
}
};
for (var p = 0; p < namesSet.length; p++) {
var name = namesSet[p].split(" ");
personModel.getListOfPersonByName(name[0], name[1]).then(successFunction, errFunction);
}
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
}, function (err) {
response = (EntityVO.CHATOPS_ERROR);
deferred.resolve(response);
});
break;
case EntityVO.CHATOPS_TOOLS:
var data = { "chatWindowId": chatWindow.id };
response = (EntityVO.CHATOPS_TOOLS + JSON.stringify(data));
deferred.resolve(response);
break;
default:
response = (messageText);
deferred.resolve(response);
}
function sortPinnedItems(itemsList) {
var pinnedItems = [];
itemsList = itemsList.filter(function (value) {
if (value.related === 'true') {
pinnedItems.push(value);
}
return value.related !== 'true';
});
return pinnedItems.concat(itemsList);
}
return deferred.promise;
};
function getPwaIFrame() {
return document.getElementsByClassName('app__pwa-iframe') && document.getElementsByClassName('app__pwa-iframe').length ? document.getElementsByClassName('app__pwa-iframe')[0].contentWindow : null;
}
function refreshPWARelations() {
var iframeContent = getPwaIFrame();
if (iframeContent) {
var domain = localStorage.getItem('pwaDomain');
var parcelData = { eventType: 'RefreshRecommendedKA', eventData: {} };
utilityFunctions.windowPostMessage(iframeContent, parcelData, domain);
}
}
chatSwarm.linkKnowledgeArticles = function (uuid, type, chatWindowParentId) {
var deferred = $q.defer();
var context = { "uuid": chatWindowParentId, "type": "incident" };
var relation = [{ "id": uuid, "relationshipType": "relatedto", "tag": "resource", "type": type }];
relationModel.addRelation(context, relation).then(function (result) {
refreshPWARelations();
}, function (err) {
});
return deferred.promise;
};
chatSwarm.unlinkKnowledgeArticles = function (uuid, type, chatWindowParentId) {
var deferred = $q.defer();
var context = { "parentId": chatWindowParentId, "parentType": "incident" };
var relation = [{ "id": uuid, "relationshipType": "relatedto", "tag": "resource", "type": type }];
relationModel.removeRelation(context, relation).then(function (result) {
refreshPWARelations();
}, function (err) {
});
return deferred.promise;
};
chatSwarm.checkIfJson = function (str) {
if (str.length == 0) {
return false;
}
try {
JSON.parse(str);
if (!isNaN(str))
return false;
}
catch (e) {
return false;
}
return true;
};
chatSwarm.checkIfChatOpsMessage = function (message) {
if (message != null && message.startsWith(EntityVO.CHATOPS_DETAILS) && chatSwarm.checkIfJson(message.substring(8))) {
return true;
}
else if (message != null && message.startsWith(EntityVO.CHATOPS_INCIDENTDETAILS) && chatSwarm.checkIfJson(message.substring(16))) {
return true;
}
else if (message != null && message.startsWith(EntityVO.CHATOPS_KNOWLEDGE) && chatSwarm.checkIfJson(message.substring(10))) {
return true;
}
else if (message != null && message.startsWith(EntityVO.CHATOPS_INCIDENT) && chatSwarm.checkIfJson(message.substring(9))) {
return true;
}
else if (message != null && message.startsWith(EntityVO.CHATOPS_LINKKNOWLEDGE) && chatSwarm.checkIfJson(message.substring(14))) {
return true;
}
else if (message != null && message.startsWith(EntityVO.CHATOPS_TOOLS) && chatSwarm.checkIfJson(message.substring(2))) {
return true;
}
else if (message != null && message.startsWith(EntityVO.CHATOPS_ERROR)) {
return true;
}
return false;
};
chatSwarm.formatChatMessage = function (newMessage, message, chatWindow, authorProfile, fromHistory) {
if (message.hasOwnProperty("text") && (message.text == (EntityVO.CHATOPS_DETAILS) || message.text == (EntityVO.CHATOPS_KNOWLEDGE)
|| message.text == (EntityVO.CHATOPS_SIMILARINCIDENTS))) {
newMessage = new ChatMessageVO()
.build({
text: message.text, author: authorProfile, chatWindow: chatWindow, type: message.type || 'chat',
created: message.created || "", eventType: message.eventType
});
}
else if (message.hasOwnProperty("text") && message.text.startsWith(EntityVO.CHATOPS_DETAILS)) {
var type = 'incidentDetails';
var messageText = message.text.substring(8);
if (!chatSwarm.checkIfJson(messageText)) {
newMessage = new ChatMessageVO()
.build({
text: message.text, author: authorProfile, chatWindow: chatWindow, type: message.type || 'chat',
created: message.created || "", eventType: message.eventType
});
}
else {
try {
var jsonIncidentDetails = JSON.parse(messageText);
newMessage = new ChatMessageDataVO()
.build({
created: message.created,
data: jsonIncidentDetails,
author: authorProfile,
type: message.type || type,
chatWindow: chatWindow
});
}
catch (e) {
newMessage = new ChatMessageVO()
.build({
text: "",
author: authorProfile,
chatWindow: chatWindow,
type: message.type || 'error',
created: message.created || "",
eventType: message.eventType
});
}
}
}
else if (message.hasOwnProperty("text") && message.text.startsWith(EntityVO.CHATOPS_KNOWLEDGE)) {
var messageTextKnowledge = message.text.substring(10);
if (!chatSwarm.checkIfJson(messageTextKnowledge)) {
newMessage = new ChatMessageVO()
.build({
text: message.text, author: authorProfile, chatWindow: chatWindow, type: message.type || 'chat',
created: message.created || "", eventType: message.eventType
});
}
else {
try {
var jsonFull = JSON.parse(messageTextKnowledge);
var json = JSON.parse(jsonFull.KA);
for (var k = 0; k < json.length; k++) {
json[k].title = json[k].title.split('[').join('');
json[k].title = json[k].title.split(']').join('');
}
jsonFull.KA = json;
newMessage = new ChatMessageDataVO()
.build({
created: message.created,
data: jsonFull,
author: authorProfile,
type: message.type || 'knowledgeResourceDetails',
fromHistory: fromHistory,
chatWindow: chatWindow
});
}
catch (e) {
newMessage = new ChatMessageVO()
.build({
text: "",
author: authorProfile,
chatWindow: chatWindow,
type: message.type || 'error',
created: message.created || "",
eventType: message.eventType
});
}
}
}
else if (message.hasOwnProperty("text") && message.text.startsWith(EntityVO.CHATOPS_INCIDENT)) {
var messageTextIncident = message.text.substring(9);
if (!chatSwarm.checkIfJson(messageTextIncident)) {
newMessage = new ChatMessageVO()
.build({
text: message.text, author: authorProfile, chatWindow: chatWindow, type: message.type || 'chat',
created: message.created || "", eventType: message.eventType
});
}
else {
try {
var jsonIncidentFull = JSON.parse(messageTextIncident);
var jsonIncident = JSON.parse(jsonIncidentFull.incidents);
for (var incident = 0; incident < jsonIncident.length; incident++) {
jsonIncident[incident].title = jsonIncident[incident].title.split('[').join('');
jsonIncident[incident].title = jsonIncident[incident].title.split(']').join('');
}
for (var i = 0; i < jsonIncident.length; i++) {
if (jsonIncident[i].id == jsonIncidentFull.chatWindowParentId) {
jsonIncident.splice(i, 1);
}
}
jsonIncidentFull.incidents = jsonIncident;
newMessage = new ChatMessageDataVO()
.build({
created: message.created,
data: jsonIncidentFull,
author: authorProfile,
type: message.type || 'similarIncidentDetails',
fromHistory: fromHistory,
chatWindow: chatWindow
});
}
catch (e) {
newMessage = new ChatMessageVO()
.build({
text: "",
author: authorProfile,
chatWindow: chatWindow,
type: message.type || 'error',
created: message.created || "",
eventType: message.eventType
});
}
}
}
else if (message.hasOwnProperty("text") && message.text.startsWith(EntityVO.CHATOPS_TOOLS)) {
if (message.text.substring(2) !== "" && chatSwarm.checkIfJson(message.text.substring(2))) {
var data = { "chatWindowId": JSON.parse(message.text.substring(2)).chatWindowId };
newMessage = new ChatMessageDataVO()
.build({
text: "/?",
author: authorProfile,
chatWindow: chatWindow, type: message.type || 'tools',
created: message.created || "", eventType: message.eventType,
data: data,
fromHistory: fromHistory
});
}
}
else if (message.text.startsWith(EntityVO.CHATOPS_ERROR)) {
message.text = message.text.substring(6);
newMessage = new ChatMessageVO()
.build({
text: "",
author: authorProfile,
chatWindow: chatWindow,
type: message.type || 'error',
created: message.created || "",
eventType: message.eventType
});
}
return newMessage;
};
return chatSwarm;
}
]);
}());