Jestor Pro para Business |PHP| Parte 6
Conceitos básicos para criar soluções personalizadas.

Chegou a hora de finalmente colocar tudo o que vimos nos últimos textos em prática!
A ideia aqui não é montar algo super complexo, mas mostrar como podemos montar de forma fácil e rápida um fluxo que já acelere bastante algumas situações do dia a dia.
Nossa primeira automatização!
Como processo de exemplo a ser desenvolvido, pensei numa situação comum em um time de vendas:
- O processo de vendas possui etapas;
- Ao chegar a uma determinada etapa, existem tarefas recorrentes que devem ser realizadas pelo time;
- O vendedor não pode avançar alterar a fase de venda sem finalizar todas as tarefas.
Em um processo normal, tudo isso seria feito manualmente: o time comercial avançaria o lead de fase, criaria as tarefas em outra parte do sistema, e teria de conferir se todas estão realizadas de fato antes de avançar para a próxima fase.
Percebemos então que aqui dá pra ganhar um bocado de eficiência melhorando a vida do time e deixando o Jestor tomar conta da criação de novos registros.
Definindo as regras
Para que o fluxo funcione da melhor forma possível, desenhei o processo com alguns critérios:
- Será criado um cadastro novo que define quais tarefas existem por fase. Assim, caso time queira mudar as tarefas (ou adicionar novas) de uma determinada fase, conseguirá fazer isso sem precisar alterar o código;
- Quando uma venda é alterada de fase, o Jestor verificará quais tarefas existem para esta fase no cadastro do ponto anterior e criará as mesmas para essa venda;
- Ao editar a fase de uma venda, o Jestor verificará se há alguma tarefa aberta atrelada a ela, bem como verificará se o vendedor não está jogando acidentalmente a venda na mesma fase (o que recriaria as mesmas tarefas).
Definidos estes critérios, percebemos que temos que fazer algumas coisas diretamente na interface antes de iniciarmos o código:
- Criar o cadastro com relação de tarefas por fase de venda;
- Alterar o próprio cadastro de Tarefas para poder atribuí-las a vendas específicas.
Alterações sem código!
A primeira coisa que eu fiz foi clicar em Criar nova Ferramenta e criar um novo tipo de cadastro chamado Relação de Tarefas.

Depois, criei os campos que acreditei serem relevantes para as tarefas:
- Nome;
- Tempo para execução (em dias);
- Descrição;
- Fase de venda.

Feito isso, já cadastrei aqui duas tarefas para a fase de Entrar em Contato, para que possamos realizar os testes.

Agora falta apenas criar o campo para referenciar a que venda uma tarefa pertence. Fiz isso entrando no módulo de Tarefas, clicando em + Criar Registro e depois Personalizar Campos. Depois disso, criei o campo de Referência/pesquisa, que me permite vincular a tarefa a registros de outros módulos do sistema.

Pronto! Isso é basicamente tudo que precisamos fazer na interface. Agora vamos para a área de desenvolvimento.
Começando a desenvolver
A primeira coisa que faremos aqui será desenvolver a automação de criação de tarefas. Ou seja: quando uma venda chega a uma fase, verificar se existem tarefas para esta fase e criá-las.
Para isso, acessarei o objeto Vendas (fluxo) na área de desenvolvimento, que é onde essa automatização ocorre.

Dentro da página do objeto, encontro informações úteis, como o nome das variáveis:

E, ao chegar ao final da página, consigo criar as automatizações a partir da área de Triggers/Acionadores do objeto:

Criarei aqui uma nova trigger chamada de CriarTarefas, e já posso começar a desenvolver o código:

Bem, primeiramente devemos definir os gatilhos para a automatização: neste caso, entendo que faz sentido que o código rode após uma venda ser criada ou editada.
Depois disso, começamos a desenvolver!
Logo de início, coloco todo o código dentro de um if que verifica se o $objectNew não está vazio. Isso garante que o código só rodará se de fato houver algo a ser inserido/modificado no sistema.
Depois, tenho que procurar as tarefas a serem criadas. Com o conhecimento dos textos anteriores, sabemos que:
- Pelo $objectNew, consigo extrair a nova fase da venda;
- Com o Jestor.loadData(), consigo buscar os registros em Relação de Tarefas, o módulo que criei anteriormente;
- Com o Jestor.create(), consigo criar as tarefas.
Abaixo, todo o código dessa primeira parte da automatização. Vou explicando parte-a-parte tudo o que foi feito!

