Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Painel
borderStylenone

DADOS GERAIS SOBRE O RECURSO

Painel

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 os profissionais 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.

Painel

Índice
maxLevel4
minLevel2
stylecircle
separatorpipe

Section

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:

Deck of Cards
id34243
Card
defaulttrue
labelEscopo Funcional

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

para armazenar o KM de cada uma das rotas;

Este Recurso permite realizar o planejamento das agendas dos profissionais, de forma que seja possível entender a distância planejada para os profissionais em cada um dos dias, e depois essa informação deve ser comparada com o que foi efetivamente realizado pelos profissionais, informação essa que já é utilizada no módulo de viagem.

Atualmente, a Cooxupé utiliza uma ferramenta externa para realizar o planejamento dos profissionais, pois o módulo de rotas não atende a todas as necessidades da Cooxupé, uma vez que ainda não tem cálculo de distância, e não tem como determinar pontos de partida e de chegada, se limitando apenas a traçar uma sequência de clientes para atendimentos. Dessa forma, hoje não está sendo possível realizar um De>Para entre o planejado e o realizado para os profissionais.

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

que poderão ser usados como ponto de partida e de chegada, juntamente com a implementação de uma tela para visualização das filiais cadastradas no sistema, onde é possível cadastrar essas informações de ponto GPS;

Cadastro de Filial

Tela para visualizar e editar o cadastros das empresas/filiais no SFA, a qual ficará no novo menu Cadastro > Geral > Filial.
Essa tela não permitirá o cadastro de novas empresas/filiais, uma vez que este cadastro sempre 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.
O único cadastro que é possível realizar nessa tela, é o cadastro 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á 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:

CNPJ, Endereço, Número, Complemento, CEP, País, Unidade Federativa, Cidade e Situação.
Na grid, são apresentadas as seguintes informações das empresas/filiais:
Descrição, CNPJ, Endereço, Número, Complemento, CEP, Cidade, Unidade Federativa, País, Situação, Ponto GPS (ícone de casa).

Nesta tela foi incluso a funcionalidade de cadastrar/visualizar/editar um ponto GPS para as empresas/filiais cadastradas no SFA
Nessa tela que é criada, o usuário poderá realizar o cadastro e a edição do Ponto GPS das filiais, o qual é utilizado posteriormente no módulo de rotas.
A popup de cadastro de ponto sede das filiais é copiada da tela de cadastro de ponto sede dos clientes, de forma que a popup apresente as mesmas funcionalidades:

O Acesso a pop-up de cadastro de pontos gps é controlado por perfil de acesso, regra detalhada no requisito (3.1.6.1 - Ajustes perfil de acesso - Cadastro de empresas e usuários Web - Escopo técnico Aplicação)

Título da pop-up: Mapeamento da filial - [PARCEIRO.NOMEPARCEIRO - LOCAL.DESCRICAO]

  • 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

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

é 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.
é criada uma nova opção na tela de cadastro de usuários, chamada “Ponto GPS”, o qual é 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, a qual é copiada da tela de cadastro de ponto sede dos clientes, de forma que a popup apresente as mesmas 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.

Na tela de cadastro de usuário “Cadastro” > “Profissional” > “Profissional” deverá ser adicionado o botão “Ponto GPS” conforme protótipo abaixo:

O Acesso a pop-up de cadastro de pontos gps é controlado por perfil de acesso, regra detalhada no requisito (3.1.6.1 - Ajustes perfil de acesso - Cadastro de empresas e usuários Web - Escopo técnico Aplicação)

Ao clicar sobre o botão “Ponto GPS”, é apresentada uma popup, a qual é copiada da tela de cadastro de ponto sede dos clientes, de forma que a popup apresente as mesmas 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.

de ponto GPS para as filiais/empresas


Após a configuração dos pontos de GPS do cliente, também pode ser criados pontos para as Filiais da Empresa e dessa forma será possível utilizar esses pontos no momento de editar o roteiro da Rota.

Para editar esse cadastro da Filial acesse "Cadastro > Geral > Filial" e clique no botão "Mapeamento de Local" no registro correspondente a filial que quer incluir o ponto e faça a inclusão no Mapa, assim como foi realizado com os clientes.

