/**
* @ngdoc directives
* @name calendarioOlimpico
* @module s4c.directives.calendarioOlimpico.calendarioOlimpico
*
* @description
* `calendarioOlimpicoController` Controller do Calendário Olímpico
*
*
* @example
* <s4c-calendario-olimpico>
* </s4c-calendario-olimpico>
*/
(function () {
'use strict';
calendarioOlimpicoController.$inject = [
'$scope',
'$filter',
'$anchorScroll',
'ngTableParams',
'Base',
'CalendarioOlimpicoFilter'
];
function calendarioOlimpicoController(
$scope,
$filter,
$anchorScroll,
ngTableParams,
Base,
CalendarioOlimpicoFilter) {
$scope.res = $scope.$root.dataCalendarioOlimpico;
CalendarioOlimpicoFilter.getInstance('calendario-olimpico-filter').on('filterChanged', filter);
$scope.data = [];
$scope.search;
Base.obterCob('calendarioOlimpico/', {}).then(function (resp) {
$scope.data = resp;
$scope.$root.dataCalendarioOlimpico = resp;
angular.extend($scope.tableParams.data, resp);
});
$scope.tableParams = new ngTableParams({
page: 1,
count: 10
}, {
total: $scope.data.length,
getData: function ($defer, params) {
$scope.data = params.sorting() ? $filter('orderBy')($scope.data, params.orderBy()) : $scope.data;
$defer.resolve($scope.data);
}
});
/**
* Aplica o filtro na listagem
*
* @method filter
*
* @param args {String} Argumentos
*
*/
function filter(args) {
if (!args) {
return false;
}
var dates = args.dateRange;
var genero = _.chain(args.sexo).filter(function (o) { return o.value; }).map('label').value();
var modalidade = _.chain(args.modalidadesOlimpicas).filter(function (o) { return o.value; }).map('label').value();
var fases = _.chain(args.fases).filter(function (o) { return o.value; }).map('label').value();
// zera o filtro
var search = $scope.$root.dataCalendarioOlimpico;
if (genero.length) {
search = _.chain(search).filter(item => genero.indexOf(item.ds_Genero) > -1).value();
}
if (modalidade.length) {
search = _.chain(search).filter(item => modalidade.indexOf(item.nm_Modalidade) > -1).value();
}
if (fases.length) {
search = _.chain(search).filter(item => fases.indexOf(item.ds_Prova_Fase) > -1).value();
}
if (dates.dataInicial) {
var date = new Date();
date.setDate(dates.dataInicial.split("/")[0]);
date.setMonth(dates.dataInicial.split("/")[1] - 1);
date.setYear(2015);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
search = _.chain(search).filter(function (item) { var dt_Programacao = new Date(item.dt_Programacao); return dt_Programacao.getTime() >= date.getTime(); }).value();
}
if (dates.dataFinal) {
var date = new Date();
date.setDate(dates.dataFinal.split("/")[0]);
date.setMonth(dates.dataFinal.split("/")[1] - 1);
date.setYear(2016);
date.setHours(23);
date.setMinutes(59);
date.setSeconds(59);
search = _.chain(search).filter(function (item) { var dt_Programacao = new Date(item.dt_Programacao); return dt_Programacao.getTime() <= date.getTime(); }).value();
}
$scope.data = search;
$scope.tableParams.data = search;
$scope.tableParams.reload();
$scope.$parent.filtroAtivo = !$scope.$parent.filtroAtivo;
}
}
function s4cCalendarioOlimpico() {
return {
restrict: 'EA',
templateUrl: 'app/directives/calendario-olimpico/calendario-olimpico.html',
scope: {},
controller: calendarioOlimpicoController
};
}
function bullet() {
return function (value) {
var today = moment();
var dt_Programacao = moment(value);
var diff = today.diff(dt_Programacao) * -1;
if (dt_Programacao.dayOfYear() === today.dayOfYear()) {
return "bullet-progress"
}
if (diff < 0) {
return "bullet-complete"
}
if (diff > 0) {
return "bullet-scheduled"
}
}
}
angular.module('s4c.components.calendario')
.directive('s4cCalendarioOlimpico', s4cCalendarioOlimpico)
.filter('bullet', bullet);
})();