SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/console/console-preset-model.js

187 lines
12 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('consoleModule')
.factory('consolePresetModel', ['ticketConsoleModel', 'knowledgeConsoleModel', 'assetConsoleModel',
function (ticketConsoleModel, knowledgeConsoleModel, assetConsoleModel) {
var consolePresetModel = {}, advancedFilters = ['cpu', 'operatingSystem', 'processor', 'rack'], consoleModel = null;
consolePresetModel.consoleType = 'ticket';
consolePresetModel.selectedPreset = {};
function getFilterConfigOfSelectedPreset() {
consolePresetModel.filterConfig = _.reject(consolePresetModel.filterConfig, function (filter) {
filter.expanded = false;
return (filter.type === 'custom');
});
var customFilterDict = [];
_.each(_.cloneDeep(consoleModel.customColumnsObjs), function (obj) {
if (consolePresetModel.selectedPreset && consolePresetModel.selectedPreset.columnValue
&& consolePresetModel.selectedPreset.columnValue.hasOwnProperty(obj.attributeName)) {
var optionsObj = obj.options || obj.oldFields.options;
if (optionsObj) {
obj = consoleModel.formatFilterOptionForCustomField(_.cloneDeep(optionsObj), obj);
if (_.isUndefined(_.find(consolePresetModel.filterConfig, { name: obj.name }))) {
obj.expanded = false;
customFilterDict.push(obj);
}
}
}
});
consolePresetModel.filterConfig = _.sortBy(consolePresetModel.filterConfig.concat(customFilterDict), 'name');
}
consolePresetModel.init = function (consoleType, selectedPreset) {
consolePresetModel.selectedPreset = selectedPreset;
consolePresetModel.consoleType = consoleType;
switch (consoleType) {
case EntityVO.TYPE_TICKET:
consoleModel = ticketConsoleModel;
break;
case EntityVO.TYPE_KNOWLEDGE:
consoleModel = knowledgeConsoleModel;
break;
case EntityVO.TYPE_ASSET:
consoleModel = assetConsoleModel;
break;
}
consolePresetModel.filterConfig = _.cloneDeep(consoleModel.filterConfig);
if (consoleType === EntityVO.TYPE_TICKET) {
getFilterConfigOfSelectedPreset();
}
consolePresetModel.filterPreferenceGroup = consoleModel.filterPreferenceGroup;
consolePresetModel.filterDict = _.keyBy(consolePresetModel.filterConfig, 'name');
consolePresetModel.applyFilterSet(selectedPreset.value);
consolePresetModel.consoleColumns = angular.copy(_.sortBy(consoleModel.columnsConfig, 'name'));
if (consoleType === EntityVO.TYPE_TICKET) {
var columnFilterOptions = _.cloneDeep(consoleModel.ticketTypeFilter.options);
var ticketTypesPermitted = _.map(columnFilterOptions, 'name');
_.remove(consolePresetModel.consoleColumns, function (column) {
if (!angular.isUndefined(column.ticketType) && _.intersection(column.ticketType, ticketTypesPermitted).length == 0) {
return true;
}
});
}
consolePresetModel.advanceSerachQuery = _.remove(consolePresetModel.selectedPreset.value, function (item) {
return item.filter === 'advanceSearchQuery';
});
consolePresetModel.selectedFilters = _.map(consolePresetModel.selectedPreset.value, function (item) {
var option = _.find(consolePresetModel.filterDict[item.filter] && consolePresetModel.filterDict[item.filter].options, { name: item.option });
if (!option && item.type === 'dynamic') {
option = item.realOption;
consolePresetModel.filterDict[item.filter].options.push(item.realOption);
}
else if (!option) {
var optionsObj = obj.options || obj.oldFields.options;
if (optionsObj) {
}
var consoleColumn = _.find(consoleModel.customColumnsObjs, { name: item.filter });
if (consoleColumn) {
consoleColumn = _.cloneDeep(consoleColumn);
consoleColumn = consoleModel.formatFilterOptionForCustomField(_.cloneDeep(consoleColumn.options || consoleColumn.oldFields.options), consoleColumn);
if (_.isUndefined(_.find(consolePresetModel.filterConfig, { name: consoleColumn.name }))) {
consoleColumn.expanded = false;
consolePresetModel.filterConfig.push(consoleColumn);
consolePresetModel.filterConfig = _.sortBy(consolePresetModel.filterConfig, 'name');
consolePresetModel.filterDict = _.keyBy(consolePresetModel.filterConfig, 'name');
}
option = _.find(consoleColumn.options, { name: item.option });
}
}
option.active = true;
var filterName = option.filterName || option.criteria.name, filter = consolePresetModel.filterDict[filterName];
option.filterName = filter.name;
option.filterLabel = filter.label;
return option;
});
var cols = [], defaultVisibleColumns = _.filter(consoleModel.columnsConfig, { 'visible': true });
cols = angular.copy(_.filter(consoleModel.columnsConfig, function (item) {
if (consolePresetModel.selectedPreset.columnValue) {
var presetColumn = consolePresetModel.selectedPreset.columnValue[item.name];
if (presetColumn) {
item.order = presetColumn.order;
return item;
}
}
}));
//check if preset was created before 1.5SP1
//accordingly loop and add columns from default column set to keep behavior consistent
if (consolePresetModel.selectedPreset.columnValue && !consolePresetModel.selectedPreset.columnValue.newColumnType && defaultVisibleColumns.length) {
_.forEach(defaultVisibleColumns, function (item) {
if (!_.find(cols, { name: item.name })) {
var columnData = angular.copy(item);
cols.push(columnData);
}
});
}
consolePresetModel.gridColumns = _.sortBy(cols, 'order');
_.forEach(consolePresetModel.consoleColumns, function (column) {
if (_.isObject(column)) {
column.visible = _.find(consolePresetModel.gridColumns, { name: column.name }) ? true : false;
}
});
};
consolePresetModel.getUserSavedPreset = function (presetName) {
return _.find(consoleModel.userSavedFilterPresets, { name: presetName })
|| _.find(consoleModel.userSavedColumnPresets, { name: presetName });
};
consolePresetModel.setFilterPresetData = function (prop, value) {
_.set(_.find(consoleModel.userSavedFilterPresets, { id: consolePresetModel.selectedPreset.id }), prop, value);
_.set(_.find(consoleModel.userSavedPresets, { id: consolePresetModel.selectedPreset.id }), prop, value);
};
consolePresetModel.setColumnPresetData = function (prop, value) {
_.set(_.find(consoleModel.userSavedColumnPresets, { id: consolePresetModel.selectedPreset.columnId }), prop, value);
};
consolePresetModel.updateColumnConfig = function (columnsToUpdate, presetName, id) {
return consoleModel.updateColumnConfig(columnsToUpdate, presetName, id);
};
consolePresetModel.applyFilterSet = function (filterSet) {
_.forEach(filterSet, function (item) {
if (consolePresetModel.filterDict[item.filter]) {
var option = _.find(consolePresetModel.filterDict[item.filter].options, { name: item.option });
if (!option && item.type === 'dynamic') {
option = item.realOption;
if (consolePresetModel.advancedFilterType(option)) {
option.subtype = 'range';
consolePresetModel.filterDict[item.filter].options[0] = option;
}
else {
var newOption = _.find(consolePresetModel.filterDict[item.filter].options, function (o) {
if (o.criteria && option.criteria) {
return _.isEqual(o.criteria, option.criteria);
}
});
if (newOption) { //check for localized option name
option = newOption;
}
else {
consolePresetModel.filterDict[item.filter].options.push(option);
}
}
}
if (angular.isObject(option)) {
if (item.type === 'dynamic' && consolePresetModel.advancedFilterType(option)) {
_.forEach(consolePresetModel.filterDict[item.filter].criteriaKeys, function (criteriaKey) {
_.forEach(option.criteria.value, function (val) {
if (!_.isUndefined(val[criteriaKey.name])) {
consolePresetModel.filterDict[item.filter].selectiveClearFilters = true;
criteriaKey.active = true;
criteriaKey.fromPreset = true;
criteriaKey.searchText = val[criteriaKey.name].value;
criteriaKey.selectedValue = val[criteriaKey.name].value;
}
});
});
}
option.active = true;
}
}
});
};
consolePresetModel.advancedFilterType = function (filterOption) {
return filterOption.criteria && filterOption.criteria.name !== 'rack' ? _.includes(advancedFilters, filterOption.criteria.name) : false;
};
consolePresetModel.updateGridData = function () {
consoleModel.getItemList();
};
return consolePresetModel;
}]);
}());