SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/common/expression-engine/function-evaluator-service.js

111 lines
4.6 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('myitsmApp').service('functionEvaluatorService', ['userModel', 'objectValueMapperService', function (userModel, objectValueMapperService) {
var userData;
function validateDatePart(part) {
if (part.toLowerCase() === 'm') {
part = 'M';
}
else if (part.toLowerCase() === 'mn') {
part = 'm';
}
else {
part = part.toLowerCase();
}
return part;
}
userModel.getFullCurrentUserData().then(function (data) {
userData = data;
});
var supportedFunctions = {
'NOOP': function () {
return angular.noop;
},
'REPLACE': function (str, substr, newSubStr) {
if (arguments.length === 3) {
return str.replace(substr, newSubStr);
}
},
'DATEADD': function (part, duration, date) {
if (arguments.length === 3) {
return moment(date).add(duration, validateDatePart(part));
}
},
'DATEDIFF': function (part, date1, date2) {
if (arguments.length === 3) {
return moment(date1).diff(moment(date2), validateDatePart(part));
}
},
'HASROLE': function (role) {
if (arguments.length === 1 && userData.roles) {
var roleId = parseInt(role), isRole = false;
_.forEach(userData.roles, function (roles) {
if (isRole) {
return;
}
isRole = !!_.find(roles, { id: roleId });
});
return isRole;
}
else {
return false;
}
},
'INGROUP': function (group) {
if (arguments.length === 1) {
var groupId = parseInt(group);
return !_.isUndefined(_.find(userData.groups, { id: groupId }));
}
else {
return false;
}
},
'SELECTIONINDEX': function (val, options) {
var evaluatedVal = -1;
_.forEach(options, function (option) {
if (val === option.name) {
evaluatedVal = option.index;
}
});
return evaluatedVal;
},
'SELECTIONLABEL': function (val, options) {
var evaluatedVal = val;
_.forEach(options, function (option) {
if (val === option.name) {
evaluatedVal = option.label;
}
});
return evaluatedVal;
},
'ISREQUIRED': function (fieldName) {
if (arguments.length === 1 && fieldName !== '') {
return objectValueMapperService.getFieldPropertyValue(fieldName, 'isRequired');
}
},
'ISREADONLY': function (fieldName) {
if (arguments.length === 1 && fieldName !== '') {
return objectValueMapperService.getFieldPropertyValue(fieldName, 'isReadOnly');
}
},
'ISHIDDEN': function (fieldName) {
if (arguments.length === 1 && fieldName !== '') {
return objectValueMapperService.getFieldPropertyValue(fieldName, 'isHidden');
}
},
'ONCHANGE': function (fieldName) {
var fieldChanged = objectValueMapperService.getProviderActionFieldName(fieldName);
if (arguments.length === 1 && fieldName !== '' && fieldName === fieldChanged) {
return true;
}
}
};
this.execute = function (functionName, parameters) {
if (!_.isUndefined(supportedFunctions[functionName])) {
return supportedFunctions[functionName].apply(this, parameters);
}
};
}]);
})();