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.
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.
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.
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.
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$