Source: directives/rotas-filter/rotas-filter.js

/**
 * @ngdoc directives
 * @name RotasFilter
 * @module s4c.directives.rotasFilter.RotasFilter
 *
 * @description
 * `RotasFilter` Controller do Filtro do módulo de Rotas 
 * 
 * 
 */
(function () {
    'use strict';

    function RotasFilter(RotasFilter, Departamento, localize) {
        return {
            restrict: 'E',
            templateUrl: 'app/directives/rotas-filter/rotas-filter.html',
            replace: true,
            scope: {},
            link: function ($scope, $elem, $attrs) {
                $scope.res = $scope.$root.res;
                angular.extend($scope, {
                    applyFilter: applyFilter,
                    marcarDesmarcarTodos: marcarDesmarcarTodos
                });

                $scope.marcar_todos = true;

                var instance = RotasFilter.getInstance($attrs.id);

                Departamento
                    .getAgencias()
                    .then(function (departamentos) {
                        instance.agencias = _.map(departamentos, function (departamento) {
                            departamento.ativo = true;
                            return departamento;
                        });

                        $scope.agencias = instance.agencias;
                    });

                instance.dataRange = _timeSet();
                $scope.dataRange = {
                    start: moment().subtract(1, 'day').startOf('day').format('D/MM - HH:mm'),
                    end: moment().endOf('day').format('D/MM - HH:mm')
                };

                /**
                 * @method _timeSet
                 */
                function _timeSet() {
                    return {
                        start: moment().subtract(1, 'day').startOf('day').format(),
                        end: moment().endOf('day').format()
                    }
                };

                /**
                 * @method _setTimeWindow
                 */
                function _setTimeWindow() {
                    var start = ($scope.dataRange.start) ?
                        moment($scope.dataRange.start, 'D/MM - HH:mm').format() :
                        null;
                    var end = ($scope.dataRange.end) ?
                        moment($scope.dataRange.end, 'D/MM - HH:mm').format() :
                        null;

                    instance.dataRange = {
                        start: start,
                        end: end
                    };
                }

                /**
                 * @method applyFilter
                 * @param {*} toggle 
                 */
                function applyFilter(toggle) {
                    instance.trigger('filterChanged');
                    if (!toggle) {
                        $scope.$parent.toogleFilter();
                    }
                }
                /**
                 * @method marcarDesmarcarTodos
                 */
                function marcarDesmarcarTodos() {
                    if ($scope.marcar_todos) {
                        angular.forEach($scope.agencias, function (agencia) {
                            agencia.ativo = false;
                        });
                    } else {
                        angular.forEach($scope.agencias, function (agencia) {
                            agencia.ativo = true;
                        });
                    }
                }
            }
        };
    }

    RotasFilter.$inject = ['RotasFilter', 'Departamento', 'localize'];

    angular.module('s4c.components.rotas')
        .directive('rotasFilter', RotasFilter);
}());