230 lines
11 KiB
JavaScript
230 lines
11 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", function (customFieldLinkFunction, createTicketModel, events, objectValueMapperService, permissionModel, roles, $modal, $rootScope, systemAlertService, i18nService, $timeout) {
|
|
'ngInject';
|
|
return {
|
|
restrict: 'E',
|
|
replace: true,
|
|
require: '?ngModel',
|
|
scope: {
|
|
data: '=',
|
|
context: '=',
|
|
isEditable: '=',
|
|
isNew: '='
|
|
},
|
|
templateUrl: 'views/custom-widgets/person-name.html',
|
|
link: function (scope) {
|
|
customFieldLinkFunction(scope);
|
|
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.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) {
|
|
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;
|
|
});
|
|
};
|
|
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;
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
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 = '#$#';
|
|
}
|
|
});
|
|
}
|
|
};
|
|
});
|
|
}());
|