CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B02I FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE INSERT POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';
    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = 'REGISTRO INCLUIDO.';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', NEW.ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B01U FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
  HISTORICO = '';

  IF(NEW.CLIENTE_ID <> OLD.CLIENTE_ID) THEN
  BEGIN
     HISTORICO = HISTORICO||' CLIENTE:'||OLD.CLIENTE_ID||'->'||NEW.CLIENTE_ID;
  END 

  IF(NEW.TIPO_ED <> OLD.TIPO_ED) THEN
  BEGIN
     HISTORICO = HISTORICO||' TIPO:'||OLD.TIPO_ED||'->'||NEW.TIPO_ED;
  END 

  IF(NEW.TIPO_DOCUMENTO <> OLD.TIPO_DOCUMENTO) THEN
  BEGIN
     HISTORICO = HISTORICO||' TIPO DOC:'||OLD.TIPO_DOCUMENTO||'->'||NEW.TIPO_DOCUMENTO;
  END   

  IF(NEW.DOCUMENTO_IR <> OLD.DOCUMENTO_IR) THEN
  BEGIN
     HISTORICO = HISTORICO||' DOC:'||OLD.DOCUMENTO_IR||'->'||NEW.DOCUMENTO_IR;
  END

  IF(NEW.VALOR_SALDO <> OLD.VALOR_SALDO) THEN
  BEGIN
     HISTORICO = HISTORICO||' VLR SALDO:'||OLD.VALOR_SALDO||'->'||NEW.VALOR_SALDO;
  END

  IF(HISTORICO <> '') THEN
  BEGIN
     HISTORICO = 'REG.ALTERADO: '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', OLD.ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B03I FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 2
AS
DECLARE VARIABLE NFS_CONTROLE         INTEGER;
DECLARE VARIABLE NUMERO_CFE           INTEGER;
DECLARE VARIABLE ITEM_ID              INTEGER;
DECLARE VARIABLE QUANTIDADE           NUMERIC(15,8);
DECLARE VARIABLE QUANTIDADE_ITEM_NFS  NUMERIC(15,8);
DECLARE VARIABLE SALDO_ATUALIZADO     NUMERIC(15,8);
begin
 IF(INSERTING OR UPDATING) THEN
 BEGIN
     IF(NEW.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE,
            t.QUANTIDADE,
            a.quantidade as quantidade_item_nfs,
            (a.QUANTIDADE - t.quantidade) saldo_atualizado
        
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFS           C ON C.CONTROLE          = T.DOCUMENTO_CONTROLE
            LEFT  JOIN TBNFS_ITEM      A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = T.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO       B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO        D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TBUNIDADEMEDIDA E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA
                    
            WHERE T.PDV_DEVOLUCAO_ID = NEW.ID
            AND C.EMPRESA_CODIGO     = NEW.CLIENTE_ID
            AND A.NFS_CONTROLE       = C.CONTROLE
            INTO :NFS_CONTROLE,
                 :ITEM_ID,
                 :QUANTIDADE,
                 :QUANTIDADE_ITEM_NFS,
                 :SALDO_ATUALIZADO
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT A.PDV_CFE_ID,
                A.ID,
                T.QUANTIDADE,
                A.QUANTIDADE  as quantidade_item_nfs,
                (a.QUANTIDADE - t.quantidade) saldo_atualizado
            
                FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
                LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = T.ITEM_SEQUENCIA
                INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
                INNER JOIN TBPDV_CFE            C ON C.ID         = T.DOCUMENTO_CONTROLE
                LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
                LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA
            
                WHERE T.PDV_DEVOLUCAO_ID = NEW.ID
                AND A.PDV_CFE_ID         = C.ID
                AND C.CLIENTE_ID         = NEW.CLIENTE_ID
        INTO :NFS_CONTROLE,
             :ITEM_ID,
             :QUANTIDADE,
             :QUANTIDADE_ITEM_NFS,
             :SALDO_ATUALIZADO
        DO
        BEGIN
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END
 END
 IF(DELETING)THEN
 BEGIN
  IF(OLD.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE,
            t.QUANTIDADE,
            a.quantidade as quantidade_item_nfs,
            (a.QUANTIDADE - t.quantidade) saldo_atualizado
        
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFS           C ON C.CONTROLE          = T.DOCUMENTO_CONTROLE
            LEFT  JOIN TBNFS_ITEM      A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = T.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO       B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO        D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TBUNIDADEMEDIDA E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA
                    
            WHERE T.PDV_DEVOLUCAO_ID = OLD.ID
            AND C.EMPRESA_CODIGO     = OLD.CLIENTE_ID
            AND A.NFS_CONTROLE       = C.CONTROLE
            INTO :NFS_CONTROLE,
                 :ITEM_ID,
                 :QUANTIDADE,
                 :QUANTIDADE_ITEM_NFS,
                 :SALDO_ATUALIZADO
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + :SALDO_ATUALIZADO) WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT A.PDV_CFE_ID,
                A.ID,
                T.QUANTIDADE,
                A.QUANTIDADE as quantidade_item_nfs,
                (t.quantidade) saldo_atualizado
            
                FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
                LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = T.ITEM_SEQUENCIA
                INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
                INNER JOIN TBPDV_CFE            C ON C.ID         = T.DOCUMENTO_CONTROLE
                LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
                LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA
            
                WHERE T.PDV_DEVOLUCAO_ID = OLD.ID
                AND A.PDV_CFE_ID         = C.ID
                AND C.CLIENTE_ID         = OLD.CLIENTE_ID
        INTO :NFS_CONTROLE,
             :ITEM_ID,
             :QUANTIDADE,
             :QUANTIDADE_ITEM_NFS,
             :SALDO_ATUALIZADO
        DO
        BEGIN
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + :SALDO_ATUALIZADO) WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END
 END
