Source: directives/modulo/modulo.service.js

/**
 * @ngdoc directives
 * @name Modulo
 * @module s4c.directives.modulos.ModuloService
 *
 * @description
 * `ModuloService` Componente para acesso ao api do backend e/ou comunicação entre controllers
 * 
 * 
 */
(function () {
    angular.module('s4c.components.modulo')
        .factory('Modulo', Modulo);

    Modulo.$inject = [
        'MainState',
        'Base',
        'CamadasService'
    ];

    function Modulo(MainState, Base, CamadasService) {
        var service = {
            initModulo: initModulo,
            reInitModules: reInitModules
        };

        var modulos = [];
        /**
         * @method initModulo
         * @param {*} modulo 
         * @param {*} noFilter 
         */
        function initModulo(modulo, noFilter) {

            if (!noFilter) {
                _initFilters();
            }

            if (modulo != null) {
                if (modulo.Face != null && modulo.Face.menus != null && modulo.Face.menus.length > 0) {

                    _.each(modulo.Face.menus, function (menu) {
                        if (menu.url && menu.url.indexOf('incidente') !== -1) { //Só carrega pelo MSI
                            return;
                        }

                        if (menu.urlSubMenus.indexOf('menuCamada/zona_observacao') != -1) {
                            CamadasService.exibirZonasDeObservacao();
                        } else {
                            CamadasService.toggleMenu(menu);
                        }

                    });

                    if (modulos.indexOf(modulo) <= -1) {
                        modulos.push(modulo);
                    }

                } else if (modulo.FaceId != null && modulo.Face == null) {
                    Base.obter('faces/' + modulo.FaceId).then(function (response) {
                        modulo.Face = response;
                        initModulo(modulo);
                    });
                }
            }
        }

        /**
         * @method reInitModules
         */
        function reInitModules() {
            _.each(modulos, function (modulo) {
                initModulo(modulo, true);
            });
        }

        /**
         * @method _initFilters
         */
        function _initFilters() {
            if (MainState.getDirective('incidentes') != null) {
                MainState.getDirective('incidentes').initFilter();
            }
        }

        return service;
    }
}());