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