end;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B01D FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';
    IF(OLD.ID > 0)THEN
    BEGIN
        HISTORICO = 'REGISTRO EXCLUIDO.';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', OLD.ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B02D FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  IF(OLD.ID > 0)THEN
  BEGIN
     DELETE FROM TBPDV_DEVOLUCAO_TROCA_ITEM WHERE PDV_DEVOLUCAO_ID = OLD.ID;
  END
end;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_IT_B02I FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE INSERT POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';
    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = 'ITEM DOC:'||FN_LPAD(NEW.DOCUMENTO_CONTROLE,7,0)||', SEQ:'||FN_LPAD(NEW.ITEM_SEQUENCIA,3,0)||' INCLUIDO.';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', NEW.PDV_DEVOLUCAO_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_IT_B01D FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';
    IF(OLD.ID > 0)THEN
    BEGIN
        HISTORICO = 'ITEM DOC:'||FN_LPAD(OLD.DOCUMENTO_CONTROLE,7,0)||', SEQ:'||FN_LPAD(OLD.ITEM_SEQUENCIA,3,0)||', VLR.TOTAL:'||OLD.VALOR_TOTAL||' EXCLUIDO.';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', OLD.PDV_DEVOLUCAO_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B01U FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_DOCUMENTO VARCHAR(100);
DECLARE VARIABLE NEW_DOCUMENTO VARCHAR(100);
BEGIN
  HISTORICO = '';
  if(OLD.TIPO_DOCUMENTO = 1 AND NEW.DOCUMENTO_ID <> OLD.DOCUMENTO_ID)then
  begin
    OLD_DOCUMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(A.NUMERO_NOTAFISCAL,7,0) FROM TBNFS A WHERE A.CONTROLE = OLD.DOCUMENTO_ID),'0000000');
  end            
  if(OLD.TIPO_DOCUMENTO = 2 AND NEW.DOCUMENTO_ID <> OLD.DOCUMENTO_ID)then
  begin
    OLD_DOCUMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(A.NUMERO_CFE,7,0) FROM TBPDV_CFE A WHERE A.ID = OLD.DOCUMENTO_ID),'0000000');
  end
  if(new.TIPO_DOCUMENTO = 1 AND NEW.DOCUMENTO_ID <> OLD.DOCUMENTO_ID)then
  begin
    NEW_DOCUMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(A.NUMERO_NOTAFISCAL,7,0) FROM TBNFS A WHERE A.CONTROLE = NEW.DOCUMENTO_ID),'0000000');
  end
  if(new.TIPO_DOCUMENTO = 2 AND NEW.DOCUMENTO_ID <> OLD.DOCUMENTO_ID)then
  begin
    NEW_DOCUMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(A.NUMERO_CFE,7,0) FROM TBPDV_CFE A WHERE A.ID = NEW.DOCUMENTO_ID),'0000000');
  end

  IF(NEW.CLIENTE_ID <> OLD.CLIENTE_ID) THEN
  BEGIN
     HISTORICO = HISTORICO||' CLIENTE:'||OLD.CLIENTE_ID||'->'||NEW.CLIENTE_ID;
  END 

  IF(NEW.TIPO_ED <> OLD.TIPO_ED) THEN
  BEGIN
     HISTORICO = HISTORICO||' TIPO:'||OLD.TIPO_ED||'->'||NEW.TIPO_ED;
  END 

  IF(NEW.TIPO_DOCUMENTO <> OLD.TIPO_DOCUMENTO) THEN
  BEGIN
     HISTORICO = HISTORICO||' ORIGEM:'||OLD.TIPO_DOCUMENTO||'->'||NEW.TIPO_DOCUMENTO;
  END 

  IF(NEW.DOCUMENTO_ID <> OLD.DOCUMENTO_ID) THEN
  BEGIN
     HISTORICO = HISTORICO||' DOC:'||OLD_DOCUMENTO||'->'||NEW_DOCUMENTO;
  END 

  IF(NEW.VALOR_SALDO <> OLD.VALOR_SALDO) THEN
  BEGIN
     HISTORICO = HISTORICO||' VLR.SALDO:'||OLD.VALOR_SALDO||'->'||NEW.VALOR_SALDO;
  END

  IF(HISTORICO <> '') THEN
  BEGIN
     HISTORICO = 'REGISTRO ALTERADO: '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', OLD.ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_B03I FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 2
