/**
* @ngdoc directives
* @name BarraBusca
* @module s4c.directives.barra-busca.Barra-Busca
*
* @description
* `barraBuscaCtrl` é a diretiva que controla a barra superior de busca,
* ela controla os filtros de busca e o período.
*
* @example
* <s4c-barra-busca>
* </s4c-barra-busca>
*
*/
(function () {
'use strict';
barraBuscaCtrl.$inject = [
'$scope',
'$rootScope',
'$mdDialog',
'$window',
'MainState',
'BuscaManager',
'localize',
'PermissoesService',
'AuthService'
];
function barraBuscaCtrl(
$scope,
$rootScope,
$mdDialog,
$window,
MainState,
BuscaManager,
localize,
PermissoesService,
AuthService) {
PermissoesService.getPermissoes().then(function (perms) {
$scope.permissoesVisualizacao = perms.permissoesVisualizacao;
$scope.permissoesCriacao = perms.permissoesCriacao;
$scope.permissoesEdicao = perms.permissoesEdicao;
$scope.permissoesRemocao = perms.permissoesRemocao;
});
$scope.res = $rootScope.res;
/**
* Define o funcionamento no evento de onClick na barra de busca
*
* @method onclick
* @param e {Object} Evento
*
*
*/
$window.onclick = function (e) {
if (BuscaManager.active) {
var target = $(e.target);
if (!target) {
return;
}
var isStayOpen = true;
var parents = target.parents();
parents = _.filter(parents, function (parent) {
if ($(parent).hasClass('barStayOpen')) {
return true;
}
return false;
});
if (parents.length <= 0 && !target.hasClass('barStayOpen')) {
isStayOpen = false;
}
if (!isStayOpen) {
BuscaManager.active = false;
$scope.$apply();
}
}
};
var periodos = [localize.getLocalizedString('BARRABUSCA_HOJE'), localize.getLocalizedString('BARRABUSCA_ULTIMAHORA'), localize.getLocalizedString('BARRABUSCA_ULTIMODIA'), localize.getLocalizedString('BARRABUSCA_ULTIMASEMANA'), localize.getLocalizedString('BARRABUSCA_ULTIMOMES'), localize.getLocalizedString('BARRABUSCA_QUALQUERDIA')];
var itensBusca = [{
name: localize.getLocalizedString('COMUM_LOCALIZACAO'),
icon_active: '/assets/images/Consulta/Blue/ic_busca_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_busca_white_24px.svg',
active: true,
indice: '0'
}, {
name: localize.getLocalizedString('BASECONHECIMENTO_TITULO'),
icon_active: '/assets/images/Consulta/Blue/ic_base_conhecimento_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_base_conhecimento_white_24px.svg',
active: true,
indice: '1'
}, {
name: localize.getLocalizedString('PLANEJAMENTO_TITULO'),
icon_active: '/assets/images/Consulta/Blue/ic_planejamento_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_planejamento_white_24px.svg',
active: true,
indice: '2'
}, {
name: localize.getLocalizedString('ZONAOBSERVACAO_TITULO'),
icon_active: '/assets/images/Consulta/Blue/ic_zona_observacao_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_zona_observacao_white_24px.svg',
active: true,
indice: '3'
}, {
name: localize.getLocalizedString('ROTA_TITULO_PLURAL'),
icon_active: '/assets/images/Consulta/Blue/ic_rotas_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_rotas_white_24px.svg',
active: true,
indice: '4'
}, {
name: localize.getLocalizedString('INCIDENTES_TITULO'),
icon_active: '/assets/images/Consulta/Blue/ic_incidente_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_incidente_white_24px.svg',
active: true,
indice: '5'
}, {
name: localize.getLocalizedString('PONTOSDEINTERESSE_TITULO'),
icon_active: '/assets/images/Consulta/Blue/ic_ponto_interesse_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/ic_ponto_interesse_white_24px.svg',
active: true,
indice: '6'
}, {
name: localize.getLocalizedString('CAMERAS_TITULO'),
icon_active: '/assets/images/Consulta/Blue/s4c_ic_camera_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/s4c_ic_camera_white_24px.svg',
active: true,
indice: '7'
}, {
name: localize.getLocalizedString('COMUM_ATIVOSMOVEIS'),
icon_active: '/assets/images/Consulta/Blue/s4c_ic_ativo_movel_blue_24px.svg',
icon_inactive: '/assets/images/Consulta/Blue/s4c_ic_ativo_movel_white_24px.svg',
active: true,
indice: '8'
}];
/**
* Remove da busca itens referentes ao S4S
*
* @method removeItensforS4S
*
*
*
*/
function removeItensforS4S() {
if (AuthService.user.info.showS4S) {
itensBusca.splice(1, 1);
itensBusca.splice(1, 1);
itensBusca.splice(1, 1);
itensBusca.splice(1, 1);
itensBusca.splice(1, 1);
itensBusca.splice(2, 1);
itensBusca.splice(2, 1);
}
}
removeItensforS4S();
/**
* Marca todos os itens da barra de busca
*
* @method marcarTodos
*
*
*
*/
function marcarTodos() {
_.each($scope.itensBusca, function (item) {
item.active = true;
});
}
/**
* Desmarca todos os itens da barra de busca
*
* @method desmarcarTodos
*
*
*
*/
function desmarcarTodos() {
_.each($scope.itensBusca, function (item) {
item.active = false;
});
}
/**
* Verifica se houve alteração no atributo itensBusca
*
* @method watch
*
*
*
*/
$scope.$watch('itensBusca', function () {
var itensAtivos = _.filter($scope.itensBusca, 'active');
if (itensAtivos.length == 0) {
$scope.acervo = localize.getLocalizedString('COMUM_NENHUM');
} else if (itensAtivos.length == 1) {
$scope.acervo = itensAtivos[0].name;
} else if (itensAtivos.length == $scope.itensBusca.length) {
$scope.acervo = localize.getLocalizedString('COMUM_TODOS');
} else {
$scope.acervo = localize.getLocalizedString('COMUM_VARIOS');
}
}, true);
/**
* Obtem os itens a serem buscados
*
* @method watch
*
*
*
*/
function getFilters() {
return $scope.itensBusca;
}
/**
* Obtem o periodo a ser usado na busca
*
* @method getTimeFilters
*
*
*
*/
function getTimeFilters() {
return $scope.timeFilter;
}
/**
* Obtem a cor do ícone
*
* @method getIconColor
* @param active {String}
*
*
*/
function getIconColor(active) {
return (active) ? 'blue' : 'white';
}
/**
* Muda o período do filtro
*
* @method changeTimeFilter
* @param periodo {Object}
*
*
*/
function changeTimeFilter(periodo) {
$scope.timeFilter = periodo;
}
/**
* Customiza o período do Filtro
*
* @method customizeTimeFilter
*
*
*
*/
function customizeTimeFilter() {
$mdDialog.show({
templateUrl: 'app/directives/barra-busca/dialog.html',
controller: function ($scope, inicio, fim) {
function cancelar() {
$mdDialog.cancel();
}
function saveCustomTime() {
$mdDialog.hide({
inicio: $scope.dataInicio,
fim: $scope.dataFim
});
}
angular.extend($scope, {
saveCustomTime: saveCustomTime,
cancelar: cancelar,
dataInicio: inicio,
dataFim: fim,
res: $scope.$parent.res
});
},
locals: {
inicio: $scope.customInicio,
fim: $scope.customFim
}
}).then(function (res) {
if (res.inicio || res.fim) {
$scope.customInicio = res.inicio ? res.inicio : '*';
$scope.customFim = res.fim ? res.fim : '*';
$scope.timeFilter = $scope.customInicio + ' - ' + $scope.customFim;
}
});
}
/**
* Verifica as permissões do item
*
* @method hasPermission
* @param item {Object}
*
*
*/
function hasPermission(item) {
if (!$scope.permissoesVisualizacao) {
return false;
}
if (item.name == $scope.res('BASECONHECIMENTO_TITULO')) {
if (!$scope.permissoesVisualizacao.baseConhecimentoPublica) {
item.active = false;
return false;
}
}
if (item.name == $scope.res('PLANEJAMENTO_TITULO')) {
if (!$scope.permissoesVisualizacao.planejamentoPublico) {
item.active = false;
return false;
}
}
if (item.name == $scope.res('ROTA_TITULO_PLURAL')) {
if (!$scope.permissoesVisualizacao.rotaPublica) {
item.active = false;
return false;
}
}
if (item.name == $scope.res('ZONAOBSERVACAO_TITULO')) {
if (!$scope.permissoesVisualizacao.zonaObservacaoPublica) {
item.active = false;
return false;
}
}
return true;
}
angular.extend($scope, {
marcarTodos: marcarTodos,
desmarcarTodos: desmarcarTodos,
hasPermission: hasPermission,
$apiBarraBusca: {
getIconColor: getIconColor,
getFilters: getFilters,
getTimeFilters: getTimeFilters,
customizeTimeFilter: customizeTimeFilter,
changeTimeFilter: changeTimeFilter
},
timeFilter: localize.getLocalizedString('BARRABUSCA_HOJE'),
acervo: localize.getLocalizedString('COMUM_TODOS'),
itensBusca: itensBusca,
periodos: periodos
});
$scope.$watch('timeFilter', function (newVal, oldVal) {
if (newVal.split('-').length < 2 && oldVal.split('-').length === 2) {
$scope.customInicio = '';
$scope.customFim = '';
}
});
MainState.registerDirective('barraBusca', $scope.$apiBarraBusca);
$scope.$on('$destroy', function () {
MainState.unregisterDirective('barraBusca');
});
}
function s4cBarraBusca() {
return {
restrict: 'E',
templateUrl: 'app/directives/barra-busca/barra-busca.html',
replace: true,
scope: {},
controller: barraBuscaCtrl
};
}
/**
* @ngdoc overview
* @name s4c.components.barraBusca
*/
angular.module('s4c.components.busca', [])
.directive('s4cBarraBusca', s4cBarraBusca);
}());