[CIGAM] - Alertas via Procedure

Faz algum tempo, venho comentando com alguns colegas de trabalho sobre como seria útil enviar mensagens para os usuários do CIGAM através do cadastro de alertas via rotinas do banco de dados.

Dentre as possibilidades imaginadas, poderia servir por exemplo, para informar ao usuário que seu banco de dados Oracle-XE está chegando muito próximo do seu limite de utilização de 4GB. Ou ainda que faltam X dias para a licença de demonstração do CIGAM expirar. Talvez também alguma informação de negócio, como que determinado cliente estourou seu limite de compra. Ou que o estoque mínimo de certo material foi atingido.

As possibilidades são muitas, mas hoje surgiu uma real, que motivou a implementação deste recurso. O usuário gostaria de ser informado se fosse digitado algum pedido para algum cliente que não tivésse um email cadastrado, pois agora, com a Nota Fiscal Eletrônica, esta informação é obrigatória.

A partir daí a primeira coisa que fiz foi criar a procedure que cadastra o Alerta, da seguinte forma:

CREATE OR REPLACE PROCEDURE cgpr_utl_criaalerta
 (v_assunto          VARCHAR2 DEFAULT 'TESTE',
  v_cd_usu_aviso     VARCHAR2 DEFAULT 'SQL',
  v_dt_previsao_ini  DATE DEFAULT trunc(SYSDATE),
  v_hr_previsao_ini VARCHAR2 DEFAULT to_char(SYSDATE,'HH24MISS'),
  v_dt_aviso         DATE DEFAULT trunc(SYSDATE),
  v_hr_aviso VARCHAR2 DEFAULT to_char(SYSDATE+10/24/60/60,'HH24MISS'), --10 segundos
  v_concluido        VARCHAR2 DEFAULT 'N',
  v_categoria        VARCHAR2 DEFAULT ' ',
  v_tipo_registro    VARCHAR2 DEFAULT ' ',
  v_embar_pedido_oc  VARCHAR2 DEFAULT ' ',
  v_cont_os_lanc_nf  INTEGER DEFAULT 0,
  v_sequencia_item   INTEGER DEFAULT 0,
  v_empresa_acomp    VARCHAR2 DEFAULT ' ',
  v_usu_criacao      VARCHAR2 DEFAULT 'SQL',
  v_dt_criacao       DATE DEFAULT trunc(SYSDATE),
  v_hr_criacao VARCHAR2 DEFAULT to_char(SYSDATE,'HH24MISS'),
  v_sessao           INTEGER DEFAULT 0,
  v_usu_modificacao  VARCHAR2 DEFAULT ' ',
  v_dt_modificacao   DATE DEFAULT NULL,
  v_tempo_calculado  NUMBER DEFAULT 0)
IS
BEGIN
  INSERT INTO gealerta
  VALUES     (cg_fc_ultid(' ',280),
              v_dt_previsao_ini,
              v_hr_previsao_ini,
              v_dt_aviso,
              v_hr_aviso,
              v_cd_usu_aviso,
              v_concluido,
              v_categoria,
              v_assunto,
              v_tipo_registro,
              v_embar_pedido_oc,
              v_cont_os_lanc_nf,
              v_sequencia_item,
              v_empresa_acomp,
              v_usu_criacao,
              v_dt_criacao,
              v_hr_criacao,
              v_sessao,
              v_usu_modificacao,
              v_dt_modificacao,
              v_tempo_calculado,
              NULL,
              NULL,
              NULL,
              NULL,
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              ' ',
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              ' ',
              NULL,
              0);
END cgpr_utl_criaalerta;


Depois disso precisei criar a trigger, que chama a procedure que cria o alerta, caso o cliente não possua email cadastrado. Ela ficou assim:

CREATE OR REPLACE TRIGGER cgtr_validacontatozeroped_i
BEFORE INSERT ON fapedido
FOR EACH ROW
/*CIGAM-MOVIMENTOS:
Criar trigger para que ao digitar um pedido para um cliente e o mesmo não possua
o contato zero preenchido (sem email), a trigger crie um Alerta CIGAM para o
usuário que está digitando o pedido e também para as usuárias Marlete e Angela.

Mensagem a ser usada no Alerta:
O cliente (nome do cliente) deste pedido (nr_pedido) não possui email para envio
da NF eletrônica, por favor, informe o email no ?Acompanhamento? do pedido.
O email é obrigatório para a emissão da Nota Eletrônica.
*/


