CREATE OR ALTER TRIGGER TTBNFE_B02D FOR TBNFE
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE CONTROLE INTEGER;
BEGIN

  CONTROLE = COALESCE((SELECT FIRST 1 A.CONTROLE
                FROM TBNFE_PARCELAMENTO A
                WHERE A.VALOR <> A.VALOR_SALDO
                AND A.NFE_CONTROLE = OLD.CONTROLE),0);
  IF(:CONTROLE > 0)THEN
  BEGIN
     EXCEPTION "..."' HÁ PARCELAS COM LANÇAMENTOS VINCULADOS NESTE DOCUMENTO, OPERAÇÃO CANCELADA.';
  END
END;

CREATE OR ALTER TRIGGER TTBNFE_PARCELAMENTO_B02D FOR TBNFE_PARCELAMENTO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE VREGISTROS INTEGER;
BEGIN
  VREGISTROS = (SELECT COUNT(CONTROLE)
                 FROM TBCAIXABANCO_LANCAMENTO_REG
                WHERE NFE_CONTROLE = OLD.NFE_CONTROLE
                  AND NFE_PARCELAMENTO_CONTROLE = OLD.CONTROLE
                  AND TARIFA_ADQUIRENTE <> 1
                  AND REGISTRO_MESTRE   <> 1);

--         IF (VREGISTROS > 1) THEN
--             EXCEPTION "..." 'PARCELAMENTO COM LANÇAMENTOS VINCULADOS, EXCLUSAO CANCELADA!';

         IF (VREGISTROS > 0 /*AND OLD.VALOR_SALDO <> OLD.VALOR*/) THEN
             EXCEPTION "..." 'PARCELAMENTO COM LANÇAMENTOS VINCULADOS, EXCLUSAO CANCELADA!';
        DELETE FROM TBCAIXABANCO_LANCAMENTO_REG WHERE NFE_PARCELAMENTO_CONTROLE = OLD.CONTROLE AND NFE_CONTROLE = OLD.NFE_CONTROLE;

END;

CREATE TRIGGER TTBNFE_PARCELAMENTO_B03D FOR TBNFE_PARCELAMENTO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE CHEQUE VARCHAR(500);
DECLARE VARIABLE CHEQUE_ITEM INTEGER;
BEGIN
    
    CHEQUE = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.NUMERO_CHEQUE FROM TBCHEQUE_ITEM A INNER JOIN TBCHEQUE B ON B.ID = A.CHEQUE_ID WHERE A.DOCUMENTO_ID = OLD.CONTROLE), '');
    CHEQUE_ITEM = COALESCE((SELECT FIRST 1 A.ID FROM TBCHEQUE_ITEM A WHERE A.DOCUMENTO_ID = OLD.CONTROLE), 0);

    IF(CHEQUE_ITEM > 0)THEN
    BEGIN
        EXCEPTION "..." 'PARCELA: '||FN_LPAD(OLD.CONTROLE, 7, '0')||' VINCULADA AO CHEQUE: '||CHEQUE||', EXCLUSÃO NÃO AUTORIZADA!';
    END
END;

CREATE OR ALTER TRIGGER TTBNFE_PARCELAMENTO_B10U FOR TBNFE_PARCELAMENTO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE CHEQUE VARCHAR(500);
DECLARE VARIABLE CHEQUE_ITEM INTEGER;
BEGIN
    
    CHEQUE = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.NUMERO_CHEQUE FROM TBCHEQUE_ITEM A INNER JOIN TBCHEQUE B ON B.ID = A.CHEQUE_ID WHERE A.DOCUMENTO_ID = OLD.CONTROLE), '');
    CHEQUE_ITEM = COALESCE((SELECT FIRST 1 A.ID FROM TBCHEQUE_ITEM A WHERE A.DOCUMENTO_ID = OLD.CONTROLE), 0);

    IF((OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) OR (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) OR (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) OR (OLD.SERIE <> NEW.SERIE) OR (OLD.PAGAMENTO_FORMA <> NEW.PAGAMENTO_FORMA) OR (OLD.NFE_CONTROLE <> NEW.NFE_CONTROLE))THEN
    BEGIN
        IF(CHEQUE_ITEM > 0)THEN
        BEGIN
            exception "..." 'PARCELA: '||FN_LPAD(OLD.CONTROLE, 7, '0')||' VINCULADA AO CHEQUE: '||CHEQUE||', ALTERAÇÃO NÃO AUTORIZADA!';
        END
    END

    IF(NEW.VALOR_SALDO < 0)THEN
    BEGIN
       EXCEPTION "..." 'PARCELA '||NEW.PARCELA||', DOC '||NEW.NUMERO_NOTAFISCAL||', SERIE '||NEW.SERIE||' COM SALDO NEGATIVO, OPERAÇÃO CANCELADA!';
    END
END;