SET TERM ^ ;

ALTER TABLE TBPDV_DEVOLUCAO_TROCA
ADD ROMANEIO_DEVOLUCAO INTEGER
DEFAULT 0^

CREATE INDEX ITBPDV_DEVOLUCAO_TROCA_08I
ON TBPDV_DEVOLUCAO_TROCA (ROMANEIO_DEVOLUCAO)^

CREATE OR ALTER TRIGGER TTBNFE_B04I FOR TBNFE
ACTIVE BEFORE INSERT POSITION 4
AS
DECLARE VARIABLE NUMERO_NOTAFISCAL INTEGER;
DECLARE VARIABLE DESC_DOC VARCHAR(200);
BEGIN
    IF(COALESCE(NEW.PDV_DEVOLUCAO_ID, 0) > 0) THEN
    BEGIN
        FOR SELECT FIRST 1
            T.NUMERO_NOTAFISCAL,
            FN_LPAD(T.NUMERO_NOTAFISCAL, 9, '0')||'/'||T.SERIE AS DESC_DOC
        FROM TBNFE T
        WHERE
            T.PDV_DEVOLUCAO_ID  = NEW.PDV_DEVOLUCAO_ID
        AND T.CONTROLE          <> NEW.CONTROLE
        AND T.NATUREZA          <> NEW.NATUREZA
        INTO :NUMERO_NOTAFISCAL, :DESC_DOC
        DO BEGIN
            IF(:NUMERO_NOTAFISCAL > 0) THEN
            BEGIN
                EXCEPTION "..."'DEVOLUCAO JA VINCULADA NO DOCUMENTO FISCAL DE ENTRADA '||:DESC_DOC||'. OPERACAO CANCELADA.';
            END
        END
    END
END^

CREATE OR ALTER TRIGGER TTBNFE_B5D_01 FOR TBNFE
ACTIVE BEFORE DELETE POSITION 5
AS
DECLARE VARIABLE CONTADOR INTEGER;
DECLARE VARIABLE CONTADOR_DEVOLUCAO INTEGER;
BEGIN

    CONTADOR_DEVOLUCAO = COALESCE((SELECT FIRST 1 B.ID FROM TBPDV_DEVOLUCAO_TROCA B WHERE B.NFE_DEVOLUCAO = OLD.CONTROLE),0);

    IF(:CONTADOR_DEVOLUCAO > 0)THEN
    BEGIN
      /*ATUALIZAR DEVOLUCOES VINCULADAS AO DOCUMENTO*/
      UPDATE TBPDV_DEVOLUCAO_TROCA B SET B.NFE_DEVOLUCAO = 0 WHERE B.ID = :CONTADOR_DEVOLUCAO;
    END

    CONTADOR_DEVOLUCAO = COALESCE((SELECT FIRST 1 B.ID FROM TBPDV_DEVOLUCAO_TROCA B WHERE B.ROMANEIO_DEVOLUCAO = OLD.CONTROLE),0);

    IF(:CONTADOR_DEVOLUCAO > 0)THEN
    BEGIN
      /*ATUALIZAR DEVOLUCOES VINCULADAS AO DOCUMENTO*/
      UPDATE TBPDV_DEVOLUCAO_TROCA B SET B.ROMANEIO_DEVOLUCAO = 0 WHERE B.ID = :CONTADOR_DEVOLUCAO;
    END

    FOR
    
    SELECT FIRST 1 A.NFE_ID
      FROM TBNF_DEVOLUCAO A
     WHERE A.ESTABELECIMENTO_ID = OLD.ESTABELECIMENTO_CODIGO
       AND A.NFE_ID = OLD.CONTROLE
       AND A.NFS_ID = 0
       AND (COALESCE(A.LANCAMENTO_ID,0) > 0 OR COALESCE(A.PARCELAMENTO_ID,0) > 0)
    
    INTO :CONTADOR
    DO
    BEGIN
    
     IF (CONTADOR > 0) THEN
        BEGIN
        EXCEPTION "..." 'ATENCAO, JA EXISTEM ABATIMENTOS EM PARCELAS VINCULADAS A ESSA DEVOLUCAO, EXCLUSAO CANCELADA!  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
        END
    
    END


    /*ECLUIR DEVOLUCOES MANUAIS OU AUTOMATICAS DA NOTA*/
    DELETE FROM TBNF_DEVOLUCAO A
      WHERE A.ESTABELECIMENTO_ID = OLD.ESTABELECIMENTO_CODIGO
      AND A.NFE_ID = OLD.CONTROLE
      AND A.NFS_ID = 0
      AND (COALESCE(A.LANCAMENTO_ID,0) = 0 OR COALESCE(A.PARCELAMENTO_ID,0) = 0);
END^

SET TERM ; ^