"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); } }; }]); })();