SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/custom-widgets/person-name-directive.js

271 lines
13 KiB
JavaScript

"use strict";
/**
* Created by etang
*/
(function () {
'use strict';
angular.module('customWidgetsModule')
.directive('personName', ["customFieldLinkFunction", "createTicketModel", "events", "objectValueMapperService", "permissionModel", "roles", "$modal", "$rootScope", "systemAlertService", "i18nService", "$timeout", "ticketModel", "configurationModel", function (customFieldLinkFunction, createTicketModel, events, objectValueMapperService, permissionModel, roles, $modal, $rootScope, systemAlertService, i18nService, $timeout, ticketModel, configurationModel) {
'ngInject';
return {
restrict: 'E',
replace: true,
require: '?ngModel',
scope: {
data: '=',
context: '=',
isEditable: '=',
isNew: '='
},
templateUrl: 'views/custom-widgets/person-name.html',
controller: ["$scope", function ($scope) {
$scope.options = {
typeaheadFocusFirst: true
};
if (permissionModel.hasRole(roles.ITSM_PEOPLE_USER_ROLE)) {
$scope.options.typeaheadFocusFirst = false;
}
}],
link: function (scope) {
customFieldLinkFunction(scope);
scope.showMailstopOnPersoncard = configurationModel.showMailstopOnPersoncard;
scope.showPhoneNumOnPersonCard = configurationModel.showPhoneNumOnPersonCard;
scope.state = {
dataLoading: false
};
var isContactWidget = scope.data.name === 'contact';
if (scope.data.value && !scope.data.value.fullName && scope.data.value.firstName) {
scope.data.value.fullName = scope.data.value.firstName + ' ' + scope.data.value.lastName;
}
var members = [];
if (scope.data.members) {
_.forEach(scope.data.members, function (member) {
members.push(member.name);
});
}
var originaldata = _.cloneDeep(scope.data.value), valueHistory = [scope.data.value];
var modalScope;
scope.customerCompany = "";
scope.validate = function () {
if (typeof (scope.data.value) !== 'object') {
scope.data.value = '';
}
};
scope.update = function ($model) {
if (scope.data.name === 'requestedFor') {
return systemAlertService.modal({
title: i18nService.getLocalizedString('create.change.setRequestedForLocation.title'),
text: i18nService.getLocalizedString('create.change.setRequestedForLocation.text'),
buttons: [
{
text: i18nService.getLocalizedString('common.button.yes'),
data: true
},
{
text: i18nService.getLocalizedString('common.button.no'),
data: false
}
]
}).result.then(function (data) {
if (data) {
updateValue($model);
}
});
}
else {
updateValue($model);
}
};
function updateValue($model) {
var personData = scope.data.value;
if ($model.isEmptyResult) {
if (!modalScope) {
modalScope = $rootScope.$new();
modalScope.isContactCreateAction = isContactWidget;
}
var modalInstance = $modal.open({
templateUrl: 'views/person/create-person.html',
controller: 'createPersonController',
windowClass: 'modal_full-content',
backdrop: false,
keyboard: false,
scope: modalScope
});
modalInstance.result.then(function (data) {
if (!_.isEmpty(data)) {
updateWidgetValue(data);
}
});
}
else {
updateWidgetValue(personData);
}
}
scope.$on(events.AFTER_SAVED_CHANGES, function () {
originaldata = _.cloneDeep(scope.data.value);
});
scope.$on(events.DISCARD_CHANGES, function () {
scope.data.value = _.cloneDeep(originaldata);
});
scope.clear = function () {
scope.data.value = "";
if (scope.data.name === 'customer') {
if (scope.context.selectedCompany) {
scope.context.selectedCompany = "";
}
objectValueMapperService.setValueByFieldName('company', "");
scope.$emit(events.FIELD_VALUE_CHANGE, {
name: 'company'
});
objectValueMapperService.setValueByFieldName('customerCompany', "");
scope.$emit(events.FIELD_VALUE_CHANGE, {
name: 'customerCompany'
});
objectValueMapperService.setByProperty(scope.context.type + 'Template', 'isReadOnly', true);
}
scope.data.previousValue = valueHistory.pop();
valueHistory.push(scope.data.value);
scope.$emit(events.WIDGET_VALUE_CHANGE, {
fieldName: scope.data.name,
memberName: members
});
};
scope.getListPersonsByCompany = function (term) {
scope.state.dataLoading = true;
var company = null;
if (scope.data.name !== 'contact') {
company = scope.data.value && scope.data.value.company ? scope.data.value.company.name : '';
if (!company) {
company = objectValueMapperService.getValueByFieldName('company')
|| objectValueMapperService.getValueByFieldName('customerCompany');
}
}
return createTicketModel.getPersonsByCompany(term, company).then(function (response) {
var persons = response.items;
scope.exceedsChunkSizePerson = response.exceedsChunkSize;
scope.isTooltipOpenPerson = true;
$timeout(function () {
scope.isTooltipOpenPerson = false;
}, 10000);
if (permissionModel.hasRole(roles.ITSM_PEOPLE_USER_ROLE)) {
response.items.unshift({
isEmptyResult: true,
isCreateContactAction: isContactWidget
});
}
return persons;
}).finally(function () {
scope.state.dataLoading = false;
});
};
scope.onInputFocusBlur = function () {
scope.isTooltipOpenPerson = false;
};
function updateWidgetValue(data) {
scope.data.value = data;
scope.data.previousValue = valueHistory.pop();
valueHistory.push(scope.data.value);
scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name, memberName: members });
if (scope.data.name === 'customer') {
if (scope.data.value.company && scope.data.value.company.name) {
scope.context.selectedCompany = scope.data.value.company.name;
if (scope.context.type !== 'workorder') {
getIncidentRulesByCompany();
}
objectValueMapperService.setValueByFieldName('company', scope.data.value.company.name);
scope.$emit(events.FIELD_VALUE_CHANGE, { name: 'company' });
scope.$emit(events.FIELD_VALUE_CHANGE, { name: 'customerCompany' });
if (!objectValueMapperService.getFieldByName('locationCompany')) {
scope.context.locationCompany = {
name: scope.context.selectedCompany
};
}
}
}
else if (scope.data.name === 'requestedFor') {
if (scope.data.value.company && scope.data.value.company.name) {
scope.context.company = _.cloneDeep(scope.data.value.company);
}
if (scope.context.type == 'change') {
$rootScope.$broadcast(events.RELOAD_RISK_QUESTION);
}
}
}
function getIncidentRulesByCompany() {
if (scope.customerCompany !== scope.context.selectedCompany) {
scope.customerCompany = scope.context.selectedCompany;
ticketModel.getIncidentRules(scope.customerCompany).then(function (data) {
scope.context.serviceCIRequired = data.serviceCIRequired == "true" ? true : false;
scope.context.CIRequiredOnResolved = data.CIRequiredOnResolved == "true" ? true : false;
scope.context.applyCognitiveForSupportGroup = data.applyCognitiveForSupportGroup;
scope.$emit(events.COMPANY_VALUE_CHANGED);
});
}
}
scope.onValueChange = function () {
if (scope.data.value.firstName && scope.data.value.lastName) {
scope.data.value.fullName = scope.data.value.firstName + ' ' + scope.data.value.lastName;
}
scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name, memberName: members });
};
scope.$watch('data.setValueFlag', function (value) {
if (value !== '#$#' && value) {
if (!value.id && value.loginId) {
value.id = value.loginId;
}
scope.data.value = value;
scope.onValueChange();
scope.data.setValueFlag = '#$#';
}
});
function handleDiscardChanges() {
scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name, action: 'cancel' });
}
scope.$on(events.DISCARD_CHANGES, handleDiscardChanges);
scope.$on('$destroy', function () {
if (modalScope && !modalScope.$$destroyed) {
modalScope.$destroy();
}
});
}
};
}])
.directive('setView', function () {
return {
require: 'ngModel',
scope: {
setView: '@'
},
link: function (scope, elem, attr, ngModel) {
ngModel.$formatters.push(function (value) {
if (value && value.fullName) {
return value.fullName;
}
else if (value && value.firstName && value.lastName) {
return (value.firstName + ' ' + value.lastName);
}
else {
return "";
}
});
scope.onValueChange = function (events) {
if (scope.data.value.firstName && scope.data.value.lastName) {
scope.data.value.fullName = scope.data.value.firstName + ' ' + scope.data.value.lastName;
}
scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name });
};
scope.$watch('data.setValueFlag', function (value) {
if (value !== '#$#' && value) {
if (!value.id && value.loginId) {
value.id = value.loginId;
}
scope.data.value = value;
scope.onValueChange();
scope.data.setValueFlag = '#$#';
}
});
}
};
});
}());