AS
DECLARE VARIABLE NFS_CONTROLE         INTEGER;
DECLARE VARIABLE NUMERO_CFE           INTEGER;
DECLARE VARIABLE ITEM_ID              INTEGER;
DECLARE VARIABLE QUANTIDADE           NUMERIC(15,8);
DECLARE VARIABLE QUANTIDADE_ITEM_NFS  NUMERIC(15,8);
DECLARE VARIABLE SALDO_ATUALIZADO     NUMERIC(15,8);
begin
 IF(INSERTING OR UPDATING) THEN
 BEGIN
     IF(NEW.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE,
            t.QUANTIDADE,
            a.quantidade as quantidade_item_nfs,
            (a.QUANTIDADE - t.quantidade) saldo_atualizado
        
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFS           C ON C.NUMERO_NOTAFISCAL = T.DOCUMENTO_CONTROLE
            LEFT  JOIN TBNFS_ITEM      A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = T.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO       B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO        D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TBUNIDADEMEDIDA E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA
                    
            WHERE T.PDV_DEVOLUCAO_ID = NEW.ID
            AND C.EMPRESA_CODIGO     = NEW.CLIENTE_ID
            AND A.NFS_CONTROLE       = C.CONTROLE
            INTO :NFS_CONTROLE,
                 :ITEM_ID,
                 :QUANTIDADE,
                 :QUANTIDADE_ITEM_NFS,
                 :SALDO_ATUALIZADO
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT A.PDV_CFE_ID,
                A.ID,
                T.QUANTIDADE,
                A.QUANTIDADE  as quantidade_item_nfs,
                (a.QUANTIDADE - t.quantidade) saldo_atualizado
            
                FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
                LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = T.ITEM_SEQUENCIA
                INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
                INNER JOIN TBPDV_CFE            C ON C.NUMERO_CFE = T.DOCUMENTO_CONTROLE
                LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
                LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA
            
                WHERE T.PDV_DEVOLUCAO_ID = NEW.ID
                AND A.PDV_CFE_ID         = C.ID
                AND C.CLIENTE_ID         = NEW.CLIENTE_ID
        INTO :NFS_CONTROLE,
             :ITEM_ID,
             :QUANTIDADE,
             :QUANTIDADE_ITEM_NFS,
             :SALDO_ATUALIZADO
        DO
        BEGIN
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END
 END
 IF(DELETING)THEN
 BEGIN
  IF(OLD.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE,
            t.QUANTIDADE,
            a.quantidade as quantidade_item_nfs,
            (a.QUANTIDADE - t.quantidade) saldo_atualizado
        
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFS           C ON C.NUMERO_NOTAFISCAL = T.DOCUMENTO_CONTROLE
            LEFT  JOIN TBNFS_ITEM      A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = T.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO       B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO        D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TBUNIDADEMEDIDA E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA
                    
            WHERE T.PDV_DEVOLUCAO_ID = OLD.ID
            AND C.EMPRESA_CODIGO     = OLD.CLIENTE_ID
            AND A.NFS_CONTROLE       = C.CONTROLE
            INTO :NFS_CONTROLE,
                 :ITEM_ID,
                 :QUANTIDADE,
                 :QUANTIDADE_ITEM_NFS,
                 :SALDO_ATUALIZADO
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + :SALDO_ATUALIZADO) WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT A.PDV_CFE_ID,
                A.ID,
                T.QUANTIDADE,
                A.QUANTIDADE as quantidade_item_nfs,
                (t.quantidade) saldo_atualizado
            
                FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
                LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = T.ITEM_SEQUENCIA
                INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
                INNER JOIN TBPDV_CFE            C ON C.NUMERO_CFE = T.DOCUMENTO_CONTROLE
                LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
                LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA
            
                WHERE T.PDV_DEVOLUCAO_ID = OLD.ID
                AND A.PDV_CFE_ID         = C.ID
                AND C.CLIENTE_ID         = OLD.CLIENTE_ID
        INTO :NFS_CONTROLE,
             :ITEM_ID,
             :QUANTIDADE,
             :QUANTIDADE_ITEM_NFS,
             :SALDO_ATUALIZADO
        DO
        BEGIN
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + :SALDO_ATUALIZADO) WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END
 END
