111 lines
4.6 KiB
JavaScript
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);
|
|
}
|
|
};
|
|
}]);
|
|
})();
|