CREATE OR REPLACE TRIGGER FCT_ATUALIZA_SITUACAO_PARCELA
AFTER UPDATE ON "NOTAFISCAL"
FOR EACH ROW

BEGIN
    
    /* Quando a NF for transmitida, é alterada a situação da parcela para 3 - Faturado */

    IF (:NEW.NRNOTAFISC IS NOT NULL) THEN
        FOR C_APURACAO IN (SELECT FCT_RELACAPURACAOFATURA.NRFATURACONT
                             FROM FCT_APURACAO
                             JOIN FCT_RELACAPURACAOFATURA
                               ON FCT_RELACAPURACAOFATURA.NRAPURACAO =  FCT_APURACAO.NRAPURACAO
                              AND FCT_RELACAPURACAOFATURA.NRORG =  FCT_APURACAO.NRORG
                            WHERE FCT_APURACAO.CDFILIAL = :OLD.CDFILIAL
                             AND FCT_APURACAO.NRLANCTONF = :OLD.NRLANCTONF
                             AND FCT_APURACAO.NRORG = :OLD.NRORG) LOOP
            UPDATE FCT_FATURACONT
               SET IDSITUACAO = 3,
                   DTULTATU = SYSDATE,
                   NRORGULTATU = :OLD.NRORG
             WHERE NRFATURACONT =  C_APURACAO.NRFATURACONT
               AND IDSITUACAO = 2
               AND NRORG = :OLD.NRORG;
        END LOOP;
    END IF;
    
    /* Quando a transmissão da NF for cancelada, é alterada a situação da parcela para 2 - Apurado.*/

    IF ((:OLD.IDSTATUS = 'A') AND (:NEW.IDSTATUS = 'P')) THEN

        FOR C_APURACAO IN (SELECT FCT_RELACAPURACAOFATURA.NRFATURACONT, FCT_APURACAO.NRAPURACAO, FCT_APURACAO.DSALTERACAO
                             FROM FCT_APURACAO
                             JOIN FCT_RELACAPURACAOFATURA
                               ON FCT_RELACAPURACAOFATURA.NRAPURACAO =  FCT_APURACAO.NRAPURACAO
                              AND FCT_RELACAPURACAOFATURA.NRORG =  FCT_APURACAO.NRORG
                            WHERE FCT_APURACAO.CDFILIAL = :OLD.CDFILIAL
                             AND FCT_APURACAO.NRLANCTONF = :OLD.NRLANCTONF
                             AND FCT_APURACAO.NRORG = :OLD.NRORG) LOOP

            UPDATE FCT_FATURACONT
               SET IDSITUACAO = 2,
                   DTULTATU = SYSDATE,
                   NRORGULTATU = :OLD.NRORG
             WHERE NRFATURACONT =  C_APURACAO.NRFATURACONT
               AND IDSITUACAO = 3
               AND NRORG = :OLD.NRORG;

        END LOOP;

    END IF;

END;
/

-- VERSAO --
BEGIN ATUVEROBJ('FCT_ATUALIZA_SITUACAO_PARCELA','0.00.000'); END;
/