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


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

    function RotasUnificadasService($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_unificadas/' + 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_unificadas/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 calcularTempoRotaCriada
         * @param {*} waypoints 
         * @param {*} rotaUnificadaId 
         */
        function calcularTempoRotaCriada(waypoints, rotaUnificadaId) {
            var deferred = $q.defer();

            $http.post(API_ENDPOINT + 'rotas_unificadas/tempo/' + rotaUnificadaId, 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_unificadas/' + 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_unificadas/' + 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_unificadas')
                .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_unificada/' + 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_unificada/' + 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_unificada/' + 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_unificada/' + idRota)
                .then(function (response) {
                    deferred.resolve(response);
                });

            return deferred.promise;
        }

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

            angular.forEach(waypoints, function (waypoint) {

                var jsonObject = {};
                jsonObject.lat = waypoint.latLng.lat;
                jsonObject.lng = waypoint.latLng.lng


                $http.post(API_ENDPOINT + 'rotas_unificadas/latlng/endereco', jsonObject)
                    .then(function (response) {
                        waypoint.endereco = response.data.endereco;
                    }, function (error) {
                        console.log('Erro:...', error);
                    });

            });
            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);

        	/*
        	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);
			*/
        }


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

            var payload = new FormData();

            payload.append("arquivo", kmz.contents);

            $http({
                method: 'POST',
                url: API_ENDPOINT + 'rotas_unificadas/kmz',
                data: payload,
                headers: {
                    'Content-type': 'multipart/form-data'
                }
            })
                /*
                .post(API_ENDPOINT + 'rotas_unificadas/kmz', {
                    arquivo : kmz
                })*/
                .then(function (response) {
                    if (typeof response.data === 'object') {
                        deferred.resolve(response.data);
                    } else {
                        deferred.reject();
                    }
                }, function (error) {
                    deferred.reject(error);
                });

            return deferred.promise;
        }

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

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

            return deferred.promise;
        }

        /**
        * @method salvarRotaUnificada
        * @param {obj} obj objeto contendo informações da Rota
        *
        * @returns {Promise} Promise que resolve contendo um objeto com a nova
        * rota salva no banco.
        */
        function salvarRotaUnificada(obj) {
            var deferred = $q.defer();

            $http.put(API_ENDPOINT + 'rotas_unificadas', obj)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject();
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

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

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

            return deferred.promise;
        }

        /**
         * @method salvarRota
         * @param {obj} obj objeto contendo informações da Rota
         *
         * @returns {Promise} Promise que resolve contendo um objeto com a nova
         * rota salva no banco.
         */
        function salvarRota(obj) {
            var deferred = $q.defer();

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

            return deferred.promise;
        }

        return {
            pegarRotas: pegarRotas,
            salvarRota: salvarRota,
            updateRotaUnificada: updateRotaUnificada,
            salvarRotaUnificada: salvarRotaUnificada,
            pegarDetalhamento: pegarDetalhamento,
            deletarRota: deletarRota,
            pegarRota: pegarRota,
            pegarCor: pegarCor,
            calcularTempo: calcularTempo,
            calcularTempoRotaCriada: calcularTempoRotaCriada,
            addAlarmeRota: addAlarmeRota,
            updateAlarmeRota: updateAlarmeRota,
            getAlarmesRota: getAlarmesRota,
            deleteAlarmeRota: deleteAlarmeRota,
            atualizarPontos: atualizarPontos,
            getKMLFromKMZ: getKMLFromKMZ,
            updateColorRoute: updateColorRoute
        };

    }

    angular.module('s4c.components.rotas-unificadas')
        .service('RotasUnificadasService', RotasUnificadasService);

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