"use strict"; (function () { 'use strict'; angular.module('customWidgetsModule').directive('supportGroupField', ['customFieldLinkFunction', 'events', 'searchModel', 'objectValueMapperService', '$filter', function (customFieldLinkFunction, events, searchModel, objectValueMapperService, $filter) { return { restrict: 'E', replace: true, scope: { data: '=', isEditable: '=', context: '=', isNew: '=?', editMode: '=?' }, templateUrl: 'views/custom-widgets/support-group-field.html', link: function (scope) { customFieldLinkFunction(scope); scope.state = { displayMessage: false, messageToDisplay: "", showRecommendationLink: false, loadingRecommendation: false }; scope.closeTooltip = function () { scope.state.displayMessage = false; }; scope.onFieldValueChange = function () { scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name }); }; var role = 'assignee', managerRegExp = new RegExp('manager', 'ig'); if (managerRegExp.test(scope.data.primaryKey)) { role = 'manager'; } var MESSAGE_TYPE_NO_RECOMMENDATION = "noRecommendation"; var MESSAGE_TYPE_NO_COMPANY = "noCompany"; function setCognitiveSupport(applyCognitiveValue) { if (applyCognitiveValue && (applyCognitiveValue === EntityVO.COGNITIVE_SG_APPLY_AUTO || applyCognitiveValue === EntityVO.COGNITIVE_SG_SHOW_RECOMMENDATION)) { scope.state.showRecommendationLink = true; } } setCognitiveSupport(scope.context.applyCognitiveForSupportGroup); scope.$on(events.APPLY_COGNITIVE_SG, function (events, field) { setCognitiveSupport(field.applyCognitive); }); scope.fetchRecommendations = function () { scope.state.loadingRecommendation = true; var searchText = objectValueMapperService.getValueByFieldName('summary'); var customer = objectValueMapperService.getValueByFieldName('customer'); if (!customer || !customer.company) { showMessage(MESSAGE_TYPE_NO_COMPANY); scope.state.loadingRecommendation = false; return; } var companyWithSite = { name: customer.company.name, site: customer.site }; delete companyWithSite.site.address; var locationCompany = objectValueMapperService.getValueByFieldName('locationCompany'); locationCompany = { name: locationCompany }; //TODO: ticketType and assigneeRole values should be made dynamic once applicable for other tickt types searchModel.getRecommendedSupportGroups(EntityVO.TYPE_INCIDENT, searchText, companyWithSite, locationCompany).then(function (response) { if (response.supportGroups && response.supportGroups.length) { var context = scope.context.isDraft ? scope.context : _.cloneDeep(scope.context); context.assignee = {}; context.supportGroup = response.supportGroups[0]; var assigneeRole = 'ticketassignee'; var fromAssignToMe = false; scope.$emit(events.TICKET_ASSIGNEES_UPDATED, context, false, assigneeRole, fromAssignToMe); } else { showMessage(MESSAGE_TYPE_NO_RECOMMENDATION); } }).finally(function () { scope.state.loadingRecommendation = false; }); }; function showMessage(messageType) { if (messageType === MESSAGE_TYPE_NO_RECOMMENDATION) { scope.state.messageToDisplay = $filter('i18n')('field.widget.supportgroup.noRecommendationFound'); } else if (messageType === MESSAGE_TYPE_NO_COMPANY) { scope.state.messageToDisplay = $filter('i18n')('field.widget.supportgroup.noCompanySelected'); } scope.state.displayMessage = true; setTimeout(function () { scope.state.displayMessage = false; scope.$apply(); }, 10000); } scope.openAssignBlade = function ($event) { var editMode = scope.$parent.editMode; var assignParams = { originalEvent: $event, saveSelection: !editMode, role: role }; scope.$emit(events.SHOW_ASSIGN_TICKET_BLADE, assignParams); }; scope.onValueChange = function () { scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name }); }; scope.$watch('data.setValueFlag', function (value) { if (value !== '#$#' && value) { if (!value.name && value.supportGroups) { value.name = value.supportGroups; } scope.data.value = value; scope.onValueChange(); scope.data.setValueFlag = '#$#'; } }); } }; }]); }());