When accepting an offer do not round the BTC amount outside range

Fixes 3871.  The BTC amount of an offer was being adjusted up in
certain cases due to a rounding calculation from the fiat value
and price.  This would prevent some offers from being taken.

There's an existing check to ensure that the amount is not adjusted
below the minimum, here we add a check to ensure that the amount
is not adjusted higher than the maximum defined in the offer.
This commit is contained in:
jmacxx 2020-04-17 22:05:30 -05:00
parent 2db90cf132
commit 223a1d3a6c
No known key found for this signature in database
GPG key ID: 155297BABFE94A1B

View file

@ -361,7 +361,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
dataModel.applyAmount(adjustedAmountForHalCash);
amount.set(btcFormatter.formatCoin(dataModel.getAmount().get()));
} else if (CurrencyUtil.isFiatCurrency(dataModel.getCurrencyCode())) {
if (!isAmountEqualMinAmount(dataModel.getAmount().get())) {
if (!isAmountEqualMinAmount(dataModel.getAmount().get()) && (!isAmountEqualMaxAmount(dataModel.getAmount().get()))) {
// We only apply the rounding if the amount is variable (minAmount is lower as amount).
// Otherwise we could get an amount lower then the minAmount set by rounding
Coin roundedAmount = OfferUtil.getRoundedFiatAmount(dataModel.getAmount().get(), tradePrice,
@ -644,7 +644,8 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
if (price != null) {
if (dataModel.isHalCashAccount()) {
amount = OfferUtil.getAdjustedAmountForHalCash(amount, price, maxTradeLimit);
} else if (CurrencyUtil.isFiatCurrency(dataModel.getCurrencyCode()) && !isAmountEqualMinAmount(amount)) {
} else if (CurrencyUtil.isFiatCurrency(dataModel.getCurrencyCode())
&& !isAmountEqualMinAmount(amount) && !isAmountEqualMaxAmount(amount)) {
// We only apply the rounding if the amount is variable (minAmount is lower as amount).
// Otherwise we could get an amount lower then the minAmount set by rounding
amount = OfferUtil.getRoundedFiatAmount(amount, price, maxTradeLimit);
@ -658,6 +659,9 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
return amount.value == offer.getMinAmount().value;
}
private boolean isAmountEqualMaxAmount(Coin amount) {
return amount.value == offer.getAmount().value;
}
///////////////////////////////////////////////////////////////////////////////////////////
// Getters