Utilização do LPA para geração de tarefas com o Workflow

Boa tarde

Com a nova funcionalidade do latromi o LPA como é possível utilizar a solução para a geração de novas tarefas do workflow ?

A necessidade que possuo hoje é gerar uma tarefa recorrente para o usuáio acesar um link e fazer uma validação.

Bom dia @josimar.picoloto!

Elaboramos um exemplo de utilização do LPA para abrir uma tarefa recorrente no Workflow.
No nosso exemplo, utilizaremos o Controle de Estoque Mínimo, ou seja, todas as vezes que determinado produto atingir a quantidade mínima de estoque, será aberta uma tarefa para que seja providenciado o seu reabastecimento.

  • O primeiro passo é cadastrar a tarefa no menu LATROMI Workflow → Cadastro → Tipo de Tarefa.

    O campo ID será utilizado na função de agendamento do LPA.
  • Com a tarefa criada, vamos configurar a automatização no LPA (menu LATROMI → LPA → Agendador de Tarefas). A figura abaixo apresenta a inclusão do agendamento da tarefa.

    Agendamento fig. 2

  • A próxima etapa é o Fluxo de Tarefas. Neste exemplo, vamos utilizar um Comando SQL.

  • Abaixo segue o código SQL utilizado:

    DO LANGUAGE plpgsql
    $BODY$
    DECLARE
       rEstoqueMinimo RECORD;
       rListaTarefaParametros RECORD;
       nIdTarefaDiaria INTEGER:= 56; -- ID do Tipo de Tarefa que controla o estoque mínimo
       
    BEGIN
    
       /* Query para verificar se algum estoque mínimo foi atingido */
       FOR rEstoqueMinimo IN
          SELECT
             produto.descricao
             ,produto.quantidadeestoqueminimo
             ,produto.quantidadesaldoestoque
          FROM produto
          WHERE produto.quantidadesaldoestoque < produto.quantidadeestoqueminimo
       LOOP
       
          /* Bucar parâmetros do Tipo de Tarefa */
          SELECT INTO 
             rListaTarefaParametros
             prioridade
             ,dtlimitealerta
             ,dtlimiteconclusao
             ,descricao
             ,textomensagempadrao
             ,arrayusuario
             ,arraygrupousuario
          FROM workflow.fnc_tarefa_retorna_parametros(nIdTarefaDiaria);
             
             
          /* Chamada da função que gera a tarefa no Painel de Tarefas - Workflow */
          SELECT workflow.fnc_listatarefa_incluir(
             nIdTarefaDiaria::integer, -- ID da tarefa
             CURRENT_TIMESTAMP, -- data de inclusão 
             rListaTarefaParametros.dtlimiteconclusao, -- data limite de conclusão
             'www.latromi.com.br', -- link que direciona o usuário para a tela de execução da tarefa.
             NULL::TEXT, -- alimenta o campo apontamentopk
             ('{"Produto":'||TO_JSON(rEstoqueMinimo.descricao::VARCHAR)||'
                ,"QuantidadeMinima":'||TO_JSON(rEstoqueMinimo.::VARCHAR)||'
                ,"Numero":'||TO_JSON(pnNumero::VARCHAR)||'}')::json, -- alimenta o campo apontamentopk
             'O produto atingiu seu estoque mínimo.'::VARCHAR::text, -- descrição da tarefa
             rListaTarefaParametros.prioridade, -- prioridade da tarefa
             rListaTarefaParametros.dtlimitealerta, --data limite para alertar o responsável da tarefa
             NULL::INTEGER , -- ID do cadastro
             'LoginUsuario', -- Login do usuário que incluiu a tarefa
             NULL::TIMESTAMP, -- data de agendamento inicial
             NULL::TIMESTAMP, -- data de agendamento final
             NULL::INTEGER, -- ID da Lista Tarefa Origem. Se aplica nos casos em que ocorre a inclusão de subtarefas
             NULL::VARCHAR , -- Login do usuário que será o responsável da tarefa
             NULL::INTEGER -- ID Lista Tarefa Valores
    
             );
       END LOOP;
       
    END;
    $BODY$
    

Deste modo, a cada 30 segundos, o LPA irá rodar essa função e verificar se precisa ou não abrir uma nova tarefa. Quando a condição da função for atingida, ou seja, quando a quantidade de estoque atingir o estoque mínimo determinado, vai abrir a tarefa para o setor de Suprimentos.

Para conferir as demais possibilidades de uso do LPA, clique aqui.

4 curtidas

Ótimo exemplo @Alessandra_Raupp! :clap:

2 curtidas

Obrigado @Alessandra_Raupp !

Aproveitando a funcionalidade acabei criando tambem um recurso para alerta via bot de whatsapp.

segue um breve exemplo da função!

DO LANGUAGE plpgsql
$BODY$
DECLARE
   restoquediesel RECORD;
  
BEGIN
   /* Query para verificar se algum estoque mínimo foi atingido */
   FOR restoquediesel IN
		select 
		empresa.nome as empresa
		,produto.descricao as produto
		,produto.quantidade as quantidadeestoque
		,case
			when produto.quantidade > produto.quantidadeestoquemaximo
				then 'Acima do Estoque Máximo'
			when produto.quantidade < produto.quantidadeestoqueminimo 
				then 'Abaixo do Estoque Mínimo'
			end variavel
		,produto.quantidadeestoqueminimo  as quantidadeestoqueminimo
		,produto.quantidadeestoquemaximo as quantidadeestoquemaximo
		,(select 
				TO_CHAR(produto_kardex.dtinc , 'DD/MM/YYYY') as dtmovimentacao
			from produto_kardex
			where produto_kardex.produto = '100001'
				and produto_kardex.empresa = 1
				order by produto_kardex.sequencia desc
				limit 1) as dtmovimentacao
	from produto
	
	left join empresa 
		on empresa.grupo  = produto.grupo 
		and empresa.codigo  = produto.empresa 
		
	where produto.codigo = '100001'
		and produto.empresa = 1
		
	loop
	if restoquediesel.quantidadeestoque > restoquediesel.quantidadeestoquemaximo or restoquediesel.quantidadeestoqueminimo < restoquediesel.quantidadeestoqueminimo then
			INSERT INTO silvestrin.bot_filaenviowhatsapp
				(
					dtinc
					,idtemplate
					,fonedestinatario
					,parametros
					)
					VALUES (
					CURRENT_TIMESTAMP
					,'14972410-fe75-4386-85cd-fd2a25930129'		
					,'5554981690465'
					,('{"usuario":'||TO_JSON('Amigo'::VARCHAR)||'
					  ,"produto":'||TO_JSON(restoquediesel.produto::VARCHAR)||'
					  ,"empresa":'||TO_JSON(restoquediesel.empresa::VARCHAR)||'
	    			  ,"variavel":'||TO_JSON(restoquediesel.variavel::VARCHAR)||'
                      ,"quantidadeestoque":'||TO_JSON(restoquediesel.quantidadeestoque::INT)||'
					  ,"dtmovimentacao":'||TO_JSON(restoquediesel.dtmovimentacao::date)||'}')::json 
					);								
	end if;	
END LOOP;
  
END;
$BODY$

image

3 curtidas