Image Added

Inclua o ponto GPS no Mapa:

Image Added

Agora as filiais também terão o ponto GPS registrado e poderá ser utilizado no Planejamento da Rota.

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

Além da configuração para os clientes e filiais, também é possível realizar o cadastro do Ponto GPS para os usuários Profissionais. 

Sendo assim, acesse "Cadastro > Profissional > Profissional" e Clique na edição do usuáiro que deseja incluir o ponto GPS. 

Agora dentro do cadastro do usuário, clique no botão "Ponto GPS

Image Added

Inclua o Ponto GPS no Mapa, conforme já realizado nos cadastros anteriores:

Image Added

Agora o Ponto GPS referente ao Profissional foi cadastrado com sucesso.

4 - Implementação do Cálculo de Rota

Agora com os cadastros de Ponto GPS criados, é possível editar a rota e incluí-los, seja em uma Rota já existente ou criando uma nova rota.

Acesse Rota > Listar > e Edite uma rota.

Na Aba "Painel de Cliente" é exibido todos os clientes disponíveis para incluir na Rota do Profissional selecionado:

Image Added

Ao clicar no checkbox para o dia escolhido, automaticamente o ponto do cliente é exibido no Mapa abaixo:

Image Added

Quando o parâmetro citado acima para permitir incluir "Pontos adicionais" na rota estiver ativo, o botão de adição será exibido ao lado da Data permitindo incluir o roteiro para o dia escolhido.

Image Added

Ao clicar no botão, é aberto uma janela que permite incluir três tipos de pontos adicionais:

  • Ponto de Partida
  • Ponto de Refeição
  • Ponde de Chegada

Image Added

Quando selecionado o tipo de Ponto, então o usuário precisa selecionar as seguintes opções para buscar os pontos:

  • 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;

Como exemplo, compondo um Roteiro onde o Ponto de Partida será filial, ao selecionar já é exibido o ponto no mapa e pode ser gravado:

Image Added

E no Roteiro já é exibido o caminho do Ponto de partida até o primeiro cliente

Image Added

Em seguida, incluímos um Ponto de Refeição, como exemplo podemos utilizar a opção "Selecione no Mapa" e escolhendo um Lugar e gravando o registro:

Image Added

Após incluir o Ponto Refeição, o usuário pode manipular a sequencia que será percorrida pelo profissional, como o exemplo:

Image Added

E também é possível criar o ponto de Chegada, que no exemplo será utilizado pelo Ponto do Usuário:

Image Added

E o ponto também é incluso no Roteiro:

Image Added

Após criar o Roteiro, é possível gravar a edição da Rota.

Image Added

Agora com o Roteiro, é possivel visualizar o Planejamento da Rota.

Acesse "Rota > Listar > e Selecione uma das rotas e clique no botão "Planejado x Realizado"

Image Added

Dentro dessa tela é possível visualizar todos os dados da Rota, baseada no Roteiro para o Profissional incluindo os dados no Mapa:

Image Added

No android, o profissional acessa a Rota e os dados já são exibidos conforme configurados:

Image Added

Se clicar em "Rota simulada" ou "Rota direta" já apresenta os pontos a seguir:

Image AddedImage Added


Listagem de clientes e Pontos Adicionais na rota - Android

Menu de contexto para pontos adicionais da rota - Android

  • GAP

Nesse tópico, inicialmente constará o detalhamento de todos os itens que foram identificados anteriormente na fase de escopo preliminar (pré projeto / arquitetura), além disso, no item subsequente será apresentado de maneira detalhada os itens levantados na análise de aderência mas que sofreram alteração, sendo estes adicionados na fase de escopo de negócio, gerando um esforço maior de desenvolvimento/integração, sendo estes passíveis de custos e impactos no cronograma. Por fim, apresentaremos todos os novos itens, considerando o que foi adicionado na fase de escopo.

  • REQUISITOS LEVANTADOS NO ESCOPO PRELIMINAR (PRÉ PROJETO / ARQUITETURA)

Abaixo, são descritos todos os itens levantados durante as negociações comerciais, efetuadas no período arquitetural.

  • REQUISITOS LEVANTADOS NO ESCOPO PRELIMINAR (PRÉ PROJETO / ARQUITETURA) QUE SOFRERAM ALTERAÇÃO

