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