CREATE OR ALTER trigger ttbpesquisa_b9u_01 for tbpesquisa
active before update position 8
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

end;

CREATE OR ALTER trigger ttbdefeito_trans_item_b0iu_01 for tbdefeito_transacao_item
active before insert or update position 0
AS
DECLARE VARIABLE ESTABELECIMENTO INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(20);
DECLARE VARIABLE UM    VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC  CHAR(1);
BEGIN

end;

ALTER TABLE TBPESQUISA ADD OLD_PERFIL VARCHAR(10) DEFAULT '';
update TBPESQUISA set OLD_PERFIL = PERFIL;
ALTER TABLE TBPESQUISA DROP PERFIL;
ALTER TABLE TBPESQUISA ADD PERFIL VARCHAR(10) DEFAULT '';
update TBPESQUISA set PERFIL = OLD_PERFIL;
ALTER TABLE TBPESQUISA DROP OLD_PERFIL;


CREATE OR ALTER trigger ttbdefeito_trans_item_b0iu_01 for tbdefeito_transacao_item
active before insert or update position 0
AS
DECLARE VARIABLE ESTABELECIMENTO INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(20);
DECLARE VARIABLE UM    VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC  CHAR(1);
BEGIN

   USUARIO_NOME = (Select MON$USER from mon$attachments where mon$attachment_id = current_connection);

   if (:Usuario_Nome <> 'SYSDBA' and :Usuario_Nome <> 'GC') Then
       Begin

       USUARIO_ID = Coalesce((Select First 1 U.Codigo From TbUsuario U Where U.USUARIO = :USUARIO_NOME and U.Status = '1'),0);

       if (NEW.QUANTIDADE > 10000) then
           BEGIN
             Exception "..." 'QUANTIDADE INVALIDA: '||NEW.QUANTIDADE||
             ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
           END

          if (:USUARIO_ID = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO INATIVO OU NÃO LOCALIZADO: '||:USUARIO_NOME||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

        Estabelecimento = Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID),0);

        For Select First 1 U.SIGLA, P.DESCRICAO, U.PODE_FRACIONAR,
        IIF(:ESTABELECIMENTO>0,Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID and E.Estabelecimento_Codigo = New.Estabelecimento_Id),0),-1)
        From TbProduto P, TbUnidadeMedida U
        Where P.Codigo = New.Produto_Id and P.Unidademedida_Sigla = U.Sigla
        Into :UM, :DESCR, :FRAC, :ESTABELECIMENTO
        Do
        Begin
          if (:ESTABELECIMENTO = 0) then
              BEGIN
                  Exception "..." 'USUARIO NAO TEM PERMISSAO DE REGISTRAR DEFEITOS DO ESTABELECIMENTO INFORMADO: '||
                  :ESTABELECIMENTO||'-'||Coalesce((Select First 1 E.NomeFantasia From TbEstabelecimento E Where E.Codigo = New.Estabelecimento_Id),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
--        if (:FAM_USUARIO = 0) then
--            BEGIN
--                Exception "..." 'USUÁRIO NÃO TEM PERMISSÃO DE REGISTRAR DEFEITOS DA FAMÍLIA DESTE PRODUTO: '||
--                :FAMILIA_ID||'-'||Coalesce((Select First 1 F.Descricao From TbFamilia F Where F.Codigo = :FAMILIA_ID),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
--                ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
--            END
          if (:FRAC = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NAO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.PRODUTO_ID||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          NEW.USUARIO_ID = :USUARIO_ID;
        End
     End
END;



CREATE OR ALTER trigger ttbpesquisa_b9u_01 for tbpesquisa
active before update position 8
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.observacao <> NEW.observacao) then
       BEGIN
       HISTORICO = HISTORICO||' Obs.'||OLD.observacao||'->'||NEW.observacao;
       END
   if (OLD.datainicio<> NEW.datainicio) then
       BEGIN
       HISTORICO = HISTORICO||' Dt.Ini.'||OLD.datainicio||'->'||NEW.datainicio;
       END
   if (OLD.datafim<> NEW.datafim) then
       BEGIN
       HISTORICO = HISTORICO||' Dt.Fim '||OLD.datafim||'->'||NEW.datafim;
       END
    if (OLD.exige_cliente<> NEW.exige_cliente) then
       BEGIN
       HISTORICO = HISTORICO||' Exi.Cli.'||OLD.exige_cliente||'->'||NEW.exige_cliente;
       END
    if (OLD.perfil<> NEW.perfil) then
       BEGIN
       HISTORICO = HISTORICO||' Perf.'||OLD.perfil||'->'||NEW.perfil;
       END

   if (OLD.STATUS <> NEW.STATUS) then
       BEGIN
       if (NEW.STATUS = '0') then
           HISTORICO = HISTORICO||' Status Inativado';
       if (NEW.STATUS = '1') then
           HISTORICO = HISTORICO||' Status Ativado';
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBPESQUISA', OLD.Id,
      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
       :Historico);
       End
end;