Abaixo, são descritos todos os itens levantados durante as negociações comerciais, efetuadas no período arquitetural que por algum motivo (seja por melhor compreensão ou maior detalhamento) vão passar por nova estimativa, tendo em vista um aprofundamento no entendimento da regra de negócio.

  • NOVOS REQUISITOS

Abaixo, são descritos todos os requisitos não mapeados durante o processo de escopo preliminar (pré projeto / arquitetura) e levantados durante a etapa de refinamento considerando a elaboração do escopo de negócios, sendo estes, novas funcionalidades quando considerado o que foi inicialmente levantado.

É válido ressaltar que, caso aprovados, estes itens vão demandar um planejamento específico incremental que resultará em cobranças adicionais, tendo em vista que estamos tratando funcionalidades além das conjecturadas inicialmente. 

Por fim, caso algum dos novos itens (ou todos) não sejam aprovados por conta dos valores financeiros a eles atrelados, todas as horas decorrentes do levantamento, compreensão e documentação dos requisitos será cobrada, tendo em vista que são decorrentes de situações adicionais, não previstas na comercialização inicial do projeto. 

  • FORA DE ESCOPO

Abaixo, são descritos todos os itens que não vão ser atendidos pelo TOTVS CRM - SFA, tendo em vista que os mesmos não fazem (e não espera-se que faça) parte do conjunto de funcionalidades oferecidas pelo mesmo, considerando questões como o distanciamento daquilo que o produto busca ofertar ou itens que são decorrentes de desenvolvimentos, configurações, parametrizações e implementações de outras unidades e produtos TOTVS que não são condizentes com o TOTVS CRM - SFA.

Não será armazenado o traçado da rota que foi feita pelo usuário, seja ela direta ou simulada. Será armazenado apenas as coordenadas dos pontos, e a distância entre eles.



Card
labelEscopo Técnico

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;
Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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.


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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:


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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:


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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:


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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:


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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: 


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
select l.descricao,L.logradouro,L.numeromatricula,L.bairro,c.descricao,uf.sigla
Card
labelEscopo Técnico

ESCOPO TÉCNICO

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 deverá ser 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 deverá ser inativado não sendo usado na aplicação.

Implementação tela de Filiais no SFA - Web

Foi foi implementadouma 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;
Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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)

Ajustes perfil de acesso - Cadastro de empresas e usuários  Web - Escopo técnico

Segue abaixo as opções que precisam ser 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 - Web

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”).