DECLARE
   v_temcontatozero  INTEGER;
   v_email           vecempre.email%TYPE;
   v_nomecliente     geempres.nome_completo%TYPE;
   v_mensagem        gealerta.assunto%TYPE;
BEGIN

  /*Verifico se possue contato zero */
  SELECT count(sequencia_conta)
  INTO   v_temcontatozero
  FROM   vecempre
  WHERE  trim(cd_empresa) = trim(:new.cd_cliente)
         AND sequencia_conta = 0;
 
  /*Se tem contato zero verifico se possui email cadastrado*/
  IF v_temcontatozero > 0 THEN
    SELECT email
    INTO   v_email
    FROM   vecempre
    WHERE  trim(cd_empresa) = trim(:new.cd_cliente)
           AND sequencia_conta = 0;
  END IF;
 
  /*Busco nome do cliente para informar na mensagem*/
  SELECT trim(nome_completo)
  INTO   v_nomecliente
  FROM   geempres
  WHERE  trim(cd_empresa) = trim(:new.cd_cliente);
 
  /*Se não tiver contato ou tiver mas o email estiver em branco...*/
  IF v_temcontatozero = 0
      OR (v_temcontatozero > 0
          AND (v_email = ' '
                OR v_email IS NULL)) THEN
    /*Monta a mensagem para enviar o alerta.*/
    v_mensagem := 'O Cliente '
                  ||trim(v_nomecliente)
                  ||' informado no pedido '
                  ||trim(:new.cd_pedido)
                  ||' não possui email para envio da NF eletrônica, '
                  ||' por favor, informe o email no "Acompanhamento" do pedido.'
                  ||' O email é obrigatório para a emissão da Nota Fiscal Eletrônica.';

    /*Envia a mensagem para o usuário que está cadastrando o pedido*/
    cgpr_utl_criaalerta(v_mensagem,:new.usuario_criacao);

    /*Envia a mensagem aos responsáveis pelo cadastro*/
    cgpr_utl_criaalerta(v_mensagem,'ANG');
    cgpr_utl_criaalerta(v_mensagem,'MAR');

  ELSIF v_temcontatozero > 0
        AND instr(v_email,'@') <= 1 THEN
    /*Se tiver contato zero, porém o email estiver inválido (mal formado)
      exibe a mensagem abaixo...
    */

    v_mensagem := 'O Cliente '
                  ||trim(v_nomecliente)
                  ||' informado no pedido '
                  ||trim(:new.cd_pedido)
                  ||' possui o email "'
                  ||v_email
                  ||'" que parece ser inválido. '
                  ||' Por favor, informe o email correto no "Acompanhamento" do pedido.'
                  ||' O email é obrigatório para a emissão da Nota Fiscal Eletrônica.';

    /*Envia a mensagem para o usuário que está cadastrando o pedido*/
    cgpr_utl_criaalerta(v_mensagem,:new.usuario_criacao);

    /*Envia a mensagem aos responsáveis pelo cadastro*/
    cgpr_utl_criaalerta(v_mensagem,'ANG');
    cgpr_utl_criaalerta(v_mensagem,'MAR');

  END IF;

END cgtr_validacontatozeroped_i;


Ao ativar esta trigger na base, cada vez que um pedido novo é criado, com um cliente que não possue e-mail informado no contato zero (0), é disparado um alerta na tela do CIGAM para o usuário informando do problema. e ainda para outros 2 usuários responsáveis pelo cadastro. Como podemos conferir abaixo:


A partir daí podemos  complementar esta procedure para outras formas de envio, como para todos, para grupos, etc. E para situações como as apresentadas no começo.  Vamos agora abusar deste simples mas muito útil recurso.

Estou concluindo também a procedure em versão MSSQL. Vou postá-la na sequência aqui no Blog.

Comentem e dêem suas sugestões para utilização desta rotina no CIGAM...
Postar um comentário

Postagens mais visitadas deste blog

[Kettle] - Ajuste de problema com horário de verão

[eXo] - Remover janela de solicitação de Registro

Pegando informações de Sessão no Oracle e equivalente no MSSQL