Source: services/viatura.js

    /**
     * @ngdoc service
     * @name Viatura
     * @module s4c.services.Viatura
     * 
     * @description  Componente para acesso a api do backend e/ou comunicação entre controllers
     * 
     *
     */  
     
(function () {
    angular.module('s4c.services')
        .factory('Viatura', Viatura);

    Viatura.$inject = [
        'Base',
        'MainState',
        'MapaService'
    ]

   /**	
	* @method Viatura
	* @param {*} Base
	* @param {*} MainState
	* @param {*} MapaService
	*/
    function Viatura(Base, MainState, MapaService) {

        var layersViatura = new L.LayerGroup([]);
        var subItens = new L.LayerGroup([]);

        var service = {
            pesquisar: pesquisar,
            obterViaturas: obterViaturas,
            addLayer: addLayer,
            removerLayers: removerLayers
        };

  	   /**	
		* @method pesquisar
		* @param {*} texto
		* @param {*} versao
		*/
        function pesquisar(texto, versao) {
            return Base.obter('viaturas/search/' + texto, {}, {
                version: versao
            });
        }

  	   /**	
		* @method obterViaturas
		* @param {*} organizacoes
		*/
        function obterViaturas(organizacoes) {
            return Base.salvar('viaturas/organizacoes', organizacoes);
        }

  	   /**	
		* @method removerLayers
		* @param {*} idCamadaViatura
		* @param {*} mode
		*/
        function removerLayers(idCamadaViatura, mode) {

            var layersToRemove = [];
            for (var index in layersViatura.getLayers()) {

                if (mode) {

                    layersToRemove.push(layersViatura.getLayers()[index]);
                    MapaService.removerCamada(layersViatura.getLayers()[index].aggregate);

                } else if (layersViatura.getLayers()[index] != undefined && layersViatura.getLayers()[index].chave_estrangeira == idCamadaViatura) {

                    layersToRemove.push(layersViatura.getLayers()[index]);
                    MapaService.removerCamada(layersViatura.getLayers()[index].aggregate);
                }
            }

            for (var index in layersToRemove) {
                layersViatura.removeLayer(layersToRemove[index]);
            }

            _.each(subItens.getLayers(), function (layer) {
                if (layer != undefined && layer.chave_estrangeira == idCamadaViatura) {
                    layersToRemove.push(layer);
                    subItens.removeLayer(layer);
                }
            });

        }

  	   /**	
		* @method addLayer
		* @param {*} featureCollection
		* @param {*} node
		*/
        function addLayer(featureCollection, node) {

            MapaService.adicionarPontos(featureCollection).then(function (layers) {

                for (var index in layers) {
                    layers[index].chave_estrangeira = node.chave_estrangeira;
                    layersViatura.addLayer(layers[index]);
                }
            });

        }

  	   /**	
		* @method getLayer
		* @param {*} idCamadaViatura
		*/
        function getLayer(idCamadaViatura) {

            for (var index in layersViatura.getLayers()) {

                if (layersViatura.getLayers()[index] != undefined && layersViatura.getLayers()[index].chave_estrangeira == idCamadaViatura) {
                    return layersViatura.getLayers()[index];
                }
            }

        }

        return service;
    }
}());