Essa popup apresenta as seguintes opções:

    • Tipo de Ponto: Primeiro o usuário escolhe o tipo de ponto adicional deseja inserir na rota:
      • Ponto de Partida, 
      • Ponto de Refeição, 
      • Ponto de 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). Caso não seja possível incluir alguma das opções, ela não é exibida neste campo.
    • Origem do Ponto: Depois o usuário seleciona a origem do ponto adicional, estando disponíveis as seguintes opções: 
      • Filial - é utilizado como referência o Ponto Sede da filial na localização da rota;
      • Usuário - é 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: é 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:
    • Opção 1 - Seleção da filial
      • Quando a origem do ponto forem as filiais, aqui é 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. São exibidas todas as filiais, independentemente de a filial ter ou não um ponto sede cadastrado, informação essa que deverá ser verificada no mapa ao lado.
    • Opção 2 - Confirmação do usuário
      • 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 é exibido sempre, independentemente de o usuário ter ou não um ponto GPS cadastrado, informação essa que deverá ser verificada no mapa ao lado.
    • Opção 3 - Escolha de ponto no mapa 
      • Quando a origem do ponto for “Selecionado no Mapa”, aqui é apresentado um botão, 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 apresenta uma mensagem ao usuário, indicando que ele seleciona no mapa ao lado o ponto desejado.
  • 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 apresenta o ponto sede da filial que foi selecionada (Definição da Localização -> Opção 1). 
      • Não é possível alterar o ponto no mapa, que é utilizado exclusivamente para visualização do ponto sede da filial selecionada;
      • Caso a filial selecionada não tenha ponto sede, o mapa é carregado com as coordenadas resetadas.
    • Quando a origem do ponto for o usuário: 
      • O mapa apresenta o ponto GPS do usuário que a rota pertence (Definição da Localização -> Opção 2). 
      • Não é possível alterar o ponto no mapa, que é utilizado exclusivamente para visualização do ponto GPS do usuário selecionado;
      • Caso o usuário não tenha ponto GPS, o mapa é carregado com as coordenadas resetadas.
    • Quando a origem do ponto for “Selecionado no Mapa”: 
      • O mapa é 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.
      • é 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.
  • Botão de Voltar: Ao final da popup, há um botão de “Voltar”, para que o usuário possa cancelar a inclusão do ponto adicional.
    • Ao ser pressionado, a aplicação apresenta uma mensagem ao usuário, avisando que as informações não salvas éo perdidas e pedindo a confirmação do cancelamento. Após a confirmação do usuário, a popup é fechada.
  • Botão de Gravar: Ao final da popup, ao lado do botão de Voltar, há um botão de Gravar, para que o usuário possa confirmar a inclusão do novo ponto na rota.
    • Ao Gravar, a popup é 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);
    • 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, éo incluídos os “Cards” dos pontos extras, 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.
  • Informações do ponto para campos adicionais:
    • 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>
  • 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
      • é apresentado como primeiro da lista;
      • Não permitirá reordenação;
    • 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. 
      • Ao adicionar novos clientes, a refeição não é 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;
  • Clientes
    • Os cards de clientes não poderão ser posicionados antes ao card de Partida ou depois do card de Chegada. A aplicação impede 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 deverá ser 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 represente sempre a posição do card na rota diária;
      • Ex: Quando houver ponto de partida, o primeiro cliente que for inserido na rota, é 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 será 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:

Obs: Os pontos adicionais da rota não vão impactar nas rotas realizadas, uma vez que não são registrados atendimentos para estes pontos extras. Portanto, os pontos extras da rota se limitam apenas ao planejamento das rotas. Da mesma forma, não haverá opção de justificativa para os pontos extras durante a realização da rota.

Implementação de pontos adicionais nas rotas - Web - Escopo técnico Aplicação

Será necessário implementar uma nova 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 deverão ser exibidos na aba de “roteiro” da tela de clientes da rota, permitindo assim a visualização da rota diária de maneira completa.

Para a inclusão dos pontos adicionais, será implementado um botão de adicionar ao lado do campo de data da rota, o qual ao ser pressionado, vai abrir uma popup de inserção de campos adicionais. Este botão será exibido apenas se a parametrização permitir a visualização desta funcionalidade, onde, se o parâmetro sim3g.rota estiver com valor zero o botão de adicionar não deverá ser exibido, já se o parâmetro sim3g.rota estiver ativo com valor 1 a aplicação deverá validar o parâmetro sim3g.rota.permite.pontosgpsadicionais onde, se o valor do mesmo for 0 (zero) o botão de adicionar não deverá ser exibido, já se o valor for 1 a aplicação deverá exibir o botão de adicionar.

Ao clicar no botão de adicionar uma pop-up deverá ser 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 deverá ser persistido no campo ROTALOCAL.SGLTIPOPONTO = ‘PARTIDA’;
  • “Ponto de Refeição”, 
    • Quando selecionado deverá ser persistido no campo ROTALOCAL.SGLTIPOPONTO = ‘REFEICAO’;
  • “Ponto de Chegada”;
  • Quando selecionado deverá ser 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 deverá ser verificada no mapa ao lado.
  • Abaixo do campo definição da localização, quando selecionada uma filial deverá ser exibida as seguintes informações:
    • Campo textlabel chamado “Informações da Filial:” com as seguintes informações: LOCAL.DESCRICAO.
Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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 localtipolocalrotalocal ltlrl on ltlrl.idlocalidlocalfilial = 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 uwhere
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:


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
select nome,endereco from usuario
inner join rotalocal rl on rl.idusuario = ufiu.idusuario
where
l.idnativo =1
and tl.sgltipolocal in ('UEM','VEN')
and url.idusuario = --USUARIO_SELECIONADOINSERIDO_NA_ROTA
Caso a consulta acima não retorne nenhuma filial deverão ser listadas todas as filiais ativas através da seguinte consulta


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


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
select l.descricao,L.logradouro,L.numeromatricula,L.bairro,c.descricao,uf.sigla,l.documentoidentificacaolatitude, longitude from localpontogps lp
inner join cidaderotalocal crl on crl.idcidadeidpontogps = lp.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 será 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 deverá ser verificada no mapa ao lado.
  • Consulta SQL:
Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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 será 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, será 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 deverá ser exibida uma mensagem de informação “Filial sem ponto GPS cadastrado, não será possível incluí-lo na rota” - Tipo “Alert”
      • Consulta SQL:
Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
select * from pontogps
where idlocalfilial = IDFILIAL_SELECIONADA_NO_CAMPO_DEFINICAO_DA_LOCALICAZAO
  • Quando selecionada uma filial no campo definição de localização deverá ser 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 deverá ser 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:
  • 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 deverá ser 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: 
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.
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:


