SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_devolucao_troca_b04iu for tbpdv_devolucao_troca
active before insert or update position 4
AS
DECLARE VARIABLE ESTABELECIMENTO_ID   INTEGER;

BEGIN
 IF(INSERTING OR UPDATING) THEN
 BEGIN
     IF(TRIM(NEW.TIPO_ED) = '1')THEN
     BEGIN

        :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(C.ESTABELECIMENTO_ID, N.ESTABELECIMENTO_CODIGO)
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            LEFT JOIN TBPDV_CFE            C ON C.ID          = T.DOCUMENTO_CONTROLE AND T.TIPO_DOCUMENTO = '2'
            LEFT JOIN TBNFS            N ON N.CONTROLE        = T.DOCUMENTO_CONTROLE AND T.TIPO_DOCUMENTO = '1'
            WHERE T.PDV_DEVOLUCAO_ID = NEW.ID), 0);

        IF(:ESTABELECIMENTO_ID = 0) THEN
        BEGIN

            IF(TRIM(NEW.TIPO_DOCUMENTO) = '1') THEN
            BEGIN

                :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(T.ESTABELECIMENTO_CODIGO, 0)
                    FROM TBNFS T
                    WHERE T.CONTROLE = NEW.DOCUMENTO_ID), 0);
                
            END ELSE IF(TRIM(NEW.TIPO_DOCUMENTO) = '2') THEN
            BEGIN

                :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(T.ESTABELECIMENTO_ID, 0)
                    FROM TBPDV_CFE T
                    WHERE T.ID = NEW.DOCUMENTO_ID), 0);

            END
        END

        NEW.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID;

     END
     ELSE IF(TRIM(NEW.TIPO_ED) = '2') THEN
     BEGIN

        :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(C.ESTABELECIMENTO_ID, N.ESTABELECIMENTO_CODIGO)
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            LEFT JOIN TBPDV_CFE            C ON C.ID          = T.DOCUMENTO_CONTROLE AND T.TIPO_DOCUMENTO = '2'
            LEFT JOIN TBNFS            N ON N.CONTROLE        = T.DOCUMENTO_CONTROLE AND T.TIPO_DOCUMENTO = '1'
            WHERE T.PDV_DEVOLUCAO_ID = NEW.ID), 0);

        IF(:ESTABELECIMENTO_ID = 0) THEN
        BEGIN

            IF(TRIM(NEW.TIPO_DOCUMENTO) = '1') THEN
            BEGIN

                :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(T.ESTABELECIMENTO_CODIGO, 0)
                    FROM TBNFS T
                    WHERE T.CONTROLE = NEW.DOCUMENTO_ID), 0);
                
            END ELSE IF(TRIM(NEW.TIPO_DOCUMENTO) = '2') THEN
            BEGIN

                :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(T.ESTABELECIMENTO_ID, 0)
                    FROM TBPDV_CFE T
                    WHERE T.ID = NEW.DOCUMENTO_ID), 0);

            END
        END

         NEW.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID;

     END
     ELSE IF(TRIM(NEW.TIPO_ED) = '3')THEN
     BEGIN

        :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(C.ESTABELECIMENTO_CODIGO, 0)
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFE            C ON C.CONTROLE          = T.DOCUMENTO_CONTROLE
            WHERE T.PDV_DEVOLUCAO_ID = NEW.ID), 0);

        IF(:ESTABELECIMENTO_ID = 0) THEN
        BEGIN

            IF(TRIM(NEW.TIPO_DOCUMENTO) = '1') THEN
            BEGIN

                :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(T.ESTABELECIMENTO_CODIGO, 0)
                    FROM TBNFE T
                    WHERE T.CONTROLE = NEW.DOCUMENTO_ID), 0);
                
            END ELSE IF(TRIM(NEW.TIPO_DOCUMENTO) = '2') THEN
            BEGIN

                :ESTABELECIMENTO_ID = COALESCE((SELECT FIRST 1 COALESCE(T.ESTABELECIMENTO_ID, 0)
                    FROM TBPDV_CFE T
                    WHERE T.ID = NEW.DOCUMENTO_ID), 0);

            END
        END

        NEW.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID;

     END
 END
END
^

SET TERM ; ^

