SET TERM ^ ;
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) = 0)THEN
    BEGIN     
    
        IF(NEW.FORMA_COMISSAO IS DISTINCT FROM OLD.FORMA_COMISSAO) 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.FORMA_COMISSAO = NEW.FORMA_COMISSAO, 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
             -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE VENDEDOR
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END*/
        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

            -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE CANAL DE VENDAS
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_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
            -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE CORRETOR
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_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

             -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE REPRESENTANTE
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.REPRESENTANTE_ID = NEW.REPRESENTANTE_CODIGO, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_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
             -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE VENDEDOR
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END
        END
    END

    if(new.alterando_pre_pedido = 1)THEN
    BEGIN
       NEW.ALTERANDO_PRE_PEDIDO = 0;
    END
END
^ SET TERM ; ^