395 lines
23 KiB
JavaScript
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;
|
|
}
|
|
]);
|
|
}());
|