SET TERM ^ ;
CREATE OR ALTER trigger tbnfe_b10u for tbnfe
active before update position 10
AS
begin
  IF(NEW.SITUACAO <> OLD.SITUACAO) THEN
  BEGIN
     /*SE HOUVER CANCELAMENTO DA NOTA FISCAL A NOTA FISCAL DEVE SER DESVINCULADA DAS DEVOLUCOES/TROCAS*/
     IF(COALESCE(NEW.situacao, 0) = 3 AND COALESCE(NEW.pdv_devolucao_id,0) > 0)THEN
     BEGIN
       IF(OLD.natureza = 1)THEN
       BEGIN
          UPDATE tbpdv_devolucao_troca A SET A.NFE_DEVOLUCAO = 0 WHERE A.ID = NEW.PDV_DEVOLUCAO_ID;
       END
       IF(OLD.natureza = 2)THEN
       BEGIN
          UPDATE tbpdv_devolucao_troca A SET A.ROMANEIO_DEVOLUCAO = 0 WHERE A.ID = NEW.PDV_DEVOLUCAO_ID;
       END
       NEW.pdv_devolucao_id = 0;
     END
  END
end^

CREATE OR ALTER TRIGGER TTBNFS_B18U FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 0
AS

DECLARE VARIABLE LIMITE NUMERIC(10,2);
DECLARE VARIABLE SALDO NUMERIC(10,2);
DECLARE VARIABLE BLOQUEIA_NF CHAR(1);
DECLARE VARIABLE QTD_PARCELAS INTEGER;

BEGIN
    IF(NEW.GC_WEB = 1) THEN
    BEGIN
        IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2) THEN
        BEGIN
            SELECT COUNT(T.CONTROLE) FROM TBNFS_PARCELAMENTO T WHERE T.NFS_CONTROLE = NEW.CONTROLE INTO :QTD_PARCELAS;

            IF(QTD_PARCELAS > 0) THEN
            BEGIN
                SELECT TRIM(A.BLOQUEIA_NOTAFISCAL) FROM TBCLIENTE A WHERE A.CODIGO = NEW.EMPRESA_CODIGO INTO :BLOQUEIA_NF;

                IF(BLOQUEIA_NF = '1') THEN
                BEGIN
                   EXCEPTION "..." 'CLIENTE BLOQUEADO PARA EMISSAO DE NOVAS NOTAS FISCAIS. OPERACAO CANCELADA!';
                END ELSE
    
                    SELECT * FROM SPC_NFS_PARCELAMENTO_SALDO11(NEW.EMPRESA_CODIGO, NEW.CONTROLE) INTO :LIMITE, :SALDO;
                    IF(:LIMITE > 0) THEN
                    BEGIN
                        IF(:SALDO > :LIMITE) THEN
                        BEGIN
                            EXCEPTION "..." 'CLIENTE COM LIMITE DE CREDITO EXCEDIDO. OPERACAO CANCELADA! LIMITE: R$ '||:LIMITE||' SALDO R$ '||:SALDO;
                        END
                    END
            END

            IF(NEW.PDV_DEVOLUCAO_ID > 0)THEN
            BEGIN
               EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(NEW.PDV_DEVOLUCAO_ID,COALESCE((SELECT FIRST 1 B.VALOR_TOTAL_NF FROM TBNFS_TOTAIS B WHERE B.NFS_CONTROLE = NEW.CONTROLE),0),2);
            END
        END

        IF(OLD.SITUACAO = 2 AND NEW.SITUACAO <> 2) THEN
        BEGIN
         IF(NEW.PDV_DEVOLUCAO_ID > 0)THEN
            BEGIN
               EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(NEW.PDV_DEVOLUCAO_ID,COALESCE((SELECT FIRST 1 B.VALOR_TOTAL_NF FROM TBNFS_TOTAIS B WHERE B.NFS_CONTROLE = NEW.CONTROLE),0),1);
               
               IF(NEW.SITUACAO = 3)THEN
               BEGIN
                  IF(NEW.NATUREZA = 1)THEN
                  BEGIN
                    UPDATE TBPDV_DEVOLUCAO_TROCA A SET A.NFE_DEVOLUCAO = 0 WHERE A.ID = NEW.PDV_DEVOLUCAO_ID;
                  END                
                  IF(NEW.NATUREZA = 2)THEN
                  BEGIN
                    UPDATE TBPDV_DEVOLUCAO_TROCA A SET A.ROMANEIO_DEVOLUCAO = 0 WHERE A.ID = NEW.PDV_DEVOLUCAO_ID;
                  END
                  NEW.PDV_DEVOLUCAO_ID = 0;
               END
            END
        END

    END
END^

CREATE OR ALTER TRIGGER TTBNFS_B10D FOR TBNFS
ACTIVE BEFORE DELETE POSITION 5
AS
BEGIN
   IF (OLD.GC_WEB = 1) THEN
       BEGIN
          IF(OLD.PDV_DEVOLUCAO_ID > 0)THEN
          BEGIN
              --EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(OLD.PDV_DEVOLUCAO_ID,COALESCE((SELECT FIRST 1 B.VALOR_TOTAL_NF FROM TBNFS_TOTAIS B WHERE B.NFS_CONTROLE = OLD.CONTROLE),0),1);
              IF(OLD.NATUREZA = 1)THEN
              BEGIN
                UPDATE TBPDV_DEVOLUCAO_TROCA A SET A.NFE_DEVOLUCAO = 0 WHERE ID = OLD.PDV_DEVOLUCAO_ID;
              END

              IF(OLD.NATUREZA = 2)THEN
              BEGIN
                UPDATE TBPDV_DEVOLUCAO_TROCA A SET A.ROMANEIO_DEVOLUCAO = 0 WHERE ID = OLD.PDV_DEVOLUCAO_ID;
              END
          END

          EXECUTE PROCEDURE SPD_NF(OLD.CONTROLE, 'NFS', OLD.ESTABELECIMENTO_CODIGO);
          /*APAGAR AGRUPAMENTOS DE FORMAS DE PAGAMENTO*/

          DELETE FROM TBNFS_FORMA_PAGAMENTO WHERE DOCUMENTO_ID = OLD.CONTROLE AND DOCUMENTO_TIPO = 'NFS';
       END 
END^

^ SET TERM ; ^