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