Identificador de Regra

VEN-120EXPGR01

Módulo: VEN - Vendas.

Finalidade: efetuar a distribuição de grades via regra quando a soma das quantidades informadas numa grade é superior ao somatório das quantidade de derivações possíveis de aceitar para um item de pedido em grade (definido pelo identificador VEN-120FORGR01). As quebras efetuadas são retornadas ao sistema para montar os novos itens de pedido decorrentes dessa regra. Quando este identificador estiver ativo, a divisão de grades não é feita pelo ERP.

Transação: Não se aplica.

Telas/Rotinas:
F120GRA
Web service com.senior.g5.co.mcm.ven.pedidos, porta GravarPedidoGrade
Ação SID GravarPedidosEmGrade

Regra: exemplo de regra de integração de usuários oriundos da senior X para o Gestão Empresarial | ERP.

A regra é acionada quando os eventos de criação do usuário na senior X ou quando são atribuídos ou removidos papéis de um usuário. Assim é possível avaliar se é necessário criar o usuário no Gestão Empresarial | ERP para qual grupo deve ser definido.

Neste exemplo, usuários criados na senior X no papel "Suprimentos" são criados no Gestão Empresarial | ERP e atribuídos ao grupo "SuprimentosIntegradosSeniorX".

Quando um usuário da senior X não está nesse papel, e futuramente é atribuído é, ele é criado no Gestão Empresarial | ERP.

Quando um usuário da senior X já está nesse papel e integrado ao Gestão Empresarial | ERP, e futuramente é removido o papel "Suprimentos", ele é inativado.

.@ Variáveis passadas para a regra @
Definir Alfa GerANomeLogon;
Definir Alfa GerANomeCompleto;
Definir Alfa GerADescricaoUsuario;
Definir Alfa GerAEMailUsuario;
Definir Alfa GerAEvento;
Definir Numero GerNListaPapeis;

@ Variáveis auxiliares da regra @
Definir Alfa posicionouLista;
Definir Alfa papelDesejado;
Definir Alfa papelObtido;
Definir Alfa grupoG5;
Definir Alfa grupoTodos;
Definir Alfa obtevePapel;
Definir Alfa usuarioG5;
Definir Numero codigoUsuarioG5;
Definir Numero codigoGrupoG5;
Definir Numero codigoGrupoTodos;
Definir Numero retorno;

Definir Funcao EncontrarPapel(Numero end encontrouPapel);
Definir Funcao CriarUsuario();

@ tratamento para o evento "usuárioIncluido" @
se (GerAEvento = "usuarioIncluido")
inicio
@ Verifica se usuário passado já está no SGU @
retorno = SegEntExistePorNome(GerANomeLogon);

@ Se não existe, busca se o usuário está nos papéis desejados da plataforma Senior X para integrar com a G5 @
se (retorno = 0)
inicio
papelDesejado = "Suprimentos";
EncontrarPapel(encontrouPapel);
se (encontrouPapel = 1)
inicio
@ O papel "Suprimentos" da g7 adiciona no grupo do SGU "SuprimentosIntegradosSeniorX" @
SegEntLePorNome("SuprimentosIntegradosSeniorX", grupoG5);
CriarUsuario();
fim;
fim;
fim;

@ tratamento para o evento "usuarioExcluido" @
se (GerAEvento = "usuarioExcluido")
inicio
@ Verifica se usuário passado já está no SGU e está no grupo de integrados @
@ Nesse evento não são passados os papéis a que ele pertence na Senior X @
retorno = SegEntExistePorNome(GerANomeLogon);

@ Se existe, inativa o usuário somente se estiver no grupo de integração @
se (retorno = 1)
inicio
SegEntLePorNome(GerANomeLogon, usuarioG5);
codigoGrupoG5 = SegEntLeCodigo("SuprimentosIntegradosSeniorX");

@ verifica se está já está grupo "SuprimentosIntegradosSeniorX" @
retorno = SegEntEhMembro(usuarioG5, codigoGrupoG5);

@ se estiver no grupo @
se (retorno = 1)
inicio
@ se estiver ativo, irá inativar o mesmo e não remove do grupo (mantém no histórico) @
retorno = SegUsuAtivado(usuarioG5);
se (retorno = 1)
inicio
SegUsuSetaAtivado(usuarioG5, 0);
SegEntGrava(usuarioG5);
fim;
fim;
fim;
fim;

@ tratamento para o evento "papelAtribuido" @
se (GerAEvento = "papelAtribuido")
inicio
@ se o papel atribuído é o papel desejado para integrar o usuário @
@ no caso o papel "Suprimentos" da Senior X é integrado e adiciona no grupo do SGU "SuprimentosIntegradosSeniorX" @
papelDesejado = "Suprimentos";
EncontrarPapel(encontrouPapel);
se (encontrouPapel = 1)
inicio
@ busca o grupo correspondente na G5 @
codigoGrupoG5 = SegEntLeCodigo("SuprimentosIntegradosSeniorX");

@ verifica se usuário passado já está no SGU @
retorno = SegEntExistePorNome(GerANomeLogon);

@ se não existe, busca se o usuário está nos papéis desejados da plataforma Senior X para integrar com a G5 @
se (retorno = 0)
inicio
SegEntLe(codigoGrupoG5, grupoG5);
CriarUsuario();
fim;

@ se o usuário já existe @
se (retorno = 1)
inicio
SegEntLePorNome(GerANomeLogon, usuarioG5);

@ verifica se está já está grupo "SuprimentosIntegradosSeniorX" @
retorno = SegEntEhMembro(usuarioG5, codigoGrupoG5);

@ se não estiver no grupo, adiciona @
se (retorno = 0)
inicio
SegEntAdicGrp(usuarioG5, codigoGrupoG5);
fim;

