Árvore de páginas

DADOS GERAIS SOBRE O RECURSO

O sistema conta com a simulação de rota baseado no cadastro de coordenadas GPS demarcando o Ponto Sede da Filial, Propriedade do Cliente, Ponto Central dos talhões ou ainda para a demarcação de mapeamentos GPS. A inclusão dessas coordenadas pode ser realizada de maneira automática, com a demarcação de pontos em um mapa (Ambiente Web), utilizando o GPS do aparelho (Ambiente Android), ou ainda através da inserção manual das informações de latitude e longitude. 

Essa configuração permite realizar o planejamento das agendas dos profissionais de forma que seja possível entender a distância planejada para eles em cada um dos dias, e depois essa informação é comparada com o que foi efetivamente realizado pelos profissionais assim como já acontecia no Módulo de viagem.

A ferramenta TOTVS CRM - SFA possui vários locais para realizar o cadastramento/exibição de coordenadas GPS, sejam elas para demarcar o Ponto sede da propriedade do cliente, o Ponto Central dos Talhões, ou ainda para a demarcação de mapeamentos GPS. Neste requisito foi incluso a demarcação de pontos em um mapa (Ambiente Web), utilizando o GPS do aparelho (Ambiente Android), ou ainda através da inserção manual das informações de latitude e longitude.

Para os lançamento manual das coordenadas, assim como para os casos de visualização das coordenadas previamente cadastradas, o usuário é capaz de escolher a forma que gostaria de visualizar essas coordenadas:

  • Graus, Minutos e Segundos;
  • Coordenadas decimais.

