/**
* @ngdoc directives
* @name calendarioOlimpicoFilter
* @module s4c.directives.calendarioOlimpicoFilter.CalendarioOlimpicoFilter
*
* @description
* `CalendarioOlimpicoFilter` Controller do Módulo de Filtro do Calendário Olímpico
*
*
*/
(function () {
'use strict';
CalendarioOlimpicoFilter.$inject = [
'CalendarioOlimpicoFilter'
];
function CalendarioOlimpicoFilter(CalendarioOlimpicoFilter) {
return {
restrict: 'E',
templateUrl: 'app/directives/calendario-olimpico-filter/calendario-olimpico-filter.html',
replace: true,
scope: {},
link: function ($scope, $elem, $attrs) {
$scope.res = $scope.$root.res;
var filter = CalendarioOlimpicoFilter;
var filterInstance = filter.getInstance($attrs.id);
angular.extend($scope, {
modalidadesOlimpicas: [],
sexo: [],
fases: [],
applyFilter: applyFilter,
checkedAll: checkedAll,
res: $scope.$root.dataCalendarioOlimpico,
toogleMenu: toogleMenu,
modules: {}
});
/**
* Abre e fecha a opção de filtro
*
* @method toogleMenu
*
* @param module {String} module
*
*/
function toogleMenu(module) {
$scope.modules[module] = !$scope.modules[module];
};
/**
* Transforma os dados da tabela de programacao para as opçoes de cada filtro
*
* @method parseObj
*
* @param obj {Object} obj
*
*/
function parseObj(obj) {
return _.chain($scope.res)
.uniqBy(obj)
.map(function (o) {
return { 'label': o[obj], 'value': false };
})
.value();
}
/**
* Checkall - unckedAll das opcoes de filtro
*
* @method checkedAll
*
* @param modules {Object} Módulos
* @param boolChecked {Boolean} Boolean
*
*/
//
function checkedAll(modules, boolChecked) {
_.each($scope[modules], function (record) {
record.value = boolChecked;
});
}
/**
* Aplica o filtro
*
* @method applyFilter
*
*
*/
function applyFilter() {
filterInstance.trigger('filterChanged', filterInstance);
}
$scope.modules = {
'ModalidadeOlimpica': false,
'FemininoMasculino': false,
'Fases': false
};
filterInstance.sexo = $scope.sexo = parseObj('ds_Genero');
filterInstance.modalidadesOlimpicas = $scope.modalidadesOlimpicas = parseObj('nm_Modalidade');
filterInstance.fases = $scope.fases = parseObj('ds_Prova_Fase');
filterInstance.modules = $scope.modules;
$scope.dataRange = {};
$scope.dataRange.dataInicial = moment().startOf('Day').format('DD/MM');
$scope.dataRange.dataFinal;
filterInstance.dateRange = $scope.dataRange;
/**
* Listener do atributo modalidadesOlimpicas
*
* @method watch
* @param value {Object} value
*
*/
$scope.$watch('modalidadesOlimpicas', function (value) {
$scope.exibeMarcarTodosModalidades = _.some($scope.modalidadesOlimpicas, function (record) { return record.value === false });
}, true);
/**
* Listener do atributo sexo
*
* @method watch
* @param value {Object} value
*
*/
$scope.$watch('sexo', function (value) {
$scope.exibeMarcarTodosSexo = _.some($scope.sexo, function (record) { return record.value === false });
}, true);
/**
* Listener do atributo fases
*
* @method watch
* @param value {Object} value
*
*/
$scope.$watch('fases', function (value) {
$scope.exibeMarcarTodosFase = _.some($scope.fases, function (record) { return record.value === false });
}, true);
}
}
}
angular.module('s4c.components.calendario', [])
.directive('calendarioOlimpicoFilter', CalendarioOlimpicoFilter);
}());