SET TERM ^ ;
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 pre_pedido_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 CAIXA_ID              INTEGER;
DECLARE VARIABLE PARCELA               INTEGER;
DECLARE VARIABLE FORMA_PAGAMENTO_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,
                    coalesce(a.pre_pedido_id,0) as pre_pedido_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, coalesce(a.pre_pedido_id,0)

           INTO :PEDIDO, :CANAL_VENDAS_ID, :CORRETOR_ID, :REPRESENTANTE_ID, :VENDEDOR_ID, :pre_pedido_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
                   update TBPEDIDO P SET
                     P.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_ID,
                     P.CANAL_VENDAS_ID      = NEW.CANAL_VENDAS_ID,
                     P.CORRETOR_ID          = NEW.CORRETOR_ID,
                     P.VENDEDOR_ID          = NEW.VENDEDOR_ID,
                     P.alterando_pre_pedido = 1
                     WHERE P.PEDIDO = :PEDIDO;

                     IF(:pre_pedido_id > 0) THEN
                     BEGIN

                       UPDATE TBPDV_CONFERENCIA A SET
                            A.representante_id  = NEW.REPRESENTANTE_ID,
                            A.CANAL_VENDAS_ID   = NEW.CANAL_VENDAS_ID,
                            A.CORRETOR_ID       = NEW.CORRETOR_ID,
                            A.VENDEDOR_ID       = NEW.VENDEDOR_ID
                        WHERE A.id              = :pre_pedido_id;

                     END
                END
           END

           FOR
             SELECT A.ID
                FROM TBPDV_CONFERENCIA A, tbpdv_conferencia_item B, TBPDV_CFE_ITEM C
                WHERE A.id                    = B.pdv_conferencia_id
                AND C.conferencia_item_id     = B.id
                AND A.id                      = C.conferencia_id
                AND C.pdv_cfe_id            = NEW.ID
                GROUP BY A.ID
                INTO :pre_pedido_id DO
                BEGIN
                     
                   UPDATE TBPDV_CONFERENCIA A SET
                        A.REPRESENTANTE_ID  = NEW.REPRESENTANTE_ID,
                        A.CANAL_VENDAS_ID   = NEW.CANAL_VENDAS_ID,
                        A.CORRETOR_ID       = NEW.CORRETOR_ID,
                        A.VENDEDOR_ID       = NEW.VENDEDOR_ID
                    WHERE A.ID              = :pre_pedido_id;

                END
       END

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

    IF(NEW.pdv_movimento_caixa_id IS DISTINCT FROM OLD.pdv_movimento_caixa_id) THEN
     BEGIN
          CAIXA_ID = COALESCE((SELECT FIRST 1 MOV.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA MOV WHERE MOV.id = NEW.pdv_movimento_caixa_id),0);
          FOR SELECT
                P.CONTROLE,
                FORMA.ID
                FROM TBNFS_PARCELAMENTO P, TBPDV_CFE_FORMA_PAGAMENTO FORMA
                WHERE P.pdv_cfe_forma_pagamento_id = FORMA.ID
                AND FORMA.pdv_cfe_id = NEW.id
                INTO :PARCELA, :FORMA_PAGAMENTO_ID DO
                BEGIN
                   UPDATE tbnfs_parcelamento A
                        SET A.CAIXA_ID                   = :CAIXA_ID
                      WHERE A.CONTROLE                   = :PARCELA
                        AND A.pdv_cfe_forma_pagamento_id = :FORMA_PAGAMENTO_ID;
                END

     END
END
^ SET TERM ; ^