"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; } ]); }());