SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/common/foundation/foundation-service.js

92 lines
4.0 KiB
JavaScript

"use strict";
/**
* Created by viktor.shevchenko on 2/13/2015.
*/
(function () {
'use strict';
angular.module('myitsmApp')
.service('foundationService', ['configurationModel', 'searchService', function (configurationModel, searchService) {
this.getFieldData = function (params) {
return searchService.getFoundationItems(params); //todo: introduce caching
};
this.buildControls = function (type, options) {
var config = _.cloneDeep(configurationModel.get('foundation.' + type));
_.merge(config.fdFields, options);
_.forEach(config.fdFields, function (fdField) {
if (fdField.connected) {
fdField.connected = config.fdFields[fdField.connected];
}
});
config.fdFields = _.sortBy(config.fdFields, 'index');
return config;
};
this.prepareSearchOptions = function (fields, field) {
var searchOptions = {}, dependantFields = _.filter(fields, function (item) {
return item.index < field.index;
});
_.forEach(dependantFields, function (item) {
if (item.value) {
searchOptions[item.searchOptionName] = item.value;
}
});
return _.isEmpty(searchOptions) ? angular.noop() : searchOptions;
};
this.setDependantFieldValues = function (fields, field, newValue) {
_.forEach(fields, function (item) {
item.value = newValue.attributeMap[item.searchOptionName] ? newValue.attributeMap[item.searchOptionName] : '';
});
};
this.resetFurtherFieldValues = function (fields, index) {
_.forEach(fields, function (item) {
if (item.index > index) {
item.value = null;
item.id = null;
}
});
};
this.resetFieldValue = function (fields, field) {
field.value = null; //backend requires value to be null if it doesn't exist
field.id = null;
if (field.connected && field.connected.name) {
field.connected.value = '';
field.connected.id = '';
}
this.resetFurtherFieldValues(fields, field.index);
};
this.collectValues = function (fdControl) {
var prepareObjectMap = {
site: prepareSiteObject,
organization: prepareOrganizationObject
};
return prepareObjectMap[fdControl.label](fdControl.fdFields);
};
function prepareSiteObject(fields) {
var fieldsDict = _.keyBy(fields, 'name'), map = {
name: 'site',
region: 'region',
siteGroup: 'siteGroup',
companyName: 'company'
}, result = {};
_.forEach(map, function (item, key) {
result[key] = fieldsDict[item].value;
if (key === 'name') {
//special handling for site because in some cases, such as editing Change location, backend also requires siteId to be sent
result.siteId = fieldsDict[item].id;
}
});
return result;
}
function prepareOrganizationObject(fields) {
var fieldsDict = _.keyBy(fields, 'name'), map = {
organization: 'organization',
department: 'department',
companyName: 'company'
}, result = {};
_.forEach(map, function (item, key) {
result[key] = fieldsDict[item].value;
});
return result;
}
}]);
})();