end;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_IT_B02D FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE DELETE POSITION 1
AS
declare variable NFS_CONTROLE INTEGER;
declare variable ITEM_ID INTEGER;
begin
   IF(OLD.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE
        
            FROM TBNFS C
            LEFT  JOIN TBNFS_ITEM           A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = OLD.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO            B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO             D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA
                    
            WHERE C.CONTROLE = OLD.DOCUMENTO_CONTROLE
            AND C.EMPRESA_CODIGO = OLD.CLIENTE_ID
            INTO :NFS_CONTROLE,
                 :ITEM_ID
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + OLD.QUANTIDADE) WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT
             A.PDV_CFE_ID,
             A.ID
    
             FROM TBPDV_CFE C
             LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = OLD.ITEM_SEQUENCIA AND A.PDV_CFE_ID = C.ID
             INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
             LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
             LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA
    
             WHERE C.ID = OLD.DOCUMENTO_CONTROLE
             INTO :NFS_CONTROLE,
                 :ITEM_ID
             DO
             BEGIN
                UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + OLD.QUANTIDADE) WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
             END
     END
end;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_IT_B02D FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE DELETE POSITION 1
AS
declare variable NFS_CONTROLE INTEGER;
declare variable ITEM_ID INTEGER;
begin
   IF(OLD.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE
        
            FROM TBNFS C
            LEFT  JOIN TBNFS_ITEM           A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = OLD.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO            B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO             D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA
                    
            WHERE C.NUMERO_NOTAFISCAL = OLD.DOCUMENTO_CONTROLE
            AND C.EMPRESA_CODIGO = OLD.CLIENTE_ID
            INTO :NFS_CONTROLE,
                 :ITEM_ID
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + OLD.QUANTIDADE) WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT
             A.PDV_CFE_ID,
             A.ID
    
             FROM TBPDV_CFE C
             LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = OLD.ITEM_SEQUENCIA AND A.PDV_CFE_ID = C.ID
             INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
             LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
             LEFT  JOIN TBUNIDADEMEDIDA      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA
    
             WHERE C.NUMERO_CFE = OLD.DOCUMENTO_CONTROLE
             INTO :NFS_CONTROLE,
                 :ITEM_ID
             DO
             BEGIN
                UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + OLD.QUANTIDADE) WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
             END
     END
end;

CREATE OR ALTER TRIGGER TTBPDV_DEVOLUCAO_TROCA_IT_B01D FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';
    IF(OLD.ID > 0)THEN
    BEGIN
        HISTORICO = 'ITEM DOC:'||FN_LPAD(OLD.DOCUMENTO_CONTROLE,7,0)||', SEQ:'||FN_LPAD(OLD.ITEM_SEQUENCIA,3,0)||', VLR.TOTAL:'||OLD.VALOR_TOTAL||' EXCLUIDO.';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_DEVOLUCAO_TROCA', OLD.PDV_DEVOLUCAO_ID, HISTORICO);
    END
END;