122 lines
6.5 KiB
JavaScript
122 lines
6.5 KiB
JavaScript
"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 = '#$#';
|
|
}
|
|
});
|
|
}
|
|
};
|
|
}]);
|
|
}());
|