Faço primeiro duas verificações:
- Se de fato estão chegando informações pelo $objectNew, ou seja, se não está vazio.
- Se a nova fase da venda não é igual à fase antiga (para não recriar as tarefas caso o vendedor coloque a mesma fase por engano).
Depois disso, procuro todas as tarefas pré-determinadas àquela fase no cadastro de Relação de Tarefas e atribuo isso a um array $tarefa.
Crio então uma variável $i, que será utilizada para pegar iterativamente as tarefas dentro de $tarefa, e defino inicialmente como zero, que é a primeira posição de um array.
No fim desta primeira parte, atribuo o primeiro resultado da pesquisa (de posição $i, ou seja, zero) para um array $novatarefa.

Em seguida, verifico se essa venda já possui alguma data de atualização e pego a mesma em uma variável $tempo. Caso não tenha (pode ter sido criada direto nessa fase, por exemplo), pego sua data de criação.

Para iniciar esta última parte, rodo um loop while que rodará enquanto essa $novatarefa não estiver vazia. Dentro deste loop:
- Crio um array $criar que possui todas as informações relevantes, como os parâmetros pré-determinados das tarefas e a venda a qual atrelaremos as tarefas criadas;
- Na data de entrega, converto a variável $tempo, que está em texto (como “01/01/2020”) para tempo Unixtime (contagem de segundos desde 01/01/1970) utilizando a função de PHP strtotime(), antes trocando as barras por hífens com o str_replace() para que a primeira função funcione corretamente. Depois, adiciono o número contido no tempo de execução da tarefa neste tempo, multiplicando o valor inteiro por 3600 para encontrar horas, e 24 para encontrar dias;
- Crio a tarefa com o Jestor.create();
- Aumento a variável $i em 1 para pegar a próxima tarefa da pesquisa e jogá-la em $novatarefa.
Eventualmente, o loop aumentará o $i de tal forma que $tarefa[$i] será vazio, visto que $i excederá o número de resultados da pesquisa original. E aí acabará nossa automatização :)
Antes de testarmos, criaremos mais uma trigger: o ConferirTarefas. Nela verificaremos se uma venda pode ser alterada de fase. Entendo que é uma automatização que deve ocorrer antes de uma venda ser editada, e seu código é mais simples que o anterior:

Aqui, primeiro verificamos se o usuário está tentando alterar a fase da venda, comparando a fase nova com a fase antiga.
Depois, procuramos tarefas atreladas à venda com status Lista de Tarefas ou Em andamento.
Caso existam tarefas nestes status (ou seja: nenhuma das duas pesquisas estejam vazias), o Jestor cancela a alteração de fase.
Pronto! Finalizamos nossa automatização :D
Agora é hora de testar: na imagem abaixo, a primeira venda do sistema foi avançada de Nova Venda para Entrar em Contato:

E as tarefas foram geradas corretamente!

Testando todos os cenários possíveis (criar a venda direto na fase com tarefas, tentar avançar a venda de fase com tarefas pendentes etc) apresentaram o resultado que desejávamos, e assim conseguimos uma automação rápida para facilitar a vida do time comercial.
É só o começo
Assim chegamos ao fim a introdução de PHP para Business no Jestor Pro.
Se você acompanhou todos os textos, percebeu que em pouco menos de uma horinha já conseguiu todo o conhecimento necessário para criar suas próprias automatizações e melhorar (muito!) os processos da sua própria empresa.
É claro que isso é só um pouco do que o Jestor consegue realizar. Não passamos aqui por muitas partes que dão ainda mais liberdade para você montar a ferramenta ideal para sua empresa (como personalizações front-end ou integrações via API).
No entanto, tenho certeza que essa introdução é o suficiente para que você consiga começar a tocar o seu negócio do seu Jeito :)