/**
* @ngdoc directives
* @name MsiFilter
* @module s4c.directives.MsiFilter.MsiFilter
*
* @description
* `MsiFilter` Controller do módulo do MsiFilter
*
*
*/
(function () {
'use strict';
angular.module('s4c.components.msi', ['ngTable'])
.directive('msiFilter', MsiFilter)
.filter('join', function () {
return function (array, property) {
var filtered = _.chain(array)
.filter('ativo')
.map(property)
.value();
if (filtered.length <= 0) {
return '-';
}
return filtered.join(', ');
}
});
MsiFilter.$inject = [
'MsiFilter',
'Base',
'IncidentesService',
'MainState',
'Preset',
'$q',
'$interval'
];
function MsiFilter(MsiFilter, Base, IncidentesService, MainState, Preset, $q, $interval) {
return {
restrict: 'E',
templateUrl: 'app/directives/msi-filter/msiFilter.html',
replace: true,
scope: {},
link: function ($scope, $elem, $attrs) {
angular.extend($scope, {
categorias: [],
prioridades: [],
tipoIncidentes: [],
statuses: [],
modulo: $scope.modulo,
criticidades: [],
gravidades: [],
exibirModuloAgencia: true,
exibirModuloTipoIncidente: true,
exibirModuloStatus: true,
exibirModuloGravidades: true,
exibirRange: true,
applyFilter: applyFilter,
exibirAgencias: exibirAgencias,
exibirDateRange: exibirDateRange,
exibirGravidades: exibirGravidades,
exibirStatus: exibirStatus,
exibirTipoIncidente: exibirTipoIncidente,
marcarTodasPrioridades: marcarTodasPrioridades,
desmarcarTodasPrioridades: desmarcarTodasPrioridades,
definirOrigem: definirOrigem,
preSelectCategorias: preSelectCategorias,
res: $scope.$root.res,
setFilter: setFilter,
verifyModulos: verifyModulos,
expand: expand,
collapse: collapse
});
$scope.expanded = true;
MainState.registerDirective('msiFilter', $scope);
$scope.isToShow = function (label) {
return MainState.isToShow(label);
}
$scope.$on('$destroy', function () {
MainState.unregisterDirective('msiFilter');
});
var instance = MsiFilter.getInstance($attrs.id);
instance.dataRange = _timeSet();
function _timeSet() {
return {
start: moment().startOf('day').subtract(1, 'day').format(),
end: moment().endOf('day').format()
}
};
$scope.dateOptions = [];
$scope.dateOptions['1'] = false;
$scope.dateOptions['2'] = false;
$scope.dateOptions['3'] = false;
$scope.dateOptions['4'] = false;
$scope.days = { qtdDays: 1 };
$scope.periodRange = {
endDate: '',
startDate: '',
};
var verified = false;
/**
* @method verifyModulos
*/
function verifyModulos() {
var modulos = Preset.obter().PresetModulos;
for (var index in modulos) {
if (((modulos[index].Face && modulos[index].Face.name == 'MODULO_MSI') || (modulos[index].name == 'Incidentes')) && !modulos[index].usado) {
modulos[index].usado = true;
$scope.modulo = modulos[index];
instance.modulo = $scope.modulo;
verified = true;
if ($scope.modulo.extras) {
instance.statuses = $scope.modulo.extras.statuses;
$scope.statuses = $scope.modulo.extras.statuses;
if ($scope.modulo.extras.categorias) {
$scope.categorias = $scope.modulo.extras.categorias;
}
if ($scope.modulo.extras.gruposUsuarios) {
$scope.gruposUsuarios = $scope.modulo.extras.gruposUsuarios;
}
if ($scope.modulo.extras.tipoIncidentes) {
$scope.tipoIncidentes = $scope.modulo.extras.tipoIncidentes;
}
if ($scope.modulo.extras.gravidades) {
$scope.gravidades = $scope.modulo.extras.gravidades;
}
if ($scope.modulo.extras.dataRange) {
$scope.dataRange = {
start: moment($scope.modulo.extras.dataRange.start).format('DD/MM/YYYY HH:mm'),
end: moment($scope.modulo.extras.dataRange.end).format('DD/MM/YYYY HH:mm')
};
} else {
$scope.dataRange = {
start: $scope.modulo.extras.date.start,
end: $scope.modulo.extras.date.end
};
}
if ($scope.modulo.extras.selectedCheck) {
$scope.dateOptions[$scope.modulo.extras.selectedCheck] = true;
loadDataRange();
}
if ($scope.modulo.extras.qtdDays) {
$scope.days.qtdDays = $scope.modulo.extras.qtdDays;
}
} else {
instance.statuses = [
{ id: 1, nome: 'ABERTO', imgUrl: '/assets/images/IncidenteLegenda/s4c_ic_incident_open_fill_subtitle.svg', ativo: true },
{ id: 2, nome: 'FECHADO', imgUrl: '/assets/images/IncidenteLegenda/s4c_ic_incident_closed_fill_subtitle.svg', ativo: true }
];
$scope.statuses = instance.statuses;
$scope.dataRange = {
start: moment(instance.dataRange.start).format('DD/MM/YYYY HH:mm'),
end: moment(instance.dataRange.end).format('DD/MM/YYYY HH:mm')
};
$scope.dateOptions['4'] = true;
loadDataRange();
}
break;
}
}
}
verifyModulos();
/**
* @method initFilter
*/
$scope.initFilter = function () {
var deferred = $q.defer();
if (verified) {
deferred.resolve('');
}
IncidentesService.getCategoriasIncidente().then(function (categorias) {
var categorias = preSelectCategorias(categorias);
instance.categorias = categorias;
$scope.categorias = instance.categorias;
IncidentesService.getIncidenteTipos().then(function (tipoIncidentes) {
instance.tipoIncidentes = tipoIncidentes;
$scope.tipoIncidentes = instance.tipoIncidentes;
IncidentesService.getIncidenteGravidades().then(function (gravidades) {
instance.gravidades = gravidades;
$scope.gravidades = instance.gravidades;
verifyModulos();
deferred.resolve('');
});
});
});
return deferred.promise;
}
/**
* @method preSelectCategorias
* @param {*} categorias
*/
function preSelectCategorias(categorias) {
var categoriasSelected = categorias.filter(function (categoria) {
if (categoria.nome.indexOf('Outros') > -1) return;
categoria.ativo = true;
return categoria;
});
return categoriasSelected;
}
Base.obter('grupo_usuarios/adm').then(function (gruposUsuarios) {
$scope.gruposUsuarios = gruposUsuarios;
instance.gruposUsuarios = gruposUsuarios;
});
for (var i = 0; i < 9; i++) {
instance.prioridades.push({
texto: i,
ativo: false
});
$scope.prioridades = instance.prioridades;
}
for (var i = 0; i < 4; i++) {
$scope.prioridades[i].ativo = true;
}
$scope.$watch('prioridades', function () {
$scope.exibeMarcarTodos = _.some($scope.prioridades, 'ativo', false);
}, true);
$scope.$watch('gruposUsuarios', function () {
definirOrigem();
}, true);
/**
* @method definirOrigem
*/
function definirOrigem() {
instance.origem = 'filtro';
};
/**
* @method exibirGravidades
*/
function exibirGravidades() {
$scope.exibirModuloGravidades = !$scope.exibirModuloGravidades;
}
/**
* @method exibirStatus
*/
function exibirStatus() {
$scope.exibirModuloStatus = !$scope.exibirModuloStatus;
}
/**
* @method exibirTipoIncidente
*/
function exibirTipoIncidente() {
$scope.exibirModuloTipoIncidente = !$scope.exibirModuloTipoIncidente;
}
/**
* @method exibirDateRange
*/
function exibirDateRange() {
$scope.exibirRange = !$scope.exibirRange;
}
/**
* @method exibirAgencias
*/
function exibirAgencias() {
$scope.exibirModuloAgencia = !$scope.exibirModuloAgencia;
}
/**
* @method expand
*/
function expand() {
$scope.exibirModuloAgencia = true;
$scope.exibirRange = true;
$scope.exibirModuloTipoIncidente = true;
$scope.exibirModuloStatus = true;
$scope.exibirModuloGravidades = true;
$scope.expanded = !$scope.expanded;
}
/**
* @method collapse
*/
function collapse() {
$scope.exibirModuloAgencia = false;
$scope.exibirRange = false;
$scope.exibirModuloTipoIncidente = false;
$scope.exibirModuloStatus = false;
$scope.exibirModuloGravidades = false;
$scope.expanded = !$scope.expanded;
}
/**
* @method selectCheckBox
*/
$scope.selectCheckBox = function (selected, index) {
$scope.dateOptions['1'] = false;
$scope.dateOptions['2'] = false;
$scope.dateOptions['3'] = false;
$scope.dateOptions['4'] = false;
if (!selected == false) {
$scope.dateOptions[index] = selected;
return;
}
$scope.dateOptions[index] = !selected;
}
/**
* @method loadDataRange
*/
function loadDataRange() {
if ($scope.dateOptions['4']) {
$scope.periodRange.endDate = angular.copy($scope.dataRange.end);
$scope.periodRange.startDate = angular.copy($scope.dataRange.start);
return;
}
}
/**
* @method calculateDataRange
*/
function calculateDataRange() {
if ($scope.dateOptions['1']) {
$scope.dataRange = {
start: moment().startOf('day').subtract(1, 'day').format('DD/MM/YYYY HH:mm'),
end: moment().endOf('day').format('DD/MM/YYYY HH:mm')
};
return;
}
if ($scope.dateOptions['2']) {
$scope.dataRange = {
start: moment().startOf('isoWeek').format('DD/MM/YYYY HH:mm'),
end: moment().endOf('day').format('DD/MM/YYYY HH:mm')
};
return;
}
if ($scope.dateOptions['3']) {
$scope.dataRange = {
start: moment().startOf('day').subtract($scope.days.qtdDays, 'day').format('DD/MM/YYYY HH:mm'),
end: moment().endOf('day').format('DD/MM/YYYY HH:mm')
};
return;
}
if ($scope.dateOptions['4']) {
$scope.dataRange.end = angular.copy($scope.periodRange.endDate);
$scope.dataRange.start = angular.copy($scope.periodRange.startDate);
return;
}
}
$interval(function () {
var now = moment();
if (now.hours() === 0 && now.minutes() === 0) {
applyFilter("");
}
}, 60000);
/**
* @method applyFilter
* @param {*} toggle
*/
function applyFilter(toggle) {
calculateDataRange();
instance.trigger('filterChanged', instance.origem);
if (!toggle) {
$scope.$parent.toogleFilter();
}
if ($scope.modulo) {
var savedDate = {
start: moment($scope.dataRange.start, 'DD/MM/YYYY HH:mm').format(),
end: moment($scope.dataRange.end, 'DD/MM/YYYY HH:mm').format()
};
$scope.modulo.extras = {};
$scope.modulo.extras.categorias = $scope.categorias;
$scope.modulo.extras.gruposUsuarios = $scope.gruposUsuarios;
$scope.modulo.extras.tipoIncidentes = $scope.tipoIncidentes;
$scope.modulo.extras.statuses = $scope.statuses;
$scope.modulo.extras.gravidades = $scope.gravidades;
$scope.modulo.extras.dataRange = savedDate;
$scope.modulo.extras.selectedCheck = $scope.dateOptions.indexOf(true).toString();
$scope.modulo.extras.qtdDays = $scope.days.qtdDays;
Preset.salvar();
}
}
/**
* @method marcarTodasPrioridades
*/
function marcarTodasPrioridades() {
_.each($scope.prioridades, function (prioridade) {
prioridade.ativo = true;
});
}
/**
* @method desmarcarTodasPrioridades
*/
function desmarcarTodasPrioridades() {
_.each($scope.prioridades, function (prioridade) {
prioridade.ativo = false;
});
}
/**
* @method setFilter
* @param {*} filter
*/
function setFilter(filter) {
if (filter.status) {
_.map($scope.statuses, function (status) {
status.ativo = false;
_.each(filter.status.$in, function (statusIn) {
if (status.nome == statusIn) {
status.ativo = true;
}
});
});
}
if (filter.CategoriaIncidenteId) {
_.map($scope.categorias, function (categoria) {
categoria.ativo = false;
_.each(filter.CategoriaIncidenteId.$in, function (categoriaIn) {
if (categoria.id == categoriaIn) {
categoria.ativo = true;
}
});
});
}
if (filter.TipoIncidenteId) {
_.map($scope.tipoIncidentes, function (tipoIncidente) {
tipoIncidente.ativo = false;
_.each(filter.TipoIncidenteId.$in, function (tipoIncidenteIn) {
if (tipoIncidente.id == tipoIncidenteIn) {
tipoIncidente.ativo = true;
}
});
});
}
if (filter.GravidadeIncidenteId) {
_.map($scope.gravidades, function (gravidade) {
gravidade.ativo = false;
_.each(filter.GravidadeIncidenteId.$in, function (gravidadeIncidenteIn) {
if (gravidade.id == gravidadeIncidenteIn) {
gravidade.ativo = true;
}
});
});
}
}
}
}
}
}());