CREATE OR ALTER procedure SPU_SALDO_ROMANEIO (
    ESTABELECIMENTO integer,
    SEQUENCIA integer,
    ROMANEIO integer,
    QUANTIDADE numeric(15,5),
    OPERACAO integer)
as
declare variable OLD_SALDO numeric(15,5);
declare variable NEW_SALDO numeric(15,5);
BEGIN

    IF (OPERACAO = 1) THEN  /*INCLUSAO - SUBTRAI DO SALDO A FATURAR*/
    BEGIN

        SELECT FIRST 1
            T.SALDO
        FROM TBTECELAGEM_ROMANEIO T
        WHERE T.ROMANEIO = :ROMANEIO
        AND T.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
        INTO :OLD_SALDO;

        IF(COALESCE(:OLD_SALDO, 0) > 0) THEN
        BEGIN
            :NEW_SALDO = ROUND(:OLD_SALDO - :QUANTIDADE, 5);

            IF(:NEW_SALDO >= 0) THEN
            BEGIN
                UPDATE TBTECELAGEM_ROMANEIO SET
                    SALDO = :NEW_SALDO
                WHERE ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                  AND ROMANEIO = :ROMANEIO;
                END

            END ELSE
            BEGIN
                EXCEPTION "..."'ERRO AO TENTAR BAIXAR SALDO DO ROMANEIO '||:ROMANEIO||' REFERENTE AO ITEM '||:SEQUENCIA||
                    '. DISPONIVEL: '||FN_FORMAT_NUMBER2(:OLD_SALDO, 5)||'. A BAIXAR: '||FN_FORMAT_NUMBER2(:QUANTIDADE, 5);
            END
    END


    IF (OPERACAO = 2) THEN  /*EXCLUSAO - VOLTA O SALDO A FATURAR*/
    BEGIN
        UPDATE TBTECELAGEM_ROMANEIO SET
            SALDO = SALDO + :QUANTIDADE
        WHERE ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
          AND ROMANEIO = :ROMANEIO;
    END

END;