Source: directives/rotas/rotas.service.js

    /**
     * @ngdoc directives
     * @name RotasService
     * @module s4c.directives.rotas.RotasService
     *
     * @description
     * `RotasService` Componente para acesso ao api do backend e/ou comunicação entre controllers
     * 
     */
(function () {
    'use strict';

    function RotasService($http, $q, API_ENDPOINT, Geocode, PlanejamentoDesenhoService) {

        /**
         * @method pegarCor
         * @param {*} value 
         */
        function pegarCor(value) {
            if (value.RotaLeituras &&
                value.RotaLeituras[0] &&
                value.RotaLeituras[0].currentTime) {
                value = ((100 * (value.RotaLeituras[0].currentTime / value.RotaLeituras[0].regularTime)) - 100)

                if (value <= 10) {
                    return "#8AC249";
                } else if (value >= 10 && value <= 50) {
                    return "#FFFF00";
                } else {
                    return "#F34235";
                }
            } else {
                return "#ddd";
            }
        }

        /**
         * @method pegarRota
         * @param {*} id 
         */
        function pegarRota(id) {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'rotas/' + id)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method calcularTempo
         * @param {*} waypoints 
         */
        function calcularTempo(waypoints) {
            var deferred = $q.defer();

            $http.post(API_ENDPOINT + 'rotas/tempo', waypoints)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method deletarRota
         * @param {*} id 
         */
        function deletarRota(id) {
            var deferred = $q.defer();

            $http.delete(API_ENDPOINT + 'rotas/' + id)
                .then(function (rotas) {

                    if (typeof rotas !== 'object') {
                        deferred.reject();
                    }

                    deferred.resolve(rotas);

                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method pegarDetalhamento
         * @param {*} id 
         */
        function pegarDetalhamento(id) {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'rotas/' + id + '/detalhamento')
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject();
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method pegarRotas
         */
        function pegarRotas() {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'rotas')
                .then(function (rotas) {
                    deferred.resolve(rotas);
                });

            return deferred.promise;
        }

        /**
         * @method addAlarmeRota
         * @param {*} idRota 
         * @param {*} alarme 
         */
        function addAlarmeRota(idRota, alarme) {
            var deferred = $q.defer();

            $http.post(API_ENDPOINT + 'alarme/rota/' + idRota, alarme)
                .then(function (response) {
                    if (typeof response.data === 'object') {
                        deferred.resolve(response.data);
                    } else {
                        deferred.reject();
                    }
                }, function (error) {
                    deferred.reject(error);
                });

            return deferred.promise;
        }

        /**
         * @method updateAlarmeRota
         * @param {*} alarme 
         */
        function updateAlarmeRota(alarme) {
            var deferred = $q.defer();

            $http.put(API_ENDPOINT + 'alarme/rota/' + alarme.id, alarme)
                .then(function (response) {
                    if (typeof response.data === 'object') {
                        deferred.resolve(response.data);
                    } else {
                        deferred.reject();
                    }
                }, function (error) {
                    deferred.reject(error);
                });

            return deferred.promise;
        }

        /**
         * @method deleteAlarmeRota
         * @param {*} alarmeId 
         */
        function deleteAlarmeRota(alarmeId) {
            var deferred = $q.defer();

            $http.delete(API_ENDPOINT + 'alarme/rota/' + alarmeId)
                .then(function (response) {
                    deferred.resolve(response);
                });

            return deferred.promise;
        }

        /**
         * @method getAlarmesRota
         * @param {*} idRota 
         */
        function getAlarmesRota(idRota) {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'alarme/rota/' + idRota)
                .then(function (response) {
                    deferred.resolve(response);
                });

            return deferred.promise;
        }

        /**
         * @method atualizarPontos
         * @param {*} waypoints 
         */
        function atualizarPontos(waypoints) {

            angular.forEach(waypoints, function (waypoint) {

                Geocode.obterEndereco({
                    latitude: waypoint.latLng.lat,
                    longitude: waypoint.latLng.lng
                }).then(function (data) {
                    var rua = data.rua ? data.rua : '';
                    var bairro = data.barrio ? data.barrio : '';
                    var numero = data.numero ? data.numero : '';
                    var cidade = data.cidade ? data.cidade : '';
                    var estado = data.estado ? data.estado : '';
                    waypoint.endereco = '' + rua + ' ' + numero + ', ' + bairro + ', ' + cidade + ', ' + estado;
                });

            });

            var pontos = _.map(waypoints, function (waypoint) {
                return {
                    latitude: waypoint.latLng.lat,
                    longitude: waypoint.latLng.lng,
                    endereco: waypoint.endereco
                }
            });

            PlanejamentoDesenhoService.mapRoutesUpdated(pontos);
            console.log('pontos', pontos);
        }

        return {
            pegarRotas: pegarRotas,
            pegarDetalhamento: pegarDetalhamento,
            deletarRota: deletarRota,
            pegarRota: pegarRota,
            pegarCor: pegarCor,
            calcularTempo: calcularTempo,
            addAlarmeRota: addAlarmeRota,
            updateAlarmeRota: updateAlarmeRota,
            getAlarmesRota: getAlarmesRota,
            deleteAlarmeRota: deleteAlarmeRota,
            atualizarPontos: atualizarPontos
        };

    }

    angular.module('s4c.components.rotas')
        .service('RotasService', RotasService);

    RotasService.$inject = ['$http', '$q', 'API_ENDPOINT', 'Geocode', 'PlanejamentoDesenhoService'];
})();