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