SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_cfe_item_b03i for tbpdv_cfe_item
active before insert position 3
AS
DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER;
DECLARE VARIABLE ID_REGRA INTEGER;
DECLARE VARIABLE CFOP_DESTINO VARCHAR(5);
DECLARE VARIABLE OPERACAO_DESTINO VARCHAR(3);
BEGIN
    /* PARA VENDAS FEITAS NO ONLINE */

    IF(COALESCE(NEW.OFFLINE_ID, 0) = 0) THEN
    BEGIN
        :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 T.ESTABELECIMENTO_ID FROM TBPDV_CFE T WHERE T.ID = NEW.PDV_CFE_ID), 0);

        SELECT FIRST 1
               T.ID, T.CFOP_DESTINO, T.OPERACAO_DESTINO
        FROM TBREGRA_FAMILIA_CFOP T
        WHERE T.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
        AND T.FAMILIA_ID         = NEW.FAMILIA_ID
        AND T.CFOP_ORIGEM        = NEW.CFOP_CODIGO
        AND T.OPERACAO_CODIGO    = NEW.OPERACAO_CODIGO
        INTO :ID_REGRA, :CFOP_DESTINO, :OPERACAO_DESTINO;
    
        IF(COALESCE(:ID_REGRA, 0) > 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 ; ^

