Source: directives/zona-observacao/zona-observacao.service.js

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

    function ZonaObservacaoService($http, $q, API_ENDPOINT, Base) {

        var IP_MODULOS = '54.232.180.221';

        /**
         * @method date2timestamp
         * @param {*} dateString 
         */
        function date2timestamp(dateString) {
            if (!dateString || dateString === undefined) {
                return;
            }

            var dateParts = dateString.split(' ');
            var timeParts = dateParts[1].split(':');
            var date;

            dateParts = dateParts[0].split('/');

            date = new Date(dateParts[2], parseInt(dateParts[1], 10) - 1,
                dateParts[0], timeParts[0], timeParts[1]);

            return date.getTime();
        }

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

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

            return deferred.promise;
        }

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

            $http.delete(API_ENDPOINT + 'zona_observacao/' + id)
                .then(function (res) {
                    deferred.resolve(res.data);
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method pegarZonas
         */
        function pegarZonas() {

            var deferred = $q.defer();

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

            return deferred.promise;
        }

        /**
         * @method pegarTwitter
         * @param {*} data 
         */
        function pegarTwitter(data) {
            var deferred = $q.defer();
            var NE = data.topLeft;
            var SW = data.bottomRight;
            var NW = {
                lat: NE.lat,
                lng: SW.lng
            };
            var SE = {
                lat: SW.lat,
                lng: NE.lng
            };

            var url = API_ENDPOINT + 'tweets/' + NW.lat + '/' + NW.lng;
            url += '/' + SE.lat + '/' + SE.lng;

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

            return deferred.promise;
        }


        /**
         * @method pegarMultidao
         * @param {*} data 
         * @param {*} pessoas 
         */
        function pegarMultidao(data, pessoas) {
            var deferred = $q.defer();
            /*var url = 'http://54.232.180.221/webservices/multidao.cfm?getNorthEast=' + NW.lat + ',' + NW.lng;
            url += '&getSouthWest=' + SE.lat + ',' + SE.lng;*/
            //var url = 'http://overpass.osm.rambler.ru/cgi/interpreter?data=[out:json];way[witdh](' + SE.lat + ',' + NW.lng + ',' + NW.lat + ',' + SE.lng + ');out;'
            var url = 'zona_observacao/multidao/' + JSON.stringify(data) + '/' + pessoas;

            $http.get(API_ENDPOINT + url)
                .then(function (res) {
                    if (res.data) {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject();
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method pegarCenso
         * @param {*} data 
         */
        function pegarCenso(data) {
            var deferred = $q.defer();
            /*var NE = data.topLeft;
            var SW = data.bottomRight;
            var NW = {
                lat: NE.lat,
                lng: SW.lng
            };
            var SE = {
                lat: SW.lat,
                lng: NE.lng
            };

            deferred.resolve([]);
            
            return deferred.promise;*/
            var url = 'zona_observacao/geoDataIbge';

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

            return deferred.promise;
        }

        /**
         * @method salvarZO
         * @param {*} data 
         * @param {*} user 
         */
        function salvarZO(data, user) {
            console.log(data.inicio);
            console.log(data.fim);

            var deferred = $q.defer();

            var url = 'zona_observacao/';
            var zonaObservacao = {
                nome: data.nome,
                descricao: data.descricao || '',
                inicio: data.inicio && date2timestamp(data.inicio),
                fim: data.inicio && date2timestamp(data.fim),
                publico: data.publico,
                geojson: data.geojson,
                DepartamentoId: user.Departamento.id,
                latitude: data.latitude,
                longitude: data.longitude,
                GruposUsuarios: data.GruposUsuarios,
                Usuarios: data.Usuarios
            }

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

            return deferred.promise;
        }

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

            $http.post(API_ENDPOINT + 'zona_observacao/' + id, {
                nome: data.nome,
                descricao: data.descricao,
                inicio: date2timestamp(data.inicio),
                fim: date2timestamp(data.fim),
                GruposUsuarios: data.GruposUsuarios,
                Usuarios: data.Usuarios
            }).then(function (res) {
                deferred.resolve(res);
            }, function (err) {
                deferred.reject(err);
            });

            return deferred.promise;
        }

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

            var url = 'datamining/geojson/' + JSON.stringify(obj);

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

            return deferred.promise;
        }

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

            var url = 'incidentes/geojson/' + JSON.stringify(obj);

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

            return deferred.promise;
        }

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

            var url = 'cameras/geojson/' + JSON.stringify(obj);

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

            return deferred.promise;
        }

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


            var url = 'base_conhecimento/geojson/' + JSON.stringify(obj);

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

            return deferred.promise;
        }

        // Manipulado alarmes

        /**
         * @method addAlarme
         * @param {*} id 
         * @param {*} alarme 
         */
        function addAlarme(id, alarme) {
            var deferred = $q.defer();
            var url = 'alarme/zo/' + id;

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

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

            return deferred.promise;
        }

        /**
         * @method updateAlarme
         * @param {*} alarme 
         */
        function updateAlarme(alarme) {
            var deferred = $q.defer();
            var url = 'alarme/zo/' + alarme.id;

            $http.post(API_ENDPOINT + url, alarme)
                .then(function (res) {

                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject();
                    }

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

            return deferred.promise;
        }

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

            var url = 'alarme/zo/' + id;

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

            return deferred.promise;
        }

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

            var url = 'alarme/' + id;
            $http.delete(API_ENDPOINT + url)
                .then(function (res) {
                    deferred.resolve(res.data);
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        // Manipulando tarefas

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

            var url = 'zona_observacao/' + id + '/tarefas';

            $http.post(API_ENDPOINT + url, 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 updateTarefa
         * @param {*} id 
         * @param {*} obj 
         */
        function updateTarefa(id, obj) {

            var deferred = $q.defer();

            var url = 'tarefas/' + id;

            $http.put(API_ENDPOINT + url, 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 pegarTarefas
         * @param {*} obj 
         */
        function pegarTarefas(obj) {
            var deferred = $q.defer();

            var url = 'zona_observacao/tarefas/' + obj.id;

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

            return deferred.promise;
        }

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

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

            return deferred.promise;
        }

        /**
         * @method pegarAreasAtuacao
         * @param {*} id 
         */
        function pegarAreasAtuacao(id) {
            return Base.obter('zona_observacao/' + id + '/area_atuacao');
        }

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

            var url = 'zona_observacao/camadas/' + id;
            $http.delete(API_ENDPOINT + url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject();
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }


        return {
            updateAlarme: updateAlarme,
            removerAlarme: removerAlarme,
            pegarAlarmes: pegarAlarmes,
            addAlarme: addAlarme,
            pegarBasesConhecimento: pegarBasesConhecimento,
            pegarIncidentes: pegarIncidentes,
            pegarCameras: pegarCameras,
            pegarPoisArea: pegarPoisArea,
            pegarCenso: pegarCenso,
            pegarTwitter: pegarTwitter,
            pegarMultidao: pegarMultidao,
            pegarZonas: pegarZonas,
            pegarZona: pegarZona,
            pegarTarefas: pegarTarefas,
            deletarZona: deletarZona,
            addTarefa: addTarefa,
            updateTarefa: updateTarefa,
            removerTarefa: removerTarefa,
            salvarZO: salvarZO,
            atualizarZO: atualizarZO,
            pegarAreasAtuacao: pegarAreasAtuacao,
            removerCamada: removerCamada
        };
    }

    ZonaObservacaoService.$inject = ['$http', '$q', 'API_ENDPOINT', 'Base'];

    angular.module('s4c.components.zonaObservacao')
        .service('ZonaObservacaoService', ZonaObservacaoService);
})();