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) AND
           (NEW.SITUACAO = 2)
          ) 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 ; ^