@ se estiver inativo, ativa novamente @
retorno = SegUsuAtivado(usuarioG5);
se (retorno = 0)
inicio
SegUsuSetaAtivado(usuarioG5, 1);
fim;

SegEntGrava(usuarioG5);
fim;
fim;
fim;

@ tratamento para o evento "papelRemovido" @
se (GerAEvento = "papelRemovido")
inicio
@ se o papel removido é o papel desejado para integrar o usuário @
@ no caso o papel "Suprimentos" da Senior X é integrado e deve estar presente no grupo do SGU "SuprimentosIntegradosSeniorX" @
papelDesejado = "Suprimentos";
EncontrarPapel(encontrouPapel);
se (encontrouPapel = 1)
inicio
@ verifica se usuário passado já está no SGU @
retorno = SegEntExistePorNome(GerANomeLogon);
se (retorno = 1)
inicio
SegEntLePorNome(GerANomeLogon, usuarioG5);
codigoGrupoG5 = SegEntLeCodigo("SuprimentosIntegradosSeniorX");

@ verifica se está já está grupo "SuprimentosIntegradosSeniorX" @
retorno = SegEntEhMembro(usuarioG5, codigoGrupoG5);

@ se estiver estiver no grupo, remove deste @
se (retorno = 1)
inicio
SegEntRemvGrp(usuarioG5, codigogrupoG5);
fim;

@ se estiver ativo, inativa @
retorno = SegUsuAtivado(usuarioG5);
se (retorno = 1)
inicio
SegUsuSetaAtivado(usuarioG5, 0);
fim;

SegEntGrava(usuarioG5);
fim;
fim;
fim;

@ procura um determinado papel na lista de papéis do usuário do Senior X @
funcao EncontrarPapel(Numero end encontrouPapel);
inicio
encontrouPapel = 0;
ListaRegraPrimeiro(GerNListaPapeis, posicionouLista);
enquanto ((posicionouLista = "S") e (encontrouPapel = 0))
inicio
ListaRegraObterValorAlfa(GerNListaPapeis, "NomePapel", papelObtido, obtevePapel);
se ((obtevePapel = "S") e (papelObtido = papelDesejado))
inicio
encontrouPapel = 1;
pare;
fim;
ListaRegraProximo(GerNListaPapeis, posicionouLista);
fim;
fim;

funcao CriarUsuario();
inicio
@ criar o usuário no SGU @
SegUsuCria(usuarioG5);
@ Definir o nome @
SegEntSetaNome(usuarioG5, GerANomeLogon);
@ Definir o nome completo @
SegUsuSetaNomeComp(usuarioG5, GerANomeCompleto);
@ Definir o e-mail @
SegUsuSetaEmail(usuarioG5, GerAEMailUsuario);
@ Definir a descrição @
SegEntSetaDesc(usuarioG5, GerADescricaoUsuario);

@ Definir como ativo @
SegUsuSetaAtivado(usuarioG5, 1);
@ Definir como desnecessário alterar a senha no próximo logon @
SegUsuSetaExigeAltSenha(usuarioG5, 0);
@ Definir a não expiração da senha @
SegUsuSetaNaoExp(usuarioG5);
@ Definir o grupo de acesso @
SegEntLePorNome("Todos", grupoTodos);

codigoGrupoTodos = SegEntCodigo(grupoTodos);

SegUsuSetaGrpAcs(usuarioG5, codigoGrupoTodos);

@ Gravar o usuário @
SegEntGrava(usuarioG5);

@ Adiciona ao grupo de usuários especificado @
codigoUsuarioG5 = SegEntLeCodigo(GerANomeLogon);
SegGrpAdicMem(grupoG5, codigoUsuarioG5);
SegEntGrava(grupoG5);
fim;

Variáveis Disponibilizadas:

Nome Tipo Observações Retorna Valor
VenAForGra NÚMERO Quantidades possíveis para formar uma grade (formato "quantidade possível 1,quantidade possível 2,quantidade possível 3...")  
VenACodFxa ALFA Código da faixa do item do pedido  
VenACodPro ALFA Código do produto do item do pedido  
VenNCodCli NÚMERO Código do cliente do pedido  
VenAConRes ALFA Indicador se gerou sobra de quantidades na grade. A sobra é o que não pode ser distribuído/quebrado e na tela F120GRA, permite complementar ou descartar o item. O valor "S" indica que a resto, o valor "N" (padrão) indica que não há resto a considerar  
VenNTipPed NÚMERO Tipo do pedido  
VenATnsPro ALFA Transação de produto do item do pedido  
VenALstDer ALFA Lista de derivações da grade. Cada derivação é um item separado por vírgula (exemplo: "33,34,35,36")  
VenNLstGra NÚMERO Lista de regra que contêm as quantiades de derivações informadas no sistema, e pela qual devem ser retornadas as quebras. Essa variável deve ser manipuladas pelas funções de regra do tipo "ListaRegraXXX" (onde XXX são as demais caracteres do nome da função). Esta lista contêm, no seu primeiro item, as colunas como as derivações e o conteúdo com as suas respectivas quantidades. O primeiro item pode ser manipulado para ser o restos das quantidades. Assim, quando existir resto na distribuição, este item deve ser preenchido com esse resto, ao mesmo tempo que a variável "VenAConRes" deve ser definida com o valor "S". Ao retornar para o sistema, será verificado se esta lista contêm mais de um item, e irá gerar os itens de grade a partir do segundo item. Se existir resto identificado pela variável VenAConRes, o resto será inserido como um item sem proporcionalide e com quantidade igual a 1. Se não existir mais de um item na lista, não serão gerados novos itens no pedido.  

Este artigo ajudou você?