Árvore de páginas

PONTOS GPS ADICIONAIS NA CONFIGURAÇÃO DE ROTA

   
Produto: Automação da Força de Vendas
Linha de Produto: TOTVS CRM
Segmento: Cross Segmentos
Módulo: Rota
Aplicação: Web/Mobile
Identificador: TSF2024090820241334

    VISÃO GERAL

A nova funcionalidade do TOTVS SFA expande a capacidade do sistema de gerenciar e utilizar pontos GPS no módulo de planejamento de rotas. Com essa atualização, além dos pontos de partida e chegada tradicionais, os usuários podem agora adicionar múltiplos pontos de interesse ao longo de uma rota, como localizações de filiais, propriedades de clientes e pontos de refeição, aumentando a eficácia e precisão no planejamento de viagens e visitas.


    OBJETIVO

Melhorar a flexibilidade e a eficácia no planejamento de rotas para profissionais que operam em campo, como vendedores e técnicos. A funcionalidade busca otimizar o tempo de deslocamento, garantir cobertura mais ampla de visitas e adaptar as rotas às exigências específicas das operações comerciais e de serviço.

  DETALHES FUNCIONAIS


  1. Configuração de Pontos GPS
  2. Foi implementada uma série de novos parâmetros no sistema para permitir a configuração e utilização de pontos GPS adicionais nas rotas, melhorando a precisão e flexibilidade do planejamento de rotas.

    • sim3g.rota:

      • Descrição: Ativa o uso de pontos adicionais de GPS nas rotas.
      • Detalhe: Quando ativo, permite a inclusão de pontos de partida, chegada e refeição, assim como a definição do número de refeições.
    • sim3g.rota.permite.pontosgpsadicionais:

      • Descrição: Determina se pontos adicionais podem ser configurados nas rotas.
      • Detalhe: Se ativado com valor 1, a aplicação permitirá pontos adicionais na rota, incluindo pontos de partida, de chegada e de refeição.
    • sim3g.rota.quantidade.refeicoesnarota:

      • Pontos de Partida e Chegada:

        • Detalhe: Os usuários podem definir locais específicos como pontos de partida ou chegada, utilizando as coordenadas GPS cadastradas nas filiais ou usuários.
      • Inserção de Rotas:

        • Detalhe: Na criação de uma nova rota, pontos adicionais configurados são incorporados, permitindo uma programação detalhada das paradas necessárias, incluindo refeições.
Visualização Android
  1. Implementação de Coordenadas GPS
  2. Essa funcionalidade foi estendida para incluir a configuração de coordenadas GPS diretamente nos cadastros de filiais e usuários, além de permitir a inserção de pontos adicionais nas rotas.

    • Pontos de Partida e Chegada:

      • Detalhe: Os usuários podem definir locais específicos como pontos de partida ou chegada, utilizando as coordenadas GPS cadastradas nas filiais ou usuários.
    • Inserção de Rotas:

      • Detalhe: Na criação de uma nova rota, pontos adicionais configurados são incorporados, permitindo uma programação detalhada das paradas necessárias, incluindo refeições.
Visualização Android
  1. Ordenação Dinâmica dos Pontos GPS na Rota
  2. A funcionalidade de pontos GPS adicionais foi aprimorada para incluir a capacidade de ordenar dinamicamente esses pontos dentro das rotas. Isso permite que os usuários organizem a sequência de paradas de acordo com prioridades operacionais ou preferências logísticas.

    • Flexibilidade na Ordenação:

      • Detalhe: Os usuários podem ordenar pontos de partida, chegada e refeição, além de outros pontos intermediários, diretamente na interface de planejamento de rotas. A ordenação é ajustável a qualquer momento antes da finalização da rota.
    • Interface de Usuário:

      • Detalhe: Através de uma interface intuitiva, os usuários arrastam e soltam os pontos na sequência desejada. Cada ponto pode ser reordenado, exceto os pontos de partida e de chegada, que geralmente são fixos no início e no fim da rota.
    • Impacto na Navegação:

      • Detalhe: A ordenação definida influencia diretamente a navegação em campo. O sistema calcula a rota baseada na sequência estabelecida, facilitando o cumprimento do itinerário planejado.
Visualização Android

  COMO USAR?

  1. Ativação dos Parâmetros de Rota:

    • Navegue até Configuração > Geral > Parâmetros no sistema.
    • Ative os parâmetros sim3g.rota.permite.pontosgpsadicionais e sim3g.rota.quantidade.refeicoesnarota para habilitar a adição de pontos GPS adicionais e definir o número de refeições na rota.
  2. Inclusão de Pontos GPS em Filiais:

    • Acesse Cadastro > Geral > Filial.
    • Clique no ícone de casa (Ponto GPS) ao lado do nome da filial desejada.
    • Clique no botão Ponto GPS para adicionar ou editar os pontos GPS da filial.
  3. Configuração de Pontos GPS para Profissionais:

    • Vá para Cadastro > Profissional > Profissional.
    • Acesse o cadastro do profissional desejado.
    • Clique no botão Ponto GPS para adicionar ou editar os pontos GPS do profissional.
  4. Criação e Edição de Rotas com Pontos GPS Adicionais:

    • Navegue até Rota > Listar ou Rota > Novo para criar ou editar uma rota.
    • Na guia "Painel de Cliente" durante o cadastro da rota, clique no botão + para adicionar pontos adicionais.
    • Especifique o tipo de ponto (partida, chegada, refeição) no campo Tipo de Ponto.
    • Você pode editar a sequência dos pontos adicionais, arrastando e soltando os itens na ordem desejada.

 EXEMPLO PRÁTICO


Desafio Antigo:

Limitações no planejamento de rotas devido à falta de flexibilidade na inclusão de múltiplos pontos geográficos específicos.


Solução Atualizada:

Com a nova funcionalidade, é possível configurar rotas detalhadas que incorporam diversos pontos GPS, melhorando significativamente o planejamento logístico e a execução de rotas no campo.


  DETALHES TÉCNICOS

  1. Criação de campos e tabelas
  2. 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 ” - 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?, 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:
        • Local.descricao;
        • 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:
    • 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”
    • x
    • 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 = `
   

Título do Balão Flutuante

   

Conteúdo do balão flutuante

 
`;  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:
    • Se origem do ponto for a usuário:
      • Usuário:
    • Se origem do ponto for “Selecionado no Mapa”:
      • Selecionado no Mapa
      • x
  • 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:
        • Local.descricao;
        • 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:
    • 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”
    • x
    • 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.

PERGUNTAS FREQUENTES

  • question_answer Posso adicionar múltiplos tipos de pontos numa única rota?
    Sim, você pode incluir diferentes tipos de pontos, como partida, chegada e refeição, ao configurar uma rota. Cada tipo de ponto pode ser especificado ao adicionar um ponto adicional na rota.
  • question_answer Como edito a sequência dos pontos em uma rota?
    No cadastro ou edição de uma rota, use o botão + para adicionar pontos. Você pode arrastar e soltar os pontos na sequência que desejar diretamente no painel de roteiro.
  • Sem rótulos