SET TERM ^ ;

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(COALESCE(NEW.ALTERANDO_PEDIDO,0) = 0) THEN
   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

            FOR SELECT DISTINCT
                B.NFS_CONTROLE
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBNFS_ITEM B
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
               AND B.NF_SITUACAO <> 3
               GROUP BY B.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

            FOR SELECT DISTINCT
                B.PDV_CFE_ID
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBPDV_CFE_ITEM B, TBPDV_CFE C
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_ID = IT.CONTROLE
               AND C.ID = B.PDV_CFE_ID
               AND C.SITUACAO <> 3
               GROUP BY B.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
            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

             FOR SELECT DISTINCT
                B.NFS_CONTROLE
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBNFS_ITEM B
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
               AND B.NF_SITUACAO <> 3
               GROUP BY B.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

            FOR SELECT DISTINCT
                B.PDV_CFE_ID
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBPDV_CFE_ITEM B, TBPDV_CFE C
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_ID = IT.CONTROLE
               AND C.ID = B.PDV_CFE_ID
               AND C.SITUACAO <> 3
               GROUP BY B.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_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

            
             FOR SELECT DISTINCT
                B.NFS_CONTROLE
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBNFS_ITEM B
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
               AND B.NF_SITUACAO <> 3
               GROUP BY B.NFS_CONTROLE
            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

            FOR SELECT DISTINCT
                B.PDV_CFE_ID
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBPDV_CFE_ITEM B, TBPDV_CFE C
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_ID = IT.CONTROLE
               AND C.ID = B.PDV_CFE_ID
               AND C.SITUACAO <> 3
               GROUP BY B.PDV_CFE_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
        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

            
             FOR SELECT DISTINCT
                B.NFS_CONTROLE
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBNFS_ITEM B
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
               AND B.NF_SITUACAO <> 3
               GROUP BY B.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

            FOR SELECT DISTINCT
                B.PDV_CFE_ID
               FROM TBPEDIDO T, TBPEDIDO_ITEM IT, TBPDV_CFE_ITEM B, TBPDV_CFE C
            WHERE T.PRE_PEDIDO_ID = NEW.ID
               AND T.PEDIDO = IT.PEDIDO
               AND B.PEDIDO_ITEM_ID = IT.CONTROLE
               AND C.ID = B.PDV_CFE_ID
               AND C.SITUACAO <> 3
               GROUP BY B.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

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

    IF(COALESCE(NEW.STATUS_ITENS,0) <> COALESCE(OLD.STATUS_ITENS,0))THEN
    BEGIN
       IF(COALESCE(NEW.STATUS_ITENS,0) = 4)THEN
       BEGIN
          UPDATE TBPDV_DEVOLUCAO_TROCA   TR SET TR.PRE_PEDIDO_ID = 0 WHERE TR.PRE_PEDIDO_ID = NEW.ID;

          UPDATE TBPDV_CONFERENCIA_TROCA TR SET TR.PRE_PEDIDO_ID = 0 WHERE TR.PRE_PEDIDO_ID = NEW.ID;
       END
    END
END^

SET TERM ; ^