SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/custom-widgets/support-group-field-directi...

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 = '#$#';
}
});
}
};
}]);
}());