SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_cfe_forma_pagamento_b02i for tbpdv_cfe_forma_pagamento
active before insert position 2
AS
DECLARE VARIABLE OLD_SALDO_DEVOLUCAO NUMERIC(15,2);
DECLARE VARIABLE NEW_SALDO_DEVOLUCAO NUMERIC(15,2);
DECLARE VARIABLE VALOR_DEVOLUCAO_INSERIDO NUMERIC(15,2);

BEGIN

  IF(COALESCE(NEW.PDV_DEVOLUCAO_TROCA_ID, 0) > 0) THEN
  BEGIN
        SELECT
            T.VALOR_SALDO
        FROM TBPDV_DEVOLUCAO_TROCA T
        WHERE T.ID = NEW.PDV_DEVOLUCAO_TROCA_ID
        INTO :OLD_SALDO_DEVOLUCAO;

        IF(COALESCE(:OLD_SALDO_DEVOLUCAO, 0) > 0) THEN
        BEGIN
            :NEW_SALDO_DEVOLUCAO = ROUND(:OLD_SALDO_DEVOLUCAO - NEW.VALOR_LIQUIDO, 2);

            IF(:NEW_SALDO_DEVOLUCAO < 0) THEN
            BEGIN

                --EXCEPTION "..."'SALDO DE DEVOLUCAO NAO PODE FICAR NEGATIVO. SALDO ATUAL: '||:OLD_SALDO_DEVOLUCAO||'. A BAIXAR: '||NEW.VALOR_LIQUIDO;

            END
        END
  END

  IF(COALESCE(NEW.CREDITO_LOJA_AUTOMATICO, 0) = 1) THEN
  BEGIN

    :VALOR_DEVOLUCAO_INSERIDO = COALESCE((SELECT FIRST 1 SUM(V.VALOR_LIQUIDO) FROM TBPDV_CFE_ITEM_TROCA V WHERE V.PDV_CFE_ID = NEW.PDV_CFE_ID), 0);

    IF(NEW.VALOR_LIQUIDO > :VALOR_DEVOLUCAO_INSERIDO) THEN
    BEGIN
        EXCEPTION "..."'VALOR DA FORMA DE PAGAMENTO CREDITO DE DEVOLUCAO MAIOR QUE O SOMATORIO DO VALOR DOS ITENS DEVOLVIDOS. VALOR FORMA PAG: R$ '||FN_FORMAT_NUMBER(NEW.VALOR_LIQUIDO, 2)||' VALOR ITENS DEVOLVIDOS: R$ '||FN_FORMAT_NUMBER(:VALOR_DEVOLUCAO_INSERIDO, 2);
    END

  END
END
^

SET TERM ; ^

