SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/live-chat/live-chat-service.js

127 lines
6.2 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('liveChatModule')
.service('liveChatService', ['$q', '$log', 'events', 'ticketModel', 'ticketActionService', 'userModel', 'searchService',
function ($q, $log, events, ticketModel, ticketActionService, userModel, searchService) {
this.assignToMe = function (role, ticket, chatSession, scope) {
var assigneeRole = role;
var customerCompany = ticket.customer.company.name;
if (role === 'ticketassignee') {
if (ticket.type === EntityVO.TYPE_WORKORDER) {
assigneeRole = 'workorderassignee';
}
else {
assigneeRole = '';
}
}
var promises = [
ticketModel.getTicketAssigneePersons(ticket.type, assigneeRole),
searchService.getLiveAgentDefaultSupportGroup(customerCompany)
];
$q.all(promises).then(function (data) {
var persons = data[0];
persons = _.uniqBy(persons.results, function (person) {
return person.loginId && person.supportGroupId;
});
var defaultSupportGroupForCompany = data[1];
var person;
if (persons.length > 1) {
_.find(persons, function (personItem) {
// see if a default SG has been defined in CTM:People form
var defaultSG = _.find(personItem.supportGroups, { isDefault: true });
if (defaultSG) {
person = personItem;
return true;
}
return false;
});
}
if (persons.length === 1) {
person = persons[0];
}
else if (!person) {
// if no default SG is found, then look for company's default SG in ES_CI:ITSM71_IncidentCreate_DefaultAssignmentByCompany
person = _.find(persons, function (person) {
if (defaultSupportGroupForCompany && defaultSupportGroupForCompany.assignedGroup === person.supportGroup
&& defaultSupportGroupForCompany.supportOrganization === person.supportOrganization
&& defaultSupportGroupForCompany.supportGroupCompany === person.company.name) {
return true;
}
return false;
});
}
if (person && person.loginId) {
updateAssignment(ticket, chatSession, scope, role, person);
}
else {
handleAssignment(ticket, chatSession, scope, role);
}
}).catch(function (error) {
$log.error('Could not assign ticket properly. ', error);
notifyAboutAssignmentUpdate(ticket, chatSession, scope);
});
};
function updateAssignment(ticket, chatSession, scope, role, person) {
var response = {};
response.assignee = {
id: person.id,
loginId: person.loginId,
fullName: person.fullName,
thumbnail: person.thumbnail,
thumbnailMime: person.thumbnailMime
};
response.group = {
id: person.supportGroupId,
name: person.supportGroup,
organization: person.organization,
company: person.company
};
completeAssignment(ticket, chatSession, response, scope, role);
}
function handleAssignment(ticket, chatSession, scope, role) {
ticket.ghostEntity = true;
ticketActionService.showAssignDialog(ticket, true, role).result.then(function (result) {
completeAssignment(ticket, chatSession, result, scope, role);
}, function (e) {
$log.error('Could not assign ticket properly. ', e, ticket);
completeAssignment(ticket, chatSession, { autoAssign: true }, scope, role);
});
}
function completeAssignment(ticket, chatSession, result, scope, role) {
if (result.autoAssign) {
clearAssignment(ticket);
}
else if (result.group) {
ticket.autoAssign = false;
ticket.assignee = result.assignee;
ticket.supportGroup = result.group || result.supportGroup;
ticket.manager = result.manager;
ticket.managerGroup = result.managerGroup;
if (result.managerAutoAssign) {
ticket.manager = {
managerAutoAssign: true
};
ticket.managerGroup = {};
}
if (ticket.type === EntityVO.TYPE_INCIDENT &&
(userModel.userId === ticket.assignee.loginId || userModel.decodedUserId === ticket.assignee.loginId)) {
ticket.status.value = 'In Progress'; //assign to me
}
}
notifyAboutAssignmentUpdate(ticket, chatSession, scope);
}
function clearAssignment(ticket) {
ticket.autoAssign = true;
ticket.assignee = {
autoAssign: true
};
ticket.supportGroup = {};
}
function notifyAboutAssignmentUpdate(ticket, chatSession, scope) {
delete ticket['ghostEntity'];
scope.$broadcast(events.TICKET_ASSIGNEES_UPDATED_FROM_BLADE, { ticket: ticket, chatSession: chatSession });
}
}]);
})();