ALTER TABLE TBPEDIDO
ADD ALTERANDO_PRE_PEDIDO INTEGER
DEFAULT 0^

ALTER TABLE TBNFS
ADD ALTERANDO_PEDIDO INTEGER
DEFAULT 0^

ALTER TABLE TBPDV_CFE
ADD ALTERANDO_PEDIDO INTEGER
DEFAULT 0^


CREATE OR ALTER TRIGGER TTBPDV_CONFERENCIA_B01U FOR TBPDV_CONFERENCIA
ACTIVE BEFORE UPDATE POSITION 1
AS 
DECLARE VARIABLE NFS_ID INTEGER;
DECLARE VARIABLE PDV_CFE_ID INTEGER;
DECLARE VARIABLE PEDIDO INTEGER;
BEGIN
    IF(NEW.CANAL_VENDAS_ID IS DISTINCT FROM OLD.CANAL_VENDAS_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END

    
    IF(NEW.CORRETOR_ID IS DISTINCT FROM OLD.CORRETOR_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.CORRETOR_ID = NEW.CORRETOR_ID WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.CORRETOR_ID = NEW.CORRETOR_ID WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END

    IF(NEW.REPRESENTANTE_ID IS DISTINCT FROM OLD.REPRESENTANTE_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_ID WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.REPRESENTANTE_ID = NEW.REPRESENTANTE_ID WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END     

    IF(NEW.VENDEDOR_ID IS DISTINCT FROM OLD.VENDEDOR_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END
END^

CREATE OR ALTER TRIGGER TTBPEDIDO_B18U FOR TBPEDIDO
ACTIVE BEFORE UPDATE POSITION 1
AS 
DECLARE VARIABLE NFS_ID                INTEGER;
DECLARE VARIABLE PDV_CFE_ID            INTEGER;
DECLARE VARIABLE CANAL_VENDAS_ID       INTEGER;
DECLARE VARIABLE CORRETOR_ID           INTEGER;
DECLARE VARIABLE REPRESENTANTE_ID      INTEGER;
DECLARE VARIABLE VENDEDOR_ID           INTEGER;
declare variable MSG_ERRO        VARCHAR(5000);
BEGIN

    IF(NEW.PRE_PEDIDO_ID > 0
       AND (NEW.CANAL_VENDAS_ID      IS DISTINCT FROM OLD.CANAL_VENDAS_ID
         OR NEW.CORRETOR_ID          IS DISTINCT FROM OLD.CORRETOR_ID
         OR NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM OLD.REPRESENTANTE_CODIGO
         OR NEW.VENDEDOR_ID          IS DISTINCT FROM OLD.VENDEDOR_ID)
       AND COALESCE(NEW.ALTERANDO_PRE_PEDIDO, 0) <> 1) THEN
       BEGIN
           MSG_ERRO = '';
           FOR SELECT
                A.CANAL_VENDAS_ID,
                A.CORRETOR_ID,
                A.REPRESENTANTE_ID,
                A.VENDEDOR_ID
           FROM TBPDV_CONFERENCIA A
           WHERE A.ID = NEW.PRE_PEDIDO_ID
           INTO :CANAL_VENDAS_ID, :CORRETOR_ID, :REPRESENTANTE_ID, :VENDEDOR_ID DO
           BEGIN
              IF( NEW.CANAL_VENDAS_ID      IS DISTINCT FROM :CANAL_VENDAS_ID
               OR NEW.CORRETOR_ID          IS DISTINCT FROM :CORRETOR_ID
               OR NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM :REPRESENTANTE_ID
               OR NEW.VENDEDOR_ID          IS DISTINCT FROM :VENDEDOR_ID)THEN
                BEGIN
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.CANAL_VENDAS_ID      IS DISTINCT FROM :CANAL_VENDAS_ID ,'<h4>Troca de canal de vendas nao permitida.</h4>','');
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.CORRETOR_ID          IS DISTINCT FROM :CORRETOR_ID     ,'<h4>Troca de corretor nao permitida.</h4>'       ,'');
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM :REPRESENTANTE_ID,'<h4>Troca de representante nao permitida.</h4>'  ,'');
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.VENDEDOR_ID          IS DISTINCT FROM :VENDEDOR_ID     ,'<h4>Troca de vendedor nao permitida.</h4>'       ,'');
                   EXCEPTION "..." '<h4>ATENCAO</h4><strong>PEDIDO POSSUI VINCULO COM PRE-PEDIDO</strong>'||:MSG_ERRO;
                END
           END
       END

    IF(COALESCE(NEW.ALTERANDO_PRE_PEDIDO, 0) = 1)THEN
    BEGIN
       NEW.ALTERANDO_PRE_PEDIDO = 0;
    END

    IF(NEW.CANAL_VENDAS_ID IS DISTINCT FROM OLD.CANAL_VENDAS_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
                T.NFS_CONTROLE
               FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.NFS_CONTROLE
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
                T.PDV_CFE_ID
               FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.PDV_CFE_ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END
    END

    
    IF(NEW.CORRETOR_ID IS DISTINCT FROM OLD.CORRETOR_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
                T.NFS_CONTROLE
               FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.NFS_CONTROLE
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
                T.PDV_CFE_ID
               FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.PDV_CFE_ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END
    END

    IF(NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM OLD.REPRESENTANTE_CODIGO) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
                T.NFS_CONTROLE
               FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.NFS_CONTROLE
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_CODIGO, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
                T.PDV_CFE_ID
               FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.PDV_CFE_ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.REPRESENTANTE_ID = NEW.REPRESENTANTE_CODIGO, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END
    END     

    IF(NEW.VENDEDOR_ID IS DISTINCT FROM OLD.VENDEDOR_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
                T.NFS_CONTROLE
               FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.NFS_CONTROLE
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
                T.PDV_CFE_ID
               FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
            WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
            AND IT.PEDIDO = NEW.PEDIDO
            GROUP BY T.PDV_CFE_ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END
    END
END^


CREATE OR ALTER TRIGGER TTBPDV_CFE_B11I FOR TBPDV_CFE
ACTIVE BEFORE UPDATE POSITION 1
AS 
DECLARE VARIABLE PEDIDO                INTEGER;
DECLARE VARIABLE PDV_CFE_ID            INTEGER;
DECLARE VARIABLE CANAL_VENDAS_ID       INTEGER;
DECLARE VARIABLE CORRETOR_ID           INTEGER;
DECLARE VARIABLE REPRESENTANTE_ID      INTEGER;
DECLARE VARIABLE VENDEDOR_ID           INTEGER;
declare variable MSG_ERRO        VARCHAR(5000);
BEGIN

      IF((NEW.CANAL_VENDAS_ID        IS DISTINCT FROM OLD.CANAL_VENDAS_ID
         OR NEW.CORRETOR_ID          IS DISTINCT FROM OLD.CORRETOR_ID
         OR NEW.REPRESENTANTE_ID     IS DISTINCT FROM OLD.REPRESENTANTE_ID
         OR NEW.VENDEDOR_ID          IS DISTINCT FROM OLD.VENDEDOR_ID)
       AND COALESCE(NEW.ALTERANDO_PEDIDO, 0) <> 1) THEN
       BEGIN
           MSG_ERRO = '';
           FOR SELECT
                    A.PEDIDO,
                    MAX(COALESCE(A.CANAL_VENDAS_ID , 0))     AS CANAL_VENDAS_ID,
                    MAX(COALESCE(A.CORRETOR_ID     , 0))     AS CORRETOR_ID,
                    MAX(COALESCE(A.REPRESENTANTE_CODIGO, 0)) AS REPRESENTANTE_ID,
                    MAX(COALESCE(A.VENDEDOR_ID     , 0))     AS VENDEDOR_ID
                FROM TBPDV_CFE_ITEM IT, TBPEDIDO A, TBPEDIDO_ITEM B
                WHERE IT.PDV_CFE_ID            = new.ID
                AND IT.PEDIDO_ITEM_ID          = B.CONTROLE
                AND B.PEDIDO                   = A.PEDIDO
                AND B.SITUACAO                 = 2
            GROUP BY IT.PDV_CFE_ID, A.PEDIDO

           INTO :PEDIDO, :CANAL_VENDAS_ID, :CORRETOR_ID, :REPRESENTANTE_ID, :VENDEDOR_ID DO
           BEGIN
              IF( NEW.CANAL_VENDAS_ID      IS DISTINCT FROM :CANAL_VENDAS_ID
               OR NEW.CORRETOR_ID          IS DISTINCT FROM :CORRETOR_ID
               OR NEW.REPRESENTANTE_ID     IS DISTINCT FROM :REPRESENTANTE_ID
               OR NEW.VENDEDOR_ID          IS DISTINCT FROM :VENDEDOR_ID)THEN
                BEGIN
                   :MSG_ERRO = '<h4>Trocas de canal de vendas, corretor, representante e vendedor devem ser realizadas na tela <a HREF="'||COALESCE(FN_PARAMETRO('SISTEMA.URL_SERVER')||'/_12201?PEDIDO='||:PEDIDO,'')||'" TARGET="_BLANK">12201 - Registro de Pedidos</a>.</h4>';
                   EXCEPTION "..." '<h4>ATENCAO</h4><strong>CUPOM FISCAL POSSUI VINCULO COM PEDIDO '||FN_LPAD(:PEDIDO, 6, 0)||'</strong>'||:MSG_ERRO;
                END
           END
       END

       
    IF(COALESCE(NEW.ALTERANDO_PEDIDO, 0) = 1)THEN
    BEGIN
       NEW.ALTERANDO_PEDIDO = 0;
    END
END^

CREATE OR ALTER TRIGGER TTBNFS_B19U FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 6
AS 
DECLARE VARIABLE PEDIDO                INTEGER;
DECLARE VARIABLE PDV_CFE_ID            INTEGER;
DECLARE VARIABLE CANAL_VENDAS_ID       INTEGER;
DECLARE VARIABLE CORRETOR_ID           INTEGER;
DECLARE VARIABLE REPRESENTANTE_ID      INTEGER;
DECLARE VARIABLE VENDEDOR_ID           INTEGER;
declare variable MSG_ERRO        VARCHAR(5000);
BEGIN

      IF((NEW.CANAL_VENDAS_ID      IS DISTINCT FROM OLD.CANAL_VENDAS_ID
         OR NEW.CORRETOR_ID          IS DISTINCT FROM OLD.CORRETOR_ID
         OR NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM OLD.REPRESENTANTE_CODIGO
         OR NEW.VENDEDOR_ID          IS DISTINCT FROM OLD.VENDEDOR_ID)
       AND COALESCE(NEW.ALTERANDO_PEDIDO, 0) <> 1) THEN
       BEGIN
           MSG_ERRO = '';
           FOR SELECT
                A.PEDIDO,
                MAX(COALESCE(A.CANAL_VENDAS_ID , 0)) AS CANAL_VENDAS_ID,
                MAX(COALESCE(A.CORRETOR_ID     , 0)) AS CORRETOR_ID,
                MAX(COALESCE(A.REPRESENTANTE_CODIGO, 0)) AS REPRESENTANTE_ID,
                MAX(COALESCE(A.VENDEDOR_ID     , 0)) AS VENDEDOR_ID
            FROM TBNFS_ITEM IT, TBPEDIDO A, TBPEDIDO_ITEM B
            WHERE IT.NFS_CONTROLE          = NEW.CONTROLE
            AND IT.PEDIDO_ITEM_PE_CONTROLE = B.CONTROLE
            AND B.PEDIDO                   = A.PEDIDO
            AND B.SITUACAO                 = 2
            GROUP BY IT.NFS_CONTROLE, A.PEDIDO

           INTO :PEDIDO, :CANAL_VENDAS_ID, :CORRETOR_ID, :REPRESENTANTE_ID, :VENDEDOR_ID DO
           BEGIN
              IF( NEW.CANAL_VENDAS_ID      IS DISTINCT FROM :CANAL_VENDAS_ID
               OR NEW.CORRETOR_ID          IS DISTINCT FROM :CORRETOR_ID
               OR NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM :REPRESENTANTE_ID
               OR NEW.VENDEDOR_ID          IS DISTINCT FROM :VENDEDOR_ID)THEN
                BEGIN
                   :MSG_ERRO = '<h4>Trocas de canal de vendas, corretor, representante e vendedor devem ser realizadas na tela <a HREF="'||COALESCE(FN_PARAMETRO('SISTEMA.URL_SERVER')||'/_12201?PEDIDO='||:PEDIDO,'')||'" TARGET="_BLANK">12201 - Registro de Pedidos</a>.</h4>';
                   EXCEPTION "..." '<h4>ATENCAO</h4><strong>DOCUMENTO FISCAL POSSUI VINCULO COM PEDIDO '||FN_LPAD(:PEDIDO, 6, 0)||'</strong>'||:MSG_ERRO;
                END
           END
       END

       
    IF(COALESCE(NEW.ALTERANDO_PEDIDO, 0) = 1)THEN
    BEGIN
       NEW.ALTERANDO_PEDIDO = 0;
    END
END^

CREATE OR ALTER TRIGGER TTBPDV_CONFERENCIA_B01U FOR TBPDV_CONFERENCIA
ACTIVE BEFORE UPDATE POSITION 1
AS 
DECLARE VARIABLE NFS_ID INTEGER;
DECLARE VARIABLE PDV_CFE_ID INTEGER;
DECLARE VARIABLE PEDIDO INTEGER;
BEGIN
    IF(NEW.CANAL_VENDAS_ID IS DISTINCT FROM OLD.CANAL_VENDAS_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE CANAL DE VENDAS
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END

    
    IF(NEW.CORRETOR_ID IS DISTINCT FROM OLD.CORRETOR_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE CORRETOR
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END

    IF(NEW.REPRESENTANTE_ID IS DISTINCT FROM OLD.REPRESENTANTE_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.REPRESENTANTE_ID = NEW.REPRESENTANTE_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE REPRESENTANTE
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END     

    IF(NEW.VENDEDOR_ID IS DISTINCT FROM OLD.VENDEDOR_ID) THEN
    BEGIN

        -- ATUALIZACAO NAS NF'S PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
            T.NFS_CONTROLE
           FROM TBNFS_ITEM T
        WHERE T.PDV_CONFERENCIA_ID = NEW.ID
        INTO :NFS_ID
        DO BEGIN
            UPDATE TBNFS X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
        END

        -- ATUALIZACAO NOS CF'S PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
            T.PDV_CFE_ID
           FROM TBPDV_CFE_ITEM T
        WHERE T.CONFERENCIA_ID = NEW.ID
        INTO :PDV_CFE_ID
        DO BEGIN
            UPDATE TBPDV_CFE X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
        END

        -- ATUALIZACAO NOS PEDIDOS PARA TROCA DE VENDEDOR
        FOR SELECT DISTINCT
            T.PEDIDO
           FROM TBPEDIDO T
        WHERE T.PRE_PEDIDO_ID = NEW.ID
        INTO :PEDIDO
        DO BEGIN
            UPDATE TBPEDIDO X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PRE_PEDIDO = 1 WHERE X.PEDIDO = :PEDIDO;
        END
    END
END^