Expandir
titleClique aqui para expandir a Consulta SQL
Bloco de código
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:

  • 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 deverá ser 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: 


    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:
    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:
    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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
      • Será apresentado como o último da lista;
      • Não permitirá reordenação;
      • Quando o registro tiver o campo ROTALOCAL.SGLTIPOPONTO = ‘CHEGADA’ deverá ser fixado na última posição da lista.
    • Clientes
      • Os cards de clientes não poderão 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 deverá ser 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 será 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:

    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 Ícone do ponto de Partida 
    • Ícone do ponto Ponto de Refeição
    • O ícone será exibido para o registro da tabela ROTALOCAL onde o campo SGLTIPOPONTO = ‘REFEICAO’;
    • Ícone do ponto Ponto de Chegada

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

    Será 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 deve realizar 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 será 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” será realizado sempre pelas APIs do Google, cálculo este que será 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 será 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, será 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 será 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 deverá ser 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), será 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 será 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.

    Implementação de cálculo de distância na rota -  Web - Escopo técnico Aplicação

    Será 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 deve realizar 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 será 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 ( utilizado a fórmula de Haversine para calculo da rota direta), realizando os cálculos de distâncias usando as coordenadas dos pontos;
    • O cálculo de distância da rota no modelo “simulada” será realizado sempre pelas APIs do Google, cálculo este que será 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;
        • 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 será 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:
    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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, será 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 será 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 deverá ser 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), será 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:

    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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 será 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.

    Deverá ser 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).
    • 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: 


    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:


    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:


    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:


    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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. 

    Implementação de Pontos Adicionais nas rotas - Android

    Será 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, será 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.

    Implementação de Pontos Adicionais nas rotas - Android - Escopo técnico Aplicação

    Será 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, será 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>
          • Local.descricao;
        • <Endereço da Filial>
          • local.logradouro,local.numeromatricula,local.bairro,cidade.descricao,unidadefederativa.sigla
        • Consulta SQL: 
    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:
    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    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:
    Expandir
    titleClique aqui para expandir a Consulta SQL
    Bloco de código
    select nome,endereco from usuario
    
    inner join rotalocal rl on rl.idusuario = u.idusuario
    
    where
    
    rl.idusuario=USUARIO_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 devem ser considerados nas métricas da rota, clientes na rota, clientes atendidos, clientes atendidos fora da rota e clientes que finalizaram pedidos. 

    Protótipo

    CÓDIGO REQUISITO ADERÊNCIA

    NOME REQUISITO

    DESCRIÇÃO REQUISITO

    CÓDIGO REQUISITO

    ADERÊNCIA

    CÓDIGO REQUISITO ESCOPO

    NOME REQUISITO

    RESUMO REQUISITO

    CÓDIGO REQUISITO ESCOPO

    NOME REQUISITO

    DESCRIÇÃO REQUISITO

    ITEM FORA DO ESCOPO

    DESCRIÇÃO ITEM FORA DO ESCOPO

    Alteração de traçado da rota

    Não será possível alterar o traçado das rotas que são apresentadas no mapa, seja na rota direta ou na rota simulada, onde a distância em km será sempre calculada pela API do Google, não tendo interferência do usuário

    Armazenamento do Traçado da rota