SET TERM ^ ;

CREATE OR ALTER trigger tbnfe_item_b05i for tbnfe_item
active before insert position 5
AS
DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE ID_REGRA INTEGER;
DECLARE VARIABLE CFOP_DESTINO VARCHAR(5);
DECLARE VARIABLE OPERACAO_DESTINO VARCHAR(3);
BEGIN

    /* BUSCA FAMILIA DO PRODUTO */
    SELECT T.FAMILIA_ALTERNATIVA FROM TBPRODUTO T WHERE T.CODIGO = NEW.PRODUTO_CODIGO INTO :FAMILIA_ID;

    IF(:FAMILIA_ID > 0) THEN
    BEGIN
        /* BUSCA PARÂMETROS DA REGRA FAMÍLIA -> CFOP */

        SELECT FIRST 1
               T.ID, T.CFOP_DESTINO, T.OPERACAO_DESTINO
          FROM TBREGRA_FAMILIA_CFOP T
         WHERE T.ESTABELECIMENTO_ID = NEW.ESTABELECIMENTO_CODIGO
           AND T.FAMILIA_ID         = :FAMILIA_ID
           AND T.CFOP_ORIGEM        = NEW.CFOP_CODIGO
           AND T.OPERACAO_CODIGO    = NEW.OPERACAO_CODIGO
          INTO :ID_REGRA, :CFOP_DESTINO, :OPERACAO_DESTINO;

            IF(:ID_REGRA > 0) THEN
            BEGIN
                /* DEFINE NOVO VALOR DO CFOP DE ACORDO COM A REGRA ENCONTRADA */
                NEW.CFOP_CODIGO = :CFOP_DESTINO;
                NEW.FISCAL_CFOP_CODIGO = :CFOP_DESTINO;
                NEW.OPERACAO_CODIGO = :OPERACAO_DESTINO;
            END
    END

END
^

SET TERM ; ^

