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

213 lines
11 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('consoleModule')
.controller('ConsolePresetController', ['$scope', '$modalInstance', '$q', '$filter', 'consoleService', 'configurationModel', 'userModel',
'systemAlertService', 'consolePresetModel', 'events', 'i18nService',
function ($scope, $modalInstance, $q, $filter, consoleService, configurationModel, userModel, systemAlertService, consolePresetModel, events, i18nService) {
var userFilterPreset = consolePresetModel.selectedPreset;
$scope.filterPresetName = userFilterPreset.name;
$scope.consoleType = consolePresetModel.consoleType;
$scope.filterConfig = consolePresetModel.filterConfig;
$scope.consoleColumns = consolePresetModel.consoleColumns;
$scope.selectedFilters = consolePresetModel.selectedFilters;
$scope.gridColumns = consolePresetModel.gridColumns;
$scope.advanceSerachQuery = consolePresetModel.advanceSerachQuery ? consolePresetModel.advanceSerachQuery[0] : null;
$scope.isAccessibleUser = userModel.isAccessibleUser;
$scope.sortableOptions = [{
stop: function () {
consolePresetModel.gridColumns.forEach(function (column, index) {
column.order = index + 1;
});
}
}];
$scope.saveFilterCheckbox = $scope.selectedFilters.length > 0;
$scope.saveColumnCheckbox = $scope.gridColumns.length > 0;
$scope.getFilterLabel = function (filter) {
var filterLabel = '';
var filterName = '';
if (filter.filterType === "customFilter") {
filterLabel = (filter.filterLabel) ? (filter.filterLabel + ': ') : '';
filterName = (filter.label ? filter.label : filter.name);
}
else {
filterName = filter.label ? $filter('i18n')('console.filter.optionName.' + filter.label) : filter.name;
if (filter.filterLabel) {
filterLabel = $filter('i18n')('console.filter.name.' + filter.filterLabel) + ': ';
}
}
return filterLabel + filterName;
};
$scope.removeFilter = function (index) {
$scope.$broadcast(events.PRESET_REMOVE_FILTER, { filterOption: $scope.selectedFilters[index] });
$scope.$emit(events.MODAL_FORM_IS_DIRTY);
};
$scope.removeColumn = function (index) {
var removedColumn = _.find(consolePresetModel.consoleColumns, function (item) {
return item.name === consolePresetModel.gridColumns[index].name;
});
removedColumn.visible = false;
$scope.gridColumns.splice(index, 1);
$scope.$emit(events.MODAL_FORM_IS_DIRTY);
};
$scope.moveColumn = function (index, direction) {
if (direction === 'up' && $scope.gridColumns[index - 1]) {
$scope.gridColumns[index].order = index;
$scope.gridColumns[index - 1].order = index + 1;
}
else if (direction === 'down' && $scope.gridColumns[index + 1]) {
$scope.gridColumns[index].order = index + 1;
$scope.gridColumns[index + 1].order = index;
}
$scope.gridColumns = _.sortBy($scope.gridColumns, 'order');
$scope.$emit(events.MODAL_FORM_IS_DIRTY);
};
$scope.savePreset = function () {
var tempPreset = consolePresetModel.getUserSavedPreset($scope.filterPresetName);
//Prevent user from using columns as it is a reserved word
if ($scope.filterPresetName === "columns") {
systemAlertService.warning({
text: $filter('i18n')('console.saveFilter.reservedName'),
hide: 10000
});
return;
}
if (tempPreset && tempPreset.id !== userFilterPreset.id) {
systemAlertService.warning({
text: $filter('i18n')('console.saveFilter.nameConflict'),
hide: 10000
});
return;
}
if ($scope.consoleType === EntityVO.TYPE_TICKET) {
if ($scope.saveColumnCheckbox) {
var selectedCustomColumns = _.filter($scope.gridColumns, { type: 'custom' });
$scope.selectedFilters = _.filter($scope.selectedFilters, function (filter) {
return !(filter.filterType === 'customFilter' && !_.find(selectedCustomColumns, { name: filter.filterName }));
});
}
else {
$scope.selectedFilters = _.reject($scope.selectedFilters, { filterType: 'customFilter' });
}
}
$scope.savingFilterPreset = true;
//set filter and column preset name
userFilterPreset.name = $scope.filterPresetName;
consolePresetModel.setFilterPresetData('name', $scope.filterPresetName);
consolePresetModel.setColumnPresetData('name', $scope.filterPresetName);
if ($scope.saveFilterCheckbox) {
updateFilterPreset().then(function () {
if ($scope.saveColumnCheckbox) {
updateColumnPreset().then(function () {
$modalInstance.close();
}).finally(function () {
$scope.savingFilterPreset = false;
});
}
else {
updateColumnPreset(true).then(function () {
$modalInstance.close();
}).finally(function () {
$scope.savingFilterPreset = false;
});
}
}).catch(function () {
systemAlertService.warning({
text: $filter('i18n')('error.unknown'),
hide: 10000
});
$scope.savingFilterPreset = false;
}).finally(function () {
consolePresetModel.updateGridData();
});
}
};
$scope.disableSubmit = function () {
return !$scope.filterPresetName || (!$scope.saveFilterCheckbox && !$scope.saveColumnCheckbox)
|| $scope.savingFilterPreset || $scope.selectedFilters.length < 2;
};
$scope.$watch('gridColumns', function (newValue) {
$scope.saveColumnCheckbox = newValue.length > 0;
}, true);
$scope.close = function () {
if ($scope.updatePresetForm.$dirty) {
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.labels.yes'),
data: true
},
{
text: i18nService.getLocalizedString('common.labels.no'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
if ($scope.advanceSerachQuery) {
userFilterPreset.value.push($scope.advanceSerachQuery);
}
$modalInstance.dismiss();
}
});
}
else {
if ($scope.advanceSerachQuery) {
userFilterPreset.value.push($scope.advanceSerachQuery);
}
$modalInstance.dismiss();
}
};
function updateFilterPreset() {
var copySelectedFilters = _.cloneDeep($scope.selectedFilters), filterSet = {
name: userFilterPreset.name,
id: userFilterPreset.id,
defaultpreset: userFilterPreset.defaultpreset,
value: _.map(copySelectedFilters.reverse(), function (filterOption) {
var cfg = {
filter: filterOption.filterName || filterOption.criteria.name,
option: filterOption.name
};
if (filterOption.type === 'dynamic') {
cfg.type = 'dynamic';
cfg.realOption = angular.copy(filterOption);
delete cfg.realOption.active;
}
return cfg;
})
};
consolePresetModel.setFilterPresetData('value', filterSet.value);
if ($scope.advanceSerachQuery) {
filterSet.value.push($scope.advanceSerachQuery);
}
return $q.all([userModel.updateUserPreferences(consolePresetModel.filterPreferenceGroup, filterSet)]);
}
function updateColumnPreset(hideCols) {
var columnsToUpdate = {};
if (!hideCols) {
_.forEach($scope.gridColumns, function (column, idx) {
var columnIndex = ++idx;
columnsToUpdate[column.name] = {
visible: true,
order: columnIndex
};
});
}
consolePresetModel.setFilterPresetData('columnValue', columnsToUpdate);
columnsToUpdate.newColumnType = true;
return consolePresetModel.updateColumnConfig(columnsToUpdate, userFilterPreset.name, userFilterPreset.columnId);
}
function handleModalFormIsDirty() {
$scope.updatePresetForm.$dirty = true;
}
function handleModalBackdropClick() {
$scope.close();
}
$scope.$on(events.MODAL_FORM_IS_DIRTY, handleModalFormIsDirty);
$scope.$on(events.MODAL_BACKDROP_CLICK, handleModalBackdropClick);
}]);
})();