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

/**
 * @ngdoc directives
 * @name RotasUnificadasFilter
 * @module s4c.directives.RotasUnificadasFilter.rotasUnificadasFilter
 *
 * @description
 * `RotasUnificadasFilter` Controller do Filtro da funcionalidade de Rotas Unificadas
 * 
 * 
 */
(function () {
    'use strict';

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


                $scope.isChecked = function () {
                    return $scope.marcar_todos;
                }

                PermissoesService.getPermissoes().then(function (perms) {
                    $scope.permissoesVisualizacao = perms.permissoesVisualizacao;
                    $scope.permissoesCriacao = perms.permissoesCriacao;
                    $scope.permissoesEdicao = perms.permissoesEdicao;
                    $scope.permissoesRemocao = perms.permissoesRemocao;
                });

                $scope.hasPermission = function () {
                    return $scope.permissoesVisualizacao.rotaPublica;
                }

                $scope.marcar_todos = true;

                var instance = RotasUnificadasFilter.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() {
                    $scope.marcar_todos = !$scope.marcar_todos;
                    if ($scope.marcar_todos) {
                        angular.forEach($scope.agencias, function (agencia) {
                            agencia.ativo = true;
                        });
                    } else {
                        angular.forEach($scope.agencias, function (agencia) {
                            agencia.ativo = false;
                        });
                    }
                }
            }
        };
    }

    RotasUnificadasFilter.$inject = ['RotasUnificadasFilter', 'Departamento', 'localize', 'PermissoesService'];

    angular.module('s4c.components.rotas-unificadas')
        .directive('rotasUnificadasFilter', RotasUnificadasFilter);
}());