SET TERM ^ ;

CREATE OR ALTER TRIGGER TBPDV_DEVOLUCAO_TROCA_B03D FOR TBPDV_DEVOLUCAO_TROCA
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE DOCUMENTO INTEGER;
DECLARE VARIABLE NUMERO_NOTAFISCAL INTEGER;
DECLARE VARIABLE SERIE VARCHAR(3);
DECLARE VARIABLE DATA_ENTRADA DATE;
DECLARE VARIABLE NATUREZA VARCHAR(20);
BEGIN
  IF(OLD.TIPO_ED <> 3)THEN
  BEGIN
     IF(OLD.NFE_DEVOLUCAO > 0) THEN
     BEGIN
         FOR SELECT FIRST 1
              X.CONTROLE,
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_ENTRADA,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFE X
             WHERE X.PDV_DEVOLUCAO_ID = OLD.ID
               AND X.SITUACAO        <> 3
               AND X.CONTROLE        <> COALESCE(OLD.ROMANEIO_DEVOLUCAO, 0)
               AND X.CONTROLE         = OLD.NFE_DEVOLUCAO
               INTO :DOCUMENTO, :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
               BEGIN
                  EXCEPTION "..." '<H4>ATENCAO</H4> '||IIF(OLD.TIPO_ED = 3,'TRANSFERENCIA: ',IIF(OLD.TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.ID,5,0)
                  ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.ENTRADA:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
               END
      END

     IF(OLD.ROMANEIO_DEVOLUCAO > 0) THEN
     BEGIN
         FOR SELECT FIRST 1
              X.CONTROLE,
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_ENTRADA,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFE X
             WHERE X.PDV_DEVOLUCAO_ID = OLD.ID
               AND X.SITUACAO        <> 3
               AND X.CONTROLE        <> COALESCE(OLD.NFE_DEVOLUCAO, 0)
               AND X.CONTROLE         = OLD.ROMANEIO_DEVOLUCAO
               INTO :DOCUMENTO, :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
               BEGIN
                  EXCEPTION "..." '<H4>ATENCAO</H4> '||IIF(OLD.TIPO_ED = 3,'TRANSFERENCIA: ',IIF(OLD.TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.ID,5,0)
                  ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.ENTRADA:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
               END
      END
  END

  IF(OLD.TIPO_ED  = 3)THEN
  BEGIN
     IF(OLD.NFE_DEVOLUCAO > 0) THEN
     BEGIN
         FOR SELECT FIRST 1
              X.CONTROLE,
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_EMISSAO AS DATA_ENTRADA,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFS X
             WHERE X.PDV_DEVOLUCAO_ID = OLD.ID
               AND X.SITUACAO        <> 3
               AND X.CONTROLE        <> COALESCE(OLD.ROMANEIO_DEVOLUCAO, 0)
               AND X.CONTROLE         = OLD.NFE_DEVOLUCAO
               INTO :DOCUMENTO, :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
               BEGIN
                  EXCEPTION "..." '<H4>ATENCAO</H4> '||IIF(OLD.TIPO_ED = 3,'TRANSFERENCIA: ',IIF(OLD.TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.ID,5,0)
                  ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.EMISSAO:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
               END
      END
      
     IF(OLD.ROMANEIO_DEVOLUCAO > 0) THEN
     BEGIN
         FOR SELECT FIRST 1
              X.CONTROLE,
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_EMISSAO AS DATA_ENTRADA,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFS X
             WHERE X.PDV_DEVOLUCAO_ID = OLD.ID
               AND X.SITUACAO        <> 3
               AND X.CONTROLE        <> COALESCE(OLD.NFE_DEVOLUCAO, 0)
               AND X.CONTROLE         = OLD.ROMANEIO_DEVOLUCAO
               INTO :DOCUMENTO, :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
               BEGIN
                  EXCEPTION "..." '<H4>ATENCAO</H4> '||IIF(OLD.TIPO_ED = 3,'TRANSFERENCIA: ',IIF(OLD.TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.ID,5,0)
                  ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.EMISSAO:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
               END
      END
  END
END^

CREATE OR ALTER TRIGGER TBPDV_DEVOLUCAO_TROCA_ITEM_B03D FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE TIPO_ED INTEGER;
DECLARE VARIABLE NUMERO_NOTAFISCAL INTEGER;
DECLARE VARIABLE SERIE VARCHAR(3);
DECLARE VARIABLE NATUREZA VARCHAR(20);
DECLARE VARIABLE DATA_ENTRADA DATE;
BEGIN
   :TIPO_ED = COALESCE((SELECT FIRST 1 A.TIPO_ED FROM TBPDV_DEVOLUCAO_TROCA A WHERE A.ID = OLD.PDV_DEVOLUCAO_ID),0);
   IF(:TIPO_ED <> 3)THEN
   BEGIN
     
      FOR SELECT FIRST 1
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_ENTRADA,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFE X, TBNFE_ITEM XI, TBPDV_DEVOLUCAO_TROCA A, TBPDV_DEVOLUCAO_TROCA_ITEM B
             WHERE X.PDV_DEVOLUCAO_ID   = A.ID
               AND B.PDV_DEVOLUCAO_ID   = X.PDV_DEVOLUCAO_ID
               AND B.PDV_DEVOLUCAO_ID   = A.ID       
               AND B.ID                 = OLD.ID
               AND A.ID                 = OLD.PDV_DEVOLUCAO_ID
               AND ((XI.NFS_ITEM_CONTROLE = B.ITEM_ID AND XI.NFS = COALESCE((SELECT FIRST 1 NFS.NUMERO_NOTAFISCAL FROM TBNFS NFS WHERE NFS.CONTROLE = B.DOCUMENTO_CONTROLE),0) AND XI.NFS_ITEM_CONTROLE > 0 AND B.TIPO_DOCUMENTO <> '2')
                 OR (XI.PDV_CFE_ITEM_ID   = B.ITEM_ID AND XI.PDV_CFE_ID = B.DOCUMENTO_CONTROLE AND XI.PDV_CFE_ITEM_ID > 0 AND B.TIPO_DOCUMENTO <> '1') )
               AND X.CONTROLE           = XI.NFE_CONTROLE
               AND X.SITUACAO          <> 3
               AND ((X.CONTROLE <> COALESCE(A.ROMANEIO_DEVOLUCAO, 0) AND X.CONTROLE = A.NFE_DEVOLUCAO AND A.NFE_DEVOLUCAO      > 0)
                 OR (X.CONTROLE <> COALESCE(A.NFE_DEVOLUCAO, 0) AND X.CONTROLE = A.ROMANEIO_DEVOLUCAO AND A.ROMANEIO_DEVOLUCAO > 0))
           INTO :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
           BEGIN
                EXCEPTION "..." '<H4>ATENCAO</H4> ITEM: '||FN_LPAD(OLD.ID,5,0)||' DA '||IIF(:TIPO_ED = 3,'TRANSFERENCIA: ',IIF(:TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.PDV_DEVOLUCAO_ID,5,0)
                            ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.ENTRADA:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
           END


   END

   IF(:TIPO_ED  = 3)THEN
   BEGIN
   
      FOR SELECT FIRST 1
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_EMISSAO,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFS X, TBNFS_ITEM XI, TBPDV_DEVOLUCAO_TROCA A, TBPDV_DEVOLUCAO_TROCA_ITEM B
             WHERE X.PDV_DEVOLUCAO_ID   = A.ID
               AND B.PDV_DEVOLUCAO_ID   = X.PDV_DEVOLUCAO_ID
               AND B.PDV_DEVOLUCAO_ID   = A.ID
               AND A.ID                 = OLD.PDV_DEVOLUCAO_ID
               AND B.ID                 = OLD.ID
               AND ((XI.NFE_ITEM_CONTROLE = B.ITEM_ID AND XI.NFE = COALESCE((SELECT FIRST 1 NFE.NUMERO_NOTAFISCAL FROM TBNFE NFE WHERE NFE.CONTROLE = B.DOCUMENTO_CONTROLE),0) AND XI.NFE_ITEM_CONTROLE > 0))
               AND X.CONTROLE           = XI.NFS_CONTROLE
               AND X.SITUACAO          <> 3
               AND ((X.CONTROLE <> COALESCE(A.ROMANEIO_DEVOLUCAO, 0) AND X.CONTROLE = A.NFE_DEVOLUCAO AND A.NFE_DEVOLUCAO      > 0)
                 OR (X.CONTROLE <> COALESCE(A.NFE_DEVOLUCAO, 0) AND X.CONTROLE = A.ROMANEIO_DEVOLUCAO AND A.ROMANEIO_DEVOLUCAO > 0))
           INTO :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
           BEGIN
                EXCEPTION "..." '<H4>ATENCAO</H4> ITEM: '||FN_LPAD(OLD.ID,5,0)||' DA '||IIF(:TIPO_ED = 3,'TRANSFERENCIA: ',IIF(:TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.PDV_DEVOLUCAO_ID,5,0)
                            ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.ENTRADA:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
           END

   END

END^

CREATE OR ALTER TRIGGER TBPDV_DEVOLUCAO_TROCA_ITEM_BU0 FOR TBPDV_DEVOLUCAO_TROCA_ITEM
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE SALDO_ATUALIZADO NUMERIC(15,2);
DECLARE VARIABLE SALDO NUMERIC(15,2);
DECLARE VARIABLE ITEM_ID INTEGER;
DECLARE VARIABLE TIPO_ED INTEGER;
DECLARE VARIABLE NUMERO_NOTAFISCAL INTEGER;
DECLARE VARIABLE SERIE VARCHAR(3);
DECLARE VARIABLE NATUREZA VARCHAR(20);
DECLARE VARIABLE DATA_ENTRADA DATE;
DECLARE VARIABLE BLOQUEAR_ALTERACAO INTEGER;
BEGIN
   :BLOQUEAR_ALTERACAO = 0;
   IF(NEW.QUANTIDADE IS DISTINCT FROM OLD.QUANTIDADE
   OR NEW.VALOR_UNITARIO IS DISTINCT FROM OLD.VALOR_UNITARIO
   OR NEW.VALOR_LIQUIDO IS DISTINCT FROM OLD.VALOR_LIQUIDO
   OR NEW.VALOR_TOTAL IS DISTINCT FROM OLD.VALOR_TOTAL
   OR NEW.ITEM_ID IS DISTINCT FROM OLD.ITEM_ID
   OR NEW.DOCUMENTO_CONTROLE IS DISTINCT FROM OLD.DOCUMENTO_CONTROLE)THEN
   BEGIN
      :BLOQUEAR_ALTERACAO = 1;
   END
   :TIPO_ED = COALESCE((SELECT FIRST 1 A.TIPO_ED FROM TBPDV_DEVOLUCAO_TROCA A WHERE A.ID = OLD.PDV_DEVOLUCAO_ID),0);
   IF(:TIPO_ED <> 3 AND :BLOQUEAR_ALTERACAO = 1)THEN
   BEGIN
     
      FOR SELECT FIRST 1
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_ENTRADA,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFE X, TBNFE_ITEM XI, TBPDV_DEVOLUCAO_TROCA A, TBPDV_DEVOLUCAO_TROCA_ITEM B
             WHERE X.PDV_DEVOLUCAO_ID   = A.ID
               AND B.PDV_DEVOLUCAO_ID   = X.PDV_DEVOLUCAO_ID
               AND B.PDV_DEVOLUCAO_ID   = A.ID       
               AND B.ID                 = OLD.ID
               AND A.ID                 = OLD.PDV_DEVOLUCAO_ID
               AND ((XI.NFS_ITEM_CONTROLE = B.ITEM_ID AND XI.NFS = COALESCE((SELECT FIRST 1 NFS.NUMERO_NOTAFISCAL FROM TBNFS NFS WHERE NFS.CONTROLE = B.DOCUMENTO_CONTROLE),0) AND XI.NFS_ITEM_CONTROLE > 0 AND B.TIPO_DOCUMENTO <> '2')
                 OR (XI.PDV_CFE_ITEM_ID   = B.ITEM_ID AND XI.PDV_CFE_ID = B.DOCUMENTO_CONTROLE AND XI.PDV_CFE_ITEM_ID > 0 AND B.TIPO_DOCUMENTO <> '1') )
               AND X.CONTROLE           = XI.NFE_CONTROLE
               AND X.SITUACAO          <> 3
               AND ((X.CONTROLE <> COALESCE(A.ROMANEIO_DEVOLUCAO, 0) AND X.CONTROLE = A.NFE_DEVOLUCAO AND A.NFE_DEVOLUCAO      > 0)
                 OR (X.CONTROLE <> COALESCE(A.NFE_DEVOLUCAO, 0) AND X.CONTROLE = A.ROMANEIO_DEVOLUCAO AND A.ROMANEIO_DEVOLUCAO > 0))
           INTO :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
           BEGIN
                EXCEPTION "..." '<H4>ATENCAO</H4> ITEM: '||FN_LPAD(OLD.ID,5,0)||' DA '||IIF(:TIPO_ED = 3,'TRANSFERENCIA: ',IIF(:TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.PDV_DEVOLUCAO_ID,5,0)
                            ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.ENTRADA:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
           END


   END

   IF(:TIPO_ED  = 3 AND :BLOQUEAR_ALTERACAO = 1)THEN
   BEGIN
   
      FOR SELECT FIRST 1
              X.NUMERO_NOTAFISCAL,
              X.SERIE,
              X.DATA_EMISSAO,
              IIF(X.NATUREZA = 1,'A NOTA FISCAL:','AO ROMANEIO:') AS NATUREZA
    
             FROM TBNFS X, TBNFS_ITEM XI, TBPDV_DEVOLUCAO_TROCA A, TBPDV_DEVOLUCAO_TROCA_ITEM B
             WHERE X.PDV_DEVOLUCAO_ID   = A.ID
               AND B.PDV_DEVOLUCAO_ID   = X.PDV_DEVOLUCAO_ID
               AND B.PDV_DEVOLUCAO_ID   = A.ID
               AND A.ID                 = OLD.PDV_DEVOLUCAO_ID
               AND B.ID                 = OLD.ID
               AND ((XI.NFE_ITEM_CONTROLE = B.ITEM_ID AND XI.NFE = COALESCE((SELECT FIRST 1 NFE.NUMERO_NOTAFISCAL FROM TBNFE NFE WHERE NFE.CONTROLE = B.DOCUMENTO_CONTROLE),0) AND XI.NFE_ITEM_CONTROLE > 0))
               AND X.CONTROLE           = XI.NFS_CONTROLE
               AND X.SITUACAO          <> 3
               AND ((X.CONTROLE <> COALESCE(A.ROMANEIO_DEVOLUCAO, 0) AND X.CONTROLE = A.NFE_DEVOLUCAO AND A.NFE_DEVOLUCAO      > 0)
                 OR (X.CONTROLE <> COALESCE(A.NFE_DEVOLUCAO, 0) AND X.CONTROLE = A.ROMANEIO_DEVOLUCAO AND A.ROMANEIO_DEVOLUCAO > 0))
           INTO :NUMERO_NOTAFISCAL, :SERIE, :DATA_ENTRADA, :NATUREZA DO
           BEGIN
                EXCEPTION "..." '<H4>ATENCAO</H4> ITEM: '||FN_LPAD(OLD.ID,5,0)||' DA '||IIF(:TIPO_ED = 3,'TRANSFERENCIA: ',IIF(:TIPO_ED = 1,'DEVOLUCAO: ','TROCA: '))||FN_LPAD(OLD.PDV_DEVOLUCAO_ID,5,0)
                            ||' VINCULADA '||:NATUREZA||FN_LPAD(:NUMERO_NOTAFISCAL,7,0)||'/'||:SERIE||', DT.ENTRADA:'||FN_DATE(:DATA_ENTRADA,'DD/MM/YYYY')||'. <BR> EXCLUSAO CANCELADA.';
           END

   END

     IF(NEW.TIPO_DOCUMENTO = 1 AND OLD.QUANTIDADE IS DISTINCT FROM NEW.QUANTIDADE)THEN
     BEGIN
            FOR
                SELECT FIRST 1
                    Z.CONTROLE,
                    A.QUANTIDADE
                FROM TBNFS_ITEM Z, TBNFS_ITEM_SALDO A
                WHERE Z.NFS_CONTROLE = NEW.DOCUMENTO_CONTROLE
                AND Z.SEQUENCIA = NEW.ITEM_SEQUENCIA
                AND A.NFS_CONTROLE = Z.NFS_CONTROLE
                AND A.NFS_ITEM_CONTROLE = Z.CONTROLE

            INTO :ITEM_ID, :SALDO
            DO
            BEGIN

               SALDO_ATUALIZADO = COALESCE(NEW.QUANTIDADE,0) - COALESCE(OLD.QUANTIDADE,0);
               SALDO_ATUALIZADO = COALESCE(SALDO,0) - SALDO_ATUALIZADO;

               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.NFS_CONTROLE = NEW.DOCUMENTO_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     IF(NEW.TIPO_DOCUMENTO = 2 AND OLD.QUANTIDADE IS DISTINCT FROM NEW.QUANTIDADE)THEN
     BEGIN
        FOR SELECT FIRST 1
                A.ID,
                X.QUANTIDADE
            
                FROM TBPDV_CFE_ITEM A, TBPDV_CFE_ITEM_SALDO X

                WHERE A.PDV_CFE_ID    = NEW.DOCUMENTO_CONTROLE
                AND A.SEQUENCIA       = NEW.ITEM_SEQUENCIA
                AND X.PDV_CFE_ITEM_ID = A.ID
        INTO :ITEM_ID, :SALDO
        DO
        BEGIN
             SALDO_ATUALIZADO = COALESCE(NEW.QUANTIDADE,0) - COALESCE(OLD.QUANTIDADE,0);
             SALDO_ATUALIZADO = COALESCE(SALDO,0) - SALDO_ATUALIZADO;
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.PDV_CFE_ID = NEW.DOCUMENTO_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END

END^

SET TERM ; ^