Source: directives/zonas-de-observacao-filter/zonas-de-observacao-filter.js

/**
 * @ngdoc directives
 * @name ZonasDeObservacaoFilter
 * @module s4c.directives.ZonasDeObservacaoFilter.ZonasDeObservacaoFilter
 *
 * @description
 * `ZonasDeObservacaoFilter` Controller do Filtro do módulo de Zona de Observação
 * 
 * 
 */
(function () {
    'use strict';

    angular.module('s4c.components.zonas-de-observacao', [])
        .directive('zonasDeObservacaoFilter', ZonasDeObservacaoFilter);

    ZonasDeObservacaoFilter.$inject = [
        'ZonasDeObservacaoFilter',
        'PermissoesService'
    ];

    function ZonasDeObservacaoFilter(ZonasDeObservacaoFilter, PermissoesService) {
        return {
            restrict: 'E',
            templateUrl: 'app/directives/zonas-de-observacao-filter/zonas-de-observacao-filter.html',
            replace: true,
            scope: {},
            link: function ($scope, $elem, $attrs) {

                $scope.res = $scope.$root.res;
                angular.extend($scope, {
                    applyFilter: applyFilter
                });

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

                instance.dataRange = _timeSet();
                $scope.dataRange = _timeSet();

                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.zonaObservacaoPublica;
                }

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

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

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

                /**
                 * @method applyFilter
                 * @param {*} toggle 
                 */
                function applyFilter(toggle) {
                    _setTimeWindow();
                    instance.trigger('filterChanged');
                    if (!toggle) {
                        $scope.$parent.toogleFilter();
                    }
                }
            }
        };
    }

}());