Para atender às novas necessidades, foram implementadas as seguintes melhorias no SFA:

    ESCOPO FUNCIONAL

    Configurações

    Para a inclusão dos pontos adicionais, o usuário utiliza o botão de adicionar ao lado do campo de data da rota, o qual ao ser pressionado, abre uma janela de inserção de campos adicionais.

    Este botão é exibido se ativado o parâmetro sim3g.rota. Ao ativa-lo, o usuário pode aplicar também as validações dos parâmetros filho:  

    • sim3g.rota: Quando ativo, o sistema utiliza pontos adicionais de gps na rota ( pontos de partida e chegada, assim como refeição) assim como o número de refeições.
      • sim3g.rota.permite.pontosgpsadicionais: Quando ativo a aplicação permitirá pontos adicionais na rota, ponto de partida, ponto de chegada e pontos de refeição.

      • sim3g.rota.quantidade.refeicoesnarota: Quando ativo determina o total de pontos de refeição poderão ser cadastrados, por exemplo, 2 onde, o valor 2 significa que o usuário poderá inserir até 2 pontos de refeição em uma rota diária.

    1. Criação de Ponto de partida, Ponto de chegada e Ponto de refeição para as rotas

    1.1 Inclusão de Local como Ponto Sede para Filiais

    Acessando a tela para cadastro do Local de Ponto Sede para a empresa/filial, o qual é utilizado posteriormente no módulo de rotas. O acesso a essa tela depende do perfil de acesso do usuário, pois somente aqueles usuários que tenham o acesso liberado a essa tela, poderão visualizá-la.
    Na parte superior da Grid, há os campos de busca, para que seja possível filtrar os registros de filiais que estão sendo apresentados na tela. Sendo assim, é exibido as empresas cadastradas no ERP e o usuário pode realizar o cadastro do Ponto sede:

    • Acesse Módulo Cadastro > Geral > Filial

    Clique no Botão Ponto GPS para informar os dados do Endereço da Filial

    Lembrando que essa tela não faz o cadastro das filiais, pois essa informação deve vir do ERP via integração. Além disso, não é possível editar o cadastro da empresa nessa tela, pois essa edição também deve partir do ERP.

    1.2 Inclusão de Local como Ponto Sede e Mapeamento do local para Clientes

    Telas de cadastro e edição de Ponto sede - GPS e Mapeamento de Local - GPS

    • Acesse Módulo Cliente > Cliente > Clique no Botão "Ponto Sede" e/ou "Mapeamento do Local"

    • Acesse Módulo Cliente > Cliente > Listar > Editar > Local > Clique no Botão "Ponto Sede" e/ou "Mapeamento do Local"


    • Acesse Módulo Cliente > Expandir "Local" e Clique longo > Opção GPS - Sede  > Editar 

    • Acesse Módulo Cliente > Expandir Local e clique Simples para edição > Guia "Cadastro" > Local (Toque Longo) > Opção Ponto Sede  > Editar 

    1.3 Inclusão de Local como Mapeamento GPS para Projetos Agrícolas

    Telas de cadastro e edição de Mapeamento GPS do Projeto Agrícola

    • Acesse Módulo Agrícola > Projetos Agrícolas > Opção Área Mapeada > Clique no Botão "Mapeamento do Local"

    • Acesse Módulo Agrícola > Projetos Agrícolas > Opção Editar  > Clique no Botão "Mapeamento do Local"

    • Acesse Módulo Cliente > Local (Toque Simples) > Aba Agrícola > Projeto (Toque Simples) > Talhão (Toque Simples) > Aba Mapeamento > Opção Pontos Mapeados  

    1.4 Inclusão de Local para Bem Patrimonial - Coordenada do Bem

    Telas de cadastro e edição de Coordenada dos Bens

    • Acesse Módulo Cliente > Local (Toque Simples) > Aba Bens > Bem Patrimonial (Toque Simples) > Opção Ponto GPS  > Editar 

    2. Implementação do cálculo de distância nas Rotas


    3. Implementação de ponto GPS para as filiais/empresas



    4. Implementação de ponto GPS para os usuários.


    4. Implementação de ponto GPS para os usuários.




    • LISTA DE PREÇOS - CONSULTA

    Os usuários devem ser capazes de consultar as listas de preços diretamente pelo TOTVS CRM - SFA, no menu de contexto do produto, da tela de consulta de produto.

    Essa consulta apresentará em quais tabelas de preço que o produto se encontra, mostrando também o preço que esse produto tem nessa lista de preços, além da vigência da tabela de preços.

    Essa consulta será implementada apenas no ambiente Android da ferramenta.

    Regras:

    • Haverá parametrização para definir se essa tela de consulta de lista de preços estará disponível ou não na versão;
    • O acesso à consulta de preços  poderá ser restrita por perfil de acesso;
    • Os preços serão exibidos da forma com que estão cadastrados nas tabelas de preço;
    • Como essa tela é utilizada apenas para consulta, não haverá validações sobre quais tabelas exibir ou não, ou seja, serão exibidas sempre todas as tabelas que tiverem os produtos.

    Esta regra servirá para definir se o perfil de acesso está permitido acessar o preço dos produtos no ambiente mobile no módulo de consulta de produtos, desde que o parâmetro também esteja habilitado.

    Implementação da funcionalidade no mobile

    Dentro de: “Menu principal” > “Consulta” > “Produtos”.

    Na listagem de produtos, a aplicação permitirá abrir um submenu de opções quando o usuário der um longo click em algum produto da listagem.

    Se o perfil de acesso do usuário logado tiver vínculo com a regra de chave “mobile.regra.acesso.consulta.produtos.preco”, dentro das opções abertas deverá ter o botão “Preço”.

    Quando o usuário acionar o botão “Preço”, o android deverá abrir na aba de preços listando todos os preços que o produto em questão fizer parte. Ou seja, todos os registros que estiverem em TabelaPrecoProduto em que o produto fizer parte, deve ser apresentado nesta listagem.

    Nesta listagem deverá ser apresentada com os seguintes campos:

    • Tabela: <TabelaPreco.Descricao>
    • Preço: <TabelaPrecoProduto.Preco>
    • Vigência: <TabelaPrecoProduto.DataInicioVigencia> - <TaelaPrecoProduto.DataFimVigencia>

    A seguir os protótipos de telas para esta funcionalidade:



    ESTOQUE DISPONÍVEL - CONSULTA

    Os usuários devem ser capazes de consultar os estoques dos produtos diretamente pelo TOTVS CRM - SFA, no menu de contexto do produto, da tela de consulta de produto.

    Essa consulta apresentará em quais filiais o produto possui saldo de estoque, apresentando também o volume do produto que há em estoque em cada uma das filiais, apresentando os seguintes tipos de estoques:

    • Físico;
    • Disponível;
    • Geral.


    Regras:

    • Será adicionado Tipo de Estoque na aba de consulta de estoque, dentro da consulta do produto;
    • Serão realizados ajustes na tela de estoque, do menu de contexto, para sejam exibidos os três tipos de estoques;
    • Ao final da tela de consulta de estoque, deve aparecer o totalizador de cada um dos tipos de estoque que foram listados:
      • Total Disponível
      • Total Físico
      • Total Geral
    • Os volumes de estoque serão apresentados da mesma forma que foram importados do ERP, ou seja, não será realizado nenhum cálculo ou conversão dos valores para exibição em tela;
    • Será implementado apenas no ambiente Android do TOTVS CRM - SFA.

    ESCOPO TÉCNICO

    Criação de campos e tabelas

    Foi necessário implementar novos campos em tabelas no banco de dados, para armazenar as informações das rotas, de acordo com o definido neste escopo.

    Tabela rotaLocal

    • Campo para armazenar a distância em km do ponto atual até o ponto anterior, calculado pela “Rota Direta”. Ex: kmDiretoPontoAnterior;
    • Campo para armazenar a distância em km do ponto atual até o ponto anterior, calculado pela “Rota Direta”. Ex: kmSimuladoPontoAnterior;
    • Campo para vincular o registro da rota, com o usuário selecionado na rota, para os casos de ponto com origem no usuário
    • Campo para vincular o registro da rota, com a filial selecionado na rota, para os casos de ponto com origem na filial
    • idPontoGps - Campo para vincular o registro com o ponto gps apontado no mapa pelo usuário, para casos de incluir ponto gps selecionado no mapa como Partida, Chegada ou refeição.
    • Campo para identificar o tipo do ponto - saída, chegada, refeição ou cliente
    • Remoção de obrigatoriedade em alguns campos, para permitir que sejam armazenados na mesma tabela, os pontos de partida, chegada e refeição

    Tabela pontoGPS

    • Campo para vínculo do Ponto GPS com a tabela rotaLocal, para gravar os pontos informados na rota
    • Campo para vínculo do Ponto GPS com a tabela de usuário, para armazenar o ponto GPS do usuário

    Criação de campos e tabelas - Tools

    Foram criados novos campos na tabela ROTALOCAL com as seguintes informações:


    NOME DO CAMPO


    TIPO

    1

    KMDIRETOPONTOANTERIOR

    NULLABLE

    numeric(18,6)

    2

    KMSIMULADOPONTOANTERIOR

    NULLABLE

    numeric(18,6)

    3

    IDUSUARIO

    FK USUARIO.IDSUARIO NULLABLE

    integer

    4

    IDLOCALFILIAL

    FK LOCAL.IDLOCAL NULLABLE

    integer

    5

    IDPONTOGPS

    FK PONTOGPS.IDPONTOGPS NULLABLE

    integer

    6

    SGLTIPOPONTO

    NULLABLE

    VARCHAR(20)

    Os seguintes campos tem a obrigatoriedade removida da tabela ROTALOCAL:


    NOME DO CAMPO


    TIPO

    1

    IDLOCAL

    NULLABLE


    2

    IDPARCEIRO

    NULLABLE


    Foram criados novos campos na tabela PONTOGPS com as seguintes informações:


    NOME DO CAMPO


    TIPO

    1

    IDROTALOCAL

    FK ROTALOCAL.IDROTALOCAL NULLABLE

    INTEGER

    2

    IDLOCALFILIAL

    FK LOCAL.IDLOCAL NULLABLE

    INTEGER

    Criação de Parâmetros

    Foi criado novos parâmetros no SFA, para determinar o comportamento das telas de rotas, a respeito da inclusão de pontos adicionais.

    sim3g.rota

    • Parâmetro agrupador para os demais parâmetros de rotas que deve ter as seguintes informações:
      • Idnativo=1
      • Chave=sim3g.rota
      • Descrição=Parâmetro agrupador dos parâmetros de pontos adicionais e qtde de refeições.
      • Observação= Se ativo, o sistema poderá utilizar pontos adicionais de gps na rota ( pontos de partida e chegada, assim como refeição) assim como o número de refeições.
      • Valor=0
      • Sglambiente=Todos
      • Sglcontexto=Rota
      • Sglmodulo=Rota

    Valores possíveis 1 e 0 ( zero), quando o valor o parâmetro for 1 a aplicação passará a considerar os parâmetros abaixo ( sim3g.rota.permite.pontosgpsadicionais e sim3g.rota.quantidade.refeicoesnarota), quando zero, os parâmetros abaixo não são considerados na aplicação.

    sim3g.rota.permite.pontosgpsadicionais

    • Parâmetro para definir se o módulo de rotas deve ou não ter pontos adicionais (pontos de partida, chegada e refeição)
      • Idnativo=1
      • Chave=sim3g.rota.permite.pontosgpsadicionais
      • Descrição=Parâmetro que determina se poderão ser utilizados pontos adicionais na rota..
      • Observação= Se o parâmetro tiver valor 1, a aplicação permitirá pontos adicionais na rota, ponto de partida, ponto de chegada e pontos de refeição.
      • Valor=0
      • Sglambiente=Todos
      • Sglcontexto=Rota
      • Sglmodulo=Rota
      • Idparametrosuperior=sim3g.rota

    Valores possíveis: 1 e 0 (zero). Caso o parâmetro sim3g.rota esteja inativo ou com valor 0 este parâmetro é inativado não sendo usado na aplicação.

    sim3g.rota.quantidade.refeicoesnarota

    • Parâmetro filho do anterior, para determinar o número de refeições diárias permitidas.
      • Idnativo=1
      • Chave=sim3g.rota.quantidade.refeicoesnarota
      • Descrição=Parâmetro para determinar o número de refeições diárias permitidas.
      • Observação= Campo recebe um Valor numérico inteiro, que determina o total de pontos de refeição poderão ser cadastrados, por exemplo, 2 onde, o valor 2 significa que o usuário poderá inserir até 2 pontos de refeição em uma rota diária.
      • Valor=0
      • Sglambiente=Todos
      • Sglcontexto=Rota
      • Sglmodulo=Rota
      • Idparametrosuperior=sim3g.rota.permite.pontosgpsadicionais

    Valores possíveis: Valores inteiros maiores que zero. Caso o parâmetro sim3g.rota.permite.pontosgpsadicionais esteja inativo ou com valor 0 este parâmetro é inativado não sendo usado na aplicação.

    Implementação tela de Filiais

    Foi foi implementado uma nova tela no ambiente Web do SFA, para que seja possível visualizar e editar o cadastros das empresas/filiais no SFA, a qual ficará no novo menu Cadastro > Geral > Filial.

    Dados da Grid:

    Na grid, são apresentadas as seguintes informações das empresas/filiais:

      • Descrição
        • Campo do tipo textfild não editável que exibe a informação do campo parceiro.nomeparceiro.
      • CNPJ:
        • Campo do tipo textfild não editável que exibe a informação do campo local.documentoidentificacao.
      • Endereço:
        • Campo do tipo textfild não editável que exibe a informação do campo local.logradouro.
      • Número:
        • Campo do tipo textfild não editável que exibe a informação do campo local.numerologradouro.
      • Complemento:
        • Campo do tipo textfild não editável que exibe a informação do campo local.complemento.
      • CEP:
        • Campo do tipo textfild não editável que exibe a informação do campo local.cep.
      • Cidade:
        • Campo do tipo textfild não editável que exibe a informação do campo cidade.descricao da cidade vinculada ao local, onde, cidade.idcidade = local.idcidade
      • Unidade Federativa:
        • Campo do tipo textfild não editável que exibe a informação do campo unidadefederativa.descricao da unidade federativa vinculada a cidade ligada ao local, onde,  unidadefederativa.idunidadefederativa = cidade.idunidadefederativa
      • País:
        • Campo do tipo textfild não editável que exibe a informação do campo pais.descricao do país vinculado a unidade federativa do local, onde, unidadefederativa.idpais = pais.idpais
      • Situação:
        • Campo do tipo textfild não editável que exibe a informação do campo parceiro.idnativo, onde caso o valor do campo seja 1 então a aplicação exibe a informação de “Ativo” e caso o valor do campo seja 0 (zero) ou null exibe “Inativo”.
      • Ponto GPS (ícone de casa): é o único cadastro que é possível realizar nesta tela, o cadastro de ponto sede para a empresa/filial, o qual é utilizado posteriormente no módulo de rotas e está disponível no ícone . ( Comportamento do cadastro dos pontos gps no requisito ”Implementação de Ponto GPS para as Filiais - Web - Escopo técnico Aplicação” )

    Consulta Avançada

    Na parte superior da Grid, há campos de busca, para que seja possível filtrar os registros de filiais que estão sendo apresentados na tela. Estará disponível um campo de pesquisa rápida, para filtrar pelos campos que estão na grid, e há um botão de pesquisa avançada, para que seja possível filtrar por campos específicos, sendo eles:

    • Descrição
      • Campo do tipo textfild de digitação livre, não obrigatório;
      • Ao digitar qualquer valor a aplicação deverá buscar os registros de filial filtrando pelo campo parceiro.nomeparceiro.
    • CNPJ:
      • Campo do tipo textfild de digitação livre, não obrigatório;
      • Ao digitar qualquer valor a aplicação deverá buscar os registros de filial filtrando pelo campo local.documentoidentificacao.
    • Endereço:
      • Campo do tipo textfild de digitação livre, não obrigatório;
      • Ao digitar qualquer valor a aplicação deverá buscar os registros de filial filtrando pelo campo local.logradouro.
    • Número:
      • Campo do tipo textfild de digitação livre, não obrigatório;
      • Ao digitar qualquer valor a aplicação deverá buscar os registros de filial filtrando pelo campo local.numerologradouro.
    • Complemento:
      • Campo do tipo textfild de digitação livre, não obrigatório;
      • Ao digitar qualquer valor a aplicação deverá buscar os registros de filial filtrando pelo campo local.complemento.
    • CEP:
      • Campo do tipo textfild de digitação livre, não obrigatório;
      • Ao digitar qualquer valor a aplicação deverá buscar os registros de filial filtrando pelo campo local.cep.
    • Cidade:
      • Campo do tipo combobox com multi seleção, não obrigatório;
      • Deve trazer os registros da tabela:

    select * from cidade where idnativo =1

      • cidade.idcidade onde cidade.idcidade = local.idcidade
    • Unidade Federativa:
      • Campo do tipo combobox com multi seleção, não obrigatório;
      • Deve trazer os registros da tabela:

    select * from unidadefederativa  uf where uf.idnativo =1

      • uf.idunidadefederativa onde cidade.idunidadefederativa =uf.idunidadefederativa
    • País:
      • Campo do tipo combobox com multi seleção, não obrigatório;
      • Deve trazer os registros da tabela:

    select * from pais where idnativo =1

      • pais.idpais onde unidadefederativa.idpais = pais.idpais
    • Situação:
      • Campo do tipo check box, com as opções:
        • Sim;
          • Opção que deve vir selecionada por padrão, a qual deve filtrar as filiais pelo campo parceiro.idnativo=1;
        • Não
          • Opção que deve vir selecionada por padrão, a qual deve filtrar as filiais pelo campo parceiro.idnativo=0;
    select
    	p.nomeparceiro as descricao,
                l.descricao, as local,
    	l.documentoidentificacao as cnpj,
    	l.logradouro as endereco,
    	l.numerologradouro as numero,
    	l.complemento,
    	l.cep,
    	c.descricao as cidade,
    	u.descricao as unidade_federativa,
    	pa.descricao as pais,
    	case when p.idnativo=1 then 'ativo' else 'inativo' end as situacao
    	from parceiro p
    inner join parceirolocal pl on pl.idparceiro = p.idparceiro
    inner join local l on l.idlocal = pl.idlocal
    inner join cidade c on l.idcidade = c.idcidade
    inner join unidadefederativa u on u.idunidadefederativa = c.idunidadefederativa
    inner join pais pa on pa.idpais = u.idpais
    inner join localtipolocal ltl on ltl.idlocal = l.idlocal
    inner join tipolocal tl on tl.idtipolocal = ltl.idtipolocal
    where
    p.idnativo in (:SITUACAO)
    and tl.sgltipolocal in ('UEM','VEN')
    and (p.nomeparceiro ILIKE '%' ||:TEXTO_INSERIDO || '%'
    OR l.documentoidentificacao ILIKE '%' ||:TEXTO_INSERIDO || '%'
    OR l.logradouro ILIKE '%' ||:TEXTO_INSERIDO || '%'
    OR l.numerologradouro ILIKE '%' ||:TEXTO_INSERIDO || '%'
    OR l.complemento ILIKE '%' ||:TEXTO_INSERIDO || '%'
    OR l.cep ILIKE '%' ||:TEXTO_INSERIDO || '%')
    AND (pa.idpais in (:LISTA_DE_PAIS)
    OR (:LISTA_DE_PAIS) IS NULL)
    AND (u.idunidadefederativa in (:LISTA_DE_UNIDADE_FEDERATIVAS)
    OR (:LISTA_DE_UNIDADE_FEDERATIVAS) IS NULL)
    AND (c.idcidade in (:LISTA_DE_CIDADE)
    OR (:LISTA_DE_CIDADE) IS NULL)

    Implementação de Ponto GPS para as Filiais

    Foi necessário implementar uma funcionalidade, que permite cadastrar/visualizar/editar um ponto GPS para as empresas/filiais cadastradas no SFA, diretamente na tela de listagem de filiais (Nova tela descrita no requisito anterior “Implementação tela de filiais no SFA - Web”).

    Nessa tela, o usuário pode realizar o cadastro e a edição do Ponto GPS das filiais, o qual será utilizado posteriormente no módulo de rotas.

    A popup de cadastro apresenta as funcionalidades: 

    • Visualização do ponto previamente cadastrado;
    • Permite cadastrar novo ponto;
    • Permite visualizar as coordenadas do ponto GPS, em Graus decimais e em Graus, Minutos e Segundos;
    • Permite alterar as Coordenadas GPS

    Persistência: Ao persistir os dados na tabela PONTOGPS o campo PONTOGPS.IDLOCALFILIAL deve receber o valor de LOCAL.IDLOCAL (Local da filial);

    Implementação de Ponto GPS para os usuários

    Foi necessário realizar ajustes nos cadastros de usuários, para ter a possibilidade de cadastrar o Ponto GPS do usuário, e assim poder apresentar e utilizar essa informação no módulo de rotas. Então acessando a Tela de Cadastro de usuário  “Cadastro” > “Profissional” > “Profissional” foi adicionado o botão “Ponto GPS”, o qual será utilizado para visualizar e dar manutenção no cadastro de ponto GPS dos usuários.

    Ao clicar sobre o botão “Ponto GPS”, é apresentada uma popup que apresenta as funcionalidades:

    • Visualização do ponto previamente cadastrado;
    • Permite cadastrar novo ponto;
    • Permite visualizar as coordenadas do ponto GPS, em Graus decimais e em Graus, Minutos e Segundos;
    • Permite alterar as Coordenadas GPS.

    Ajustes perfil de acesso - Cadastro de empresas e usuários

    Segue abaixo as opções implementadas no cadastro de perfil de acesso:

    • Dentro de Web -> Cadastros -> Geral
      • Filial - Opção que determina se o menu que dá acesso à tela de cadastro de filiais estará ou não disponível;
        • Chave= regra.acesso.cadastro.geral.filial
        • Regra superior= regra.acesso.cadastro.geral
        • Visualizar - Opção para determinar a permissão de visualizar a tela de cadastro das filiais;
          • Chave= regra.acesso.cadastro.geral.filial.visualizar
          • Regra superior= regra.acesso.cadastro.geral.filial
        • Ponto Sede- Opção para determinar se o ícone de Ponto Sede estará ou não visível na listagem;
          • Chave= regra.acesso.cadastro.geral.filial.pontosede
          • Regra superior= regra.acesso.cadastro.geral.filial
          • Visualizar - Opção para determinar a permissão de visualização do ponto sede cadastrado para a filial;
            • Chave= regra.acesso.cadastro.geral.filial.pontosede.visualizar
            • Regra superior= regra.acesso.cadastro.geral.filial.pontosede
      • Adicionar/Editar - Opção para controlar a permissão de edição do ponto sede da filial.
        • Chave= regra.acesso.cadastro.geral.filial.pontosede.adicionareditar
        • Regra superior= regra.acesso.cadastro.geral.filial.pontosede
    • Dentro de Web -> Cadastros -> Profissional -> Profissional -> Profissional
      • Ponto GPS - Opção para determinar se o botão de Ponto GPS estará ou não visível no cadastro do usuário
        • Chave=regra.acesso.cadastro.usuario.cadastro.profissional.pontogps
        • Regra superior=regra.acesso.cadastro.usuario.cadastro.profissional
        • Visualizar - Opção para determinar a permissão de visualização do ponto GPS cadastrado para o usuário;
          • Chave=regra.acesso.cadastro.usuario.cadastro.profissional.pontogps.visualizar
          • Regra superior= regra.acesso.cadastro.usuario.cadastro.profissional.pontogps
        • Adicionar/Editar - Opção para controlar a permissão de edição do ponto GPS do usuário.
          • Chave=regra.acesso.cadastro.usuario.cadastro.profissional.pontogps.adicionareditar
          • Regra superior= regra.acesso.cadastro.usuario.cadastro.profissional.pontogps

    Implementação de pontos adicionais nas rotas

    Foi implementado a funcionalidade no módulo de rotas, para que seja possível determinar pontos adicionais nas rotas, além dos clientes, sendo eles: ponto de partida, ponto de chegada e ponto de refeição. Esses pontos adicionais são exibidos na parte de “roteiro” da tela de clientes da rota, permitindo assim a visualização da rota diária de maneira completa.

    Para controlar a utilização ou não dos pontos adicionais, a aplicação respeita as parametrizações que foram realizadas a respeito dessa funcionalidade (Requisito “Criação de Parâmetros”).

    Para a inclusão dos pontos adicionais, é foi implementado um botão de adicionar ao lado do campo de data da rota, o qual ao ser pressionado, abre uma popup de inserção de campos adicionais. Este botão é exibido apenas se a parametrização permitir a visualização desta funcionalidade (Requisito “Criação de Parâmetros”).

    Ao clicar no botão de adicionar uma pop-up é exibida com as seguintes opções:

    Tipo de Ponto: Primeiro o usuário deve escolher o tipo de ponto adicional deseja inserir na rota:

    Campo do tipo combobox, obrigatório, com as seguintes opções:

    • “Ponto de Partida”, 
      • Quando selecionado é persistido no campo ROTALOCAL.SGLTIPOPONTO = ‘PARTIDA’;
    • “Ponto de Refeição”, 
      • Quando selecionado é persistido no campo ROTALOCAL.SGLTIPOPONTO = ‘REFEICAO’;
    • “Ponto de Chegada”;
    • Quando selecionado é persistido no campo ROTALOCAL.SGLTIPOPONTO = ‘CHEGADA’;

    Obs: A exibição dessas opções no campo depende da parametrização da aplicação e dos registros previamente cadastrados na rota, pois cada dia da rota pode ter apenas 1 Partida, 1 Chegada e X Refeições (Onde X é o valor de refeições permitidas que foi parametrizado). .

    Origem do Ponto: Deverão estar disponíveis as seguintes opções: 

    Campo combobox obrigatório, com as seguintes opções:

    • “Filial” - Será utilizado como referência o Ponto Sede da filial na localização da rota;
    • “Usuário” - Será utilizado como referência o Ponto GPS do usuário na localização da rota;
    • “Selecionado no Mapa” - O usuário deverá definir um ponto GPS no mapa para utilizar na rota;

    Obs: Será possível combinar todos os “tipos de pontos” com todas as “origens de pontos”, devendo o usuário informar a cada novo registro qual a origem do ponto para o ponto adicional que está sendo incluído na rota.

    Definição da localização: A definição da localização vai depender da origem selecionada pelo usuário, podendo ser apresentadas as seguintes opções:

      • Campo do tipo combobox, obrigatório com as seguintes informações:

    Opção 1 - Seleção da filial - Quando selecionado Filial no campo Origem do ponto.

    • Quando a origem do ponto forem as filiais, aqui serão listadas todas as filiais vinculadas ao cadastro do usuário (Ou todas as filiais, caso não tenha nenhuma vinculada). O usuário deverá selecionar uma única filial neste campo. Serão exibidas todas as filiais, independentemente de a filial ter ou não um ponto sede cadastrado, informação essa que é verificada no mapa ao lado.
    • Abaixo do campo definição da localização, quando selecionada uma filial é exibida as seguintes informações:
      • Campo textlabel chamado “Informações da Filial:” com as seguintes informações: LOCAL.DESCRICAO.


    select distinct l.descricao,L.logradouro,L.numeromatricula,L.bairro,c.descricao,uf.sigla,l.documentoidentificacao from local l
    inner join cidade c on c.idcidade = l.idcidade
    inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
    inner join localtipolocal ltl on ltl.idlocal = l.idlocal
    inner join tipolocal tl on tl.idtipolocal = ltl.idtipolocal
    inner join usuariofilial ufi on ufi.idlocalfilial = l.idlocal
    inner join usuario u on u.idusuario = ufi.idusuario
    where
    l.idnativo =1
    and tl.sgltipolocal in ('UEM','VEN')
    and u.idusuario = --USUARIO_SELECIONADO_NA_ROTA


    Caso a consulta acima não retorne nenhuma filial Foram listadas todas as filiais ativas através da seguinte consulta:


    select l.descricao,L.logradouro,L.numeromatricula,L.bairro,c.descricao,uf.sigla,l.documentoidentificacao from local l
    inner join cidade c on c.idcidade = l.idcidade
    inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
    inner join localtipolocal ltl on ltl.idlocal = l.idlocal
    inner join tipolocal tl on tl.idtipolocal = ltl.idtipolocal
    where
    l.idnativo =1
    and tl.sgltipolocal in ('UEM','VEN')


    Opção 2 - Confirmação do usuário  - Quando selecionado usuário no campo “Origem do ponto”.

    • Campo do tipo combobox, obrigatório com as seguintes informações:
    • Quando a origem do ponto for o cadastro de usuários, aqui é apresentado o nome do usuário a que a rota pertence, não sendo possível alterar o usuário selecionado. O nome será exibido sempre, independentemente de o usuário ter ou não um ponto GPS cadastrado, informação essa que é verificada no mapa ao lado.
    • Consulta SQL:


    select nome from rota r
    inner join usuario u on u.idusuario = r.idusuario
    where r.idusuario = ‘USUARIO_SELECIONADO_NA_ROTA’


    Opção 3 - Escolha de ponto no mapa  - Quando selecionado “Selecionado no Mapa” no campo “Origem do ponto”.

    • Quando a origem do ponto for “Selecionado no Mapa”, aqui é apresentado um botão chamado “Selecionar Ponto”, para iniciar a definição do ponto GPS no mapa ao lado, onde o usuário deverá marcar no mapa a localização desejada.
    • Quando pressionado este botão, a aplicação apresentará uma mensagem ao usuário, indicando que ele deve selecionar no mapa ao lado o ponto desejado. Mensagem: “Selecione o ponto gps no mapa ao lado <ok>” - Mensagem exibida com o componente “Alert”.
    • Ao selecionar um ponto GPS no mapa a aplicação deverá exibir a informação das coordenadas selecionadas logo abaixo do botão “Selecionar Ponto” da seguinte forma:
      • Campo do tipo textfiel não obrigatório com as seguintes informações: Coordenadas: “Longitude” x “latitude” selecionadas no mapa”.
    • Mapa de Ponto GPS: Ao lado das opções, é apresentado um mapa, que terá o seu carregamento alterado de acordo com as opções selecionadas nas opções anteriores, sendo apresentado da seguinte forma:
      • Quando a origem do ponto forem as filiais: 
        • O mapa apresentará o ponto sede da filial que foi selecionada (Definição da Localização -> Opção 1). 
        • Não será possível alterar o ponto no mapa, que será utilizado exclusivamente para visualização do ponto sede da filial selecionada;
        • Caso a filial selecionada não tenha ponto sede, o mapa será carregado com as coordenadas resetadas, não sendo possível adicionar o ponto adicional na rota. Também é exibida uma mensagem de informação “Filial sem ponto GPS cadastrado, não será possível incluí-lo na rota” - Tipo “Alert”
        • Consulta SQL:


    select * from pontogps
    where idlocalfilial = IDFILIAL_SELECIONADA_NO_CAMPO_DEFINICAO_DA_LOCALICAZAO


    • Quando selecionada uma filial no campo definição de localização é persistido o campo ROTALOCAL.IDLOCALFILIAL com o id da filial selecionada.
      • Quando a origem do ponto for o usuário: 
        • O mapa apresentará o ponto GPS do usuário que a rota pertence (Definição da Localização -> Opção 2). 
        • Não será possível alterar o ponto no mapa, que será utilizado exclusivamente para visualização do ponto GPS do usuário selecionado;
    • Caso o usuário não tenha ponto GPS, o mapa será carregado com as coordenadas resetadas, não sendo possível adicionar o ponto adicional na rota. Também é exibida uma mensagem de informação “Usuário sem ponto GPS cadastrado, não será possível incluí-lo na rota” - Tipo “Alert”
      • Consulta SQL:


    select * from pontogps
    where idusuario = IDUSUARIO_SELECIONADO_NO_CAMPO_DEFINICAO_DA_LOCALICAZAO


    • Quando selecionado um usuário no campo definição de localização deverá ser persistido o campo ROTALOCAL.IDUSUARIO com o id do usuário selecionado.
    • Quando a origem do ponto for “Selecionado no Mapa”: 
      • O mapa será carregado com as coordenadas resetadas, devendo o usuário utilizar as opções de navegação e pesquisa do mapa, para definir o ponto desejado.
      • Será possível também inserir as coordenadas do ponto de maneira manual, através dos campos apresentados na tela.
      • Quando apresentada essa opção, o mapa vai apresentar dois botões, para que o usuário possa limpar o ponto ou para gravar o ponto GPS selecionado no mapa.
        • Ao clicar em limpar, as coordenadas selecionadas deverão ser limpas, já clicando em “Confirmar localização” as coordenadas selecionadas deverão ser salvas na tabela PONTOGPS.LATITUDE, PONTOGPS.LONGITUDE, PONTOGPS.DATACADASTRO = CURRENT_DATE, PONTOGPS.ORDEMPONTO=0 e PONTOGPS.ALTITUDE
    • Quando selecionado “Selecionado no Mapa” no campo definição de localização deverá ser persistido o campo ROTALOCAL.IDPONTOGPS com o id do pontogps criado manualmente no mapa.
    • Botão de Voltar: Ao final da popup, haverá um botão de “Voltar”, para que o usuário possa cancelar a inclusão do ponto adicional.
      • Ao ser pressionado, a aplicação apresentará uma mensagem ao usuário, avisando que as informações não salvas serão perdidas e pedindo a confirmação do cancelamento. Após a confirmação do usuário, a popup será fechada.
        • Mensagem: As informações não salvas serão perdidas, deseja continuar?<S,N>, Clicando em “Sim” a pop-up será fechada, clicando em “Não” a pop-up se mantém aberta.


    • Botão de Gravar: Ao final da popup, ao lado do botão de Voltar, haverá um botão de Gravar, para que o usuário possa confirmar a inclusão do novo ponto na rota.
      • Ao Gravar, a popup será fechada, e a lista de roteiro deve ser atualizada, com a inclusão do ponto selecionado na popup na lista, apresentando também o novo ponto no mapa do roteiro (Desde que o ponto selecionado tenha coordenadas GPS);
      • Ao gravar o ponto selecionado deverá ser adicionado na listagem conforme imagem abaixo:
      • Este botão de Gravar estará disponível apenas quando o usuário concluir a seleção do ponto na popup. Desta forma, este botão ficará com status desabilitado até que todos os campos obrigatórios tenham sido preenchidos.

    Na listagem de clientes do roteiro, serão incluídos os “Cards” dos pontos adicionais, onde as informações apresentadas no Card dependem da origem do ponto, e também do seu “Tipo de Ponto”, conforme a seguir:

      • Ícone:
    • Ponto de Partida
    • Ponto de Refeição
    • Ponto de Chegada
    • Clientes
        • Seguem apresentando o ícone de numeração, representando a ordem do ponto na rota.

    Ao incluir os campos adicionais a coordenada geográfica é exibida na lista ao lado, como é hoje para os clientes. 

    • Informações do ponto para campos adicionais:
      • Se origem do ponto for a filial:
        • Filial: <Descrição da Filial>
          • Local.descricao;
        • <Endereço da Filial>
          • local.logradouro,local.numeromatricula,local.bairro,cidade.descricao,unidadefederativa.sigla
        • Consulta SQL: 


    select l.descricao,L.logradouro,L.numeromatricula,L.bairro,c.descricao,uf.sigla from local l
    inner join cidade c on c.idcidade = l.idcidade
    inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
    inner join rotalocal rl on rl.idlocalfilial = l.idlocal
    where
    rl.idlocalfilial = FILIAL_INSERIDA_NA_ROTA


    • Se origem do ponto for a usuário:
      • Usuário: <Nome do usuário>
      • <Endereço do usuário>
      • Consulta SQL:


    select nome,endereco from usuario
    inner join rotalocal rl on rl.idusuario = u.idusuario
    where
    rl.idusuario=USUARIO_INSERIDO_NA_ROTA


    • Se origem do ponto for “Selecionado no Mapa”:
      • Descrição: “Selecionado no Mapa”
      • <Latitude em graus decimais> x <Longitude em graus decimais>
      • Consulta SQL:


    select latitude, longitude from pontogps p
    inner join rotalocal rl on rl.idpontogps = p.idpontogps
    where
    rl.idpontogps=PONTOGPS_INSERIDO_NA_ROTA


    • Botão de remover:
      • Todos os tipos de pontos apresentarão o botão de remover “x”;
      • Ele ficará ao final do card, assim como já tem nos cards de clientes.

    Ordenação:

    • Ponto de Partida
      • Será apresentado como primeiro da lista;
      • Não permitirá reordenação;
      • Quando o registro tiver o campo ROTALOCAL.SGLTIPOPONTO = ‘PARTIDA’ deverá ser fixado na primeira posição da lista.
    • Ponto de Refeição
      • O card do “Ponto de Refeição” sempre vai ser incluído no ponto médio da lista de clientes, ou seja, se tiver 10 clientes na rota, este card vai ser inserido entre os clientes 5 e 6 da lista. Porém, o usuário pode mudar a ordem da refeição na lista do roteiro após a sua inserção. 
      • Quando o registro tiver o campo ROTALOCAL.SGLTIPOPONTO = ‘REFEICAO’ deverá ser fixado no meio da lista de clientes já inseridos na rota.
      • Ao adicionar novos clientes, a refeição não será reordenada, devendo o usuário reordenar se necessário. 
      • A ordenação automática da refeição como “ponto médio” ocorre apenas na inclusão deste ponto no roteiro.
    • Ponto de Chegada
      • é apresentado como o último da lista;
      • Não permitirá reordenação;
      • Quando o registro tiver o campo ROTALOCAL.SGLTIPOPONTO = ‘CHEGADA’ é fixado na última posição da lista.
    • Clientes
      • Os cards de clientes não podem ser posicionados antes ao card de Partida ou depois do card de Chegada. A aplicação deve impedir essas ações:
        • Ao incluir novos clientes na rota, caso já exista ponto de Chegada, o cliente deve ser incluído imediatamente antes do ponto de chegada, uma vez que o ponto de chegada é sempre o último da rota;
        • O ícone de numeração dos pontos de clientes na rota deve levar em consideração os pontos adicionais que foram incluídos, de forma que a sua ordem representa sempre a posição do card na rota diária;
          • Ex: Quando houver ponto de partida, o primeiro cliente que for inserido na rota, será o ponto de número 2.
          • Ex2: Se houver 10 clientes na rota, e for incluído um ponto de refeição no meio (Automaticamente incluído no ponto médio), o ponto de refeição passa a ser o ponto número 6, e o cliente que era o número 6, passa a ser o 7, e assim sucessivamente.

    O mapa da rota também foi ajustado, para que ele passe a apresentar os novos pontos cadastrados, onde será possível identificar no mapa esses novos pontos através dos seus ícones, que representam os tipos de pontos, conforme a seguir:

    • O ícone será exibido para o registro da tabela ROTALOCAL onde o campo SGLTIPOPONTO = ‘REFEICAO’;

    Implementação de cálculo de distância na rota

    Foi necessário alterar a roteirização, para que a mesma realize o cálculo da distância, entre cada um dos pontos da rota (incluindo ponto de partida, de refeição e de chegada).

    A aplicação realiza o cálculo da distância entre cada um dos pontos da rota, valor que será calculado sempre em Km, onde o cálculo da distância entre os pontos é realizado de acordo com o modelo de roteirização que está sendo usado no mapa (Rota direta ou simulada):

    • O cálculo de distância da rota no modelo “direta” será sempre realizado pela própria aplicação, realizando os cálculos de distâncias usando as coordenadas dos pontos;
    • O cálculo de distância da rota no modelo “simulada” é realizado sempre pelas APIs do Google, cálculo este que é realizado somente no momento em que o usuário selecionar a opção de “rota simulada”, presente no mapa apresentado no roteiro.

    A distância entre os pontos será armazenada em novos campos no banco de dados, na tabela de rotaLocal, onde será armazenada a distância entre o ponto atual e o ponto anterior da rota, seja ele direto ou simulado:

    • As informações das distâncias serão armazenadas em diferentes campos, a depender do tipo de cálculo de rota que foi utilizado:
      • Caso o cálculo de distância da rota tenha sido realizado pelo tipo “direta”, a distância será armazenada no campo destinado ao armazenamento a distância da rota direta na tabela rotaLocal;
      • Caso o cálculo de distância da rota tenha sido realizado pelo tipo “simulada”, a distância será armazenada no campo destinado ao armazenamento a distância da rota simulada na tabela rotaLocal.
    • Estes campos sempre vão armazenar a distância entre o ponto atual e o ponto anterior da rota, seja ele direto ou simulado. Para saber qual é o campo anterior, será usado o campo de ordenamento (ordem) dos pontos;
    • A distância é um campo numérico, que armazenará a distância em Km;
    • Para recuperar a distância total da rota, basta somar a distância de todos os pontos da rota;
    • Obs: O valor que será gravado no banco de dados (Direto ou simulado), depende do tipo de rota que foi utilizado, pois a aplicação armazenará apenas 1 dos campos por vez.

    No mapa, é apresentada a distância total da rota, de acordo com o que foi calculado pela aplicação ou pela API durante a simulação da rota. Essa informação é apresentada como um campo “flutuante”, que vai aparecer sobre o traçado da rota, apresentando a distância total da rota (valor sempre em Km).

    O cálculo das rotas é realizado de maneira automática pela aplicação, juntamente com o processo de apresentação em tela das rotas Direta e Simulada. Nos casos em que não existir ponto GPS para algum dos itens da rota (Cliente, ponto de partida ou ponto de chegada), é apresentado o valor zero, e essa informação também será armazenada no banco de dados com valor 0 (zero).

    O cálculo da distância das rotas é realizado apenas no ambiente Web da ferramenta. Da mesma forma, a exibição da distância dos pontos somente vai ocorrer no ambiente Web. No ambiente Android não haverá cálculo de distâncias no módulo de rotas, assim como não serão apresentadas as distâncias previamente calculadas pela aplicação no ambiente Web.

    O cálculo de distâncias se limita apenas ao planejamento de rotas, e não haverá nenhum cálculo de distância para as rotas realizadas.

    A distância entre os pontos será armazenada em novos campos no banco de dados, na tabela de rotaLocal, onde será armazenada a distância entre o ponto atual e o ponto anterior da rota, seja ele direto ou simulado:

    • As informações das distâncias serão armazenadas em diferentes campos, a depender do tipo de cálculo de rota que foi utilizado:
      • Caso o cálculo de distância da rota tenha sido realizado pelo tipo “direta”, a distância será armazenada no campo destinado ao armazenamento a distância da rota direta na tabela rotaLocal;
        • Persistir: ROTALOCAL.KMDIRETOPONTOANTERIOR
      • Caso o cálculo de distância da rota tenha sido realizado pelo tipo “simulada”, a distância será armazenada no campo destinado ao armazenamento a distância da rota simulada na tabela rotaLocal.
        • Persistir: ROTALOCAL.KMSIMULADOPONTOANTERIOR
    • Estes campos sempre vão armazenar a distância entre o ponto atual e o ponto anterior da rota, seja ele direto ou simulado. Para saber qual é o campo anterior, será usado o campo de ordenamento (ordem) dos pontos;
      • Campo: ROTALOCAL.ORDEM;
    • A distância é um campo numérico, que armazenará a distância em Km;
    • Para recuperar a distância total da rota, basta somar a distância de todos os pontos da rota;
      • Consulta SQL:


    Para rota direta: 
    select sum(KMDIRETOPONTOANTERIOR) from rotalocal
    Para rota simulada:
    select sum(KMSIMULADOPONTOANTERIOR) from rotalocal


    Obs: O valor que será gravado no banco de dados (Direto ou simulado), depende do tipo de rota que foi utilizado, pois a aplicação armazenará apenas 1 dos campos por vez.

    No mapa, é apresentada a distância total da rota, de acordo com o que foi calculado pela aplicação ou pela API durante a simulação da rota. Essa informação é apresentada como um campo “flutuante”, que vai aparecer sobre o traçado da rota, apresentando a distância total da rota (valor sempre em Km).

    O cálculo das rotas é realizado de maneira automática pela aplicação, juntamente com o processo de apresentação em tela das rotas Direta e Simulada. Nos casos em que não existir ponto GPS para algum dos itens da rota (Cliente, ponto de partida ou ponto de chegada), é apresentado o valor zero, e essa informação também será armazenada no banco de dados com valor 0 (zero).

    Exemplo de cálculo de distância entre 2 pontos:

    Código de apoio para execução:


    import requests
    # Substitua "SUA_CHAVE_DE_API" pela sua chave de API do Google Maps
    api_key = "SUA_CHAVE_DE_API"
    # Coordenadas dos pontos de origem e destino
    origem = "37.7749,-122.4194"  # Exemplo: San Francisco, CA
    destino = "34.0522,-118.2437"  # Exemplo: Los Angeles, CA
    # Construa a URL da API com os parâmetros necessários
    url = f"https://maps.googleapis.com/maps/api/directions/json?origin={origem}&destination={destino}&key={api_key}&mode=driving"
    # Faça a solicitação HTTP
    response = requests.get(url)
    # Verifique se a solicitação foi bem-sucedida
    if response.status_code == 200:
        data = response.json()
        # Extraia a distância em quilômetros
        distancia_km = data["routes"][0]["legs"][0]["distance"]["text"]
        print(f"A distância entre os pontos é: {distancia_km}")
    else:
        print("Erro na solicitação à API do Google Maps")
    javascript
    function initMap() {
      const myLatLng = { lat: -34.397, lng: 150.644 }; // Substitua pelas coordenadas desejadas
      const map = new google.maps.Map(document.getElementById("map"), {
        center: myLatLng,
        zoom: 10, // Ajuste o nível de zoom conforme necessário
      });
      const marker = new google.maps.Marker({
        position: myLatLng,
        map,
        title: "Título do Marcador",
      });
      const contentString = `<div id="content">
        <h1>Título do Balão Flutuante</h1>
        <p>Conteúdo do balão flutuante</p>
      </div>`;
      const infowindow = new google.maps.InfoWindow({
        content: contentString,
      });
      marker.addListener("click", () => {
        infowindow.open(map, marker);
      });
    }


    O cálculo da distância das rotas é realizado apenas no ambiente Web da ferramenta. Da mesma forma, a exibição da distância dos pontos somente vai ocorrer no ambiente Web. No ambiente Android não haverá cálculo de distâncias no módulo de rotas, assim como não serão apresentadas as distâncias previamente calculadas pela aplicação no ambiente Web.

    O cálculo de distâncias se limita apenas ao planejamento de rotas, e não haverá nenhum cálculo de distância para as rotas realizadas.

    Foi criado um novo parâmetro chamado para receber a chave da API do google maps com as seguintes informações:

    • Idnativo=1
    • Chave=sim3g.googlemaps.api.key
    • Descrição=Chave utilizada para autenticar conexão com api do google maps para utilização de rota simulada.
    • Observação= Este parâmetro deve conter a chave da api do google do cliente para que a rota simulada seja exibida.
    • Valor=AIzaSyBqrHo8CSuWqeDNENjB4F-qq2JrP2dJ_1A
    • Sglambiente=Todos
    • Sglcontexto=Rota
    • Sglmodulo=Rota

    CHAVE GOOGLE PARA TESTES: AIzaSyB7LLjmN1nBN0WLO50Kf6Ie0QfqB46e-us  (CHAVE COM A ROTA SIMULADA DISPONÍVEL).

    Implementação de Pontos Adicionais nas rotas - Android

    Foi necessário alterar o módulo de rotas do Android, de forma que seja possível visualizar os pontos adicionais nas rotas que foram cadastrados pelo ambiente Web.

    Para isso, foi ajustada a tela de listagem de clientes da rota, de forma que os pontos adicionais da rota passem a ser apresentados junto da listagem de clientes.

    Serão incluídos “Cards” dos pontos adicionais, onde as informações apresentadas no Card dependem da origem do ponto, e também do seu “Tipo de Ponto”, conforme a seguir:

      • Ícone:
    • Ponto de Partida 
    • Ponto de Refeição
    • Ponto de Chegada
    • Informações do ponto:
      • Se origem do ponto for a filial:
        • Filial: <Descrição da Filial>
        • <Endereço da Filial>
      • Se origem do ponto for a usuário:
        • Usuário: <Nome do usuário>
        • <Endereço do usuário>
      • Se origem do ponto for “Selecionado no Mapa”:
        • Selecionado no Mapa
        • <Latitude em graus decimais> x <Longitude em graus decimais>
    • Menu de contexto:

    Serão apresentadas opções para navegação com Waze e com o Google Maps. Não haverá opções para justificativa.

    Os campos adicionais não irão para as rotas realizadas, uma vez que eles serão utilizados apenas para o planejamento do Km diário. Assim, no Android, esses pontos adicionais não vão apresentar a opção de justificativa, tendo apenas as opções de navegação com maps e Waze no seu menu de contexto.

    • Informações do ponto:
      • Se origem do ponto for a filial:
        • Filial: <Descrição da Filial>
          • Local.descricao;
        • <Endereço da Filial>
          • local.logradouro,local.numeromatricula,local.bairro,cidade.descricao,unidadefederativa.sigla
        • Consulta SQL: 


    select l.descricao,L.logradouro,L.numeromatricula,L.bairro,c.descricao,uf.sigla from local l
    inner join cidade c on c.idcidade = l.idcidade
    inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
    inner join rotalocal rl on rl.idlocalfilial = l.idlocal
    where
    rl.idlocalfilial = FILIAL_INSERIDA_NA_ROTA


    • Se origem do ponto for a usuário:
      • Usuário: <Nome do usuário>
      • <Endereço do usuário>
      • Consulta SQL:


    select nome,endereco from usuario
    inner join rotalocal rl on rl.idusuario = u.idusuario
    where
    rl.idusuario=USUARIO_INSERIDO_NA_ROTA


    • Se origem do ponto for “Selecionado no Mapa”:
      • Descrição: “Selecionado no Mapa”
      • <Latitude em graus decimais> x <Longitude em graus decimais>
      • Consulta SQL:


    select latitude, longitude from pontogps p
    inner join rotalocal rl on rl.idpontogps = p.idpontogps
    where
    rl.idpontogps=PONTOGPS_INSERIDO_NA_ROTA


    Menu de contexto:

    • Serão apresentadas opções para navegação com Waze e com o Google Maps. Não haverá opções para justificativa.
      • As coordenadas serão obtidas da seguinte forma:


    Selecionado no mapa(cliente)
    select pg.longitude, pg.latitude from rotalocal rl inner join pontogps pg on rl.idPontoGps = pg.idPontoGps where rl.idrota = ID_ROTA_SELECIONADA
    
    Usuario
    select longitude, latitude from pontogps where idusuario = USUARIO_DA_ROTA_LOCAL
    
    Filial
    select longitude, latitude from pontogps where idlocalfilial = FILIAL_DA_ROTA_LOCAL


    Os campos adicionais não irão para as rotas realizadas, uma vez que eles serão utilizados apenas para o planejamento do km diário. Assim, no Android, esses pontos adicionais não vão apresentar a opção de justificativa, tendo apenas as opções de navegação com maps e Waze no seu menu de contexto.

    Caso não seja possível encontrar os pontos gps ao tentar realizar a navegação as seguintes mensagem serão apresentadas:

    Caso não encontrar ponto gps para usuário

    Atenção! Este usuário não possui ponto gps mapeado.

    Caso não encontrar ponto gps para filial

    Atenção! Esta filial não possui ponto gps mapeado.

    Os pontos adicionais não são considerados nas métricas da rota, clientes na rota, clientes atendidos, clientes atendidos fora da rota e clientes que finalizaram pedidos. 






















    • Sem rótulos