Make max trade limit dependent on payment method. increase limits to 0.1-0.2 btc

This commit is contained in:
Manfred Karrer 2016-03-10 18:47:53 +01:00
parent 44445cd411
commit 4010f5a727
26 changed files with 140 additions and 130 deletions

View file

@ -983,7 +983,7 @@ textfield */
-fx-background-color: linear-gradient(to bottom, #fcfcfc, #e5e5e5);
-fx-background-radius: 5 5 5 5;
-fx-background-insets: 5 5 20 20;
-fx-effect: dropshadow(gaussian, #333, 12, 0, -1, 3);
-fx-effect: dropshadow(gaussian, #666, 12, 0, -1, 3);
}
.popup-icon-information {

View file

@ -18,6 +18,7 @@
package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.AliPayValidator;
import io.bitsquare.gui.util.validation.InputValidator;
@ -46,8 +47,8 @@ public class AliPayForm extends PaymentMethodForm {
return gridRow;
}
public AliPayForm(PaymentAccount paymentAccount, AliPayValidator aliPayValidator, InputValidator inputValidator, GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
public AliPayForm(PaymentAccount paymentAccount, AliPayValidator aliPayValidator, InputValidator inputValidator, GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.aliPayAccount = (AliPayAccount) paymentAccount;
this.aliPayValidator = aliPayValidator;
}

View file

@ -21,6 +21,7 @@ import io.bitsquare.common.util.Tuple2;
import io.bitsquare.common.util.Tuple3;
import io.bitsquare.common.util.Tuple4;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.locale.*;
@ -67,8 +68,8 @@ abstract class BankForm extends PaymentMethodForm {
}
BankForm(PaymentAccount paymentAccount, InputValidator inputValidator,
GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.bankAccountContractData = (BankAccountContractData) paymentAccount.contractData;
}

View file

@ -18,6 +18,7 @@
package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.AltCoinAddressValidator;
import io.bitsquare.gui.util.validation.InputValidator;
@ -57,8 +58,8 @@ public class BlockChainForm extends PaymentMethodForm {
}
public BlockChainForm(PaymentAccount paymentAccount, AltCoinAddressValidator altCoinAddressValidator, InputValidator inputValidator, GridPane gridPane,
int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.cryptoCurrencyAccount = (CryptoCurrencyAccount) paymentAccount;
this.altCoinAddressValidator = altCoinAddressValidator;
}

View file

@ -17,6 +17,7 @@
package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.payment.PaymentAccount;
import io.bitsquare.payment.PaymentAccountContractData;
@ -32,7 +33,7 @@ public class NationalBankForm extends BankForm {
}
public NationalBankForm(PaymentAccount paymentAccount, InputValidator inputValidator,
GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
}
}

View file

@ -18,6 +18,7 @@
package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.gui.util.validation.OKPayValidator;
@ -53,8 +54,8 @@ public class OKPayForm extends PaymentMethodForm {
return gridRow;
}
public OKPayForm(PaymentAccount paymentAccount, OKPayValidator okPayValidator, InputValidator inputValidator, GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
public OKPayForm(PaymentAccount paymentAccount, OKPayValidator okPayValidator, InputValidator inputValidator, GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.okPayAccount = (OKPayAccount) paymentAccount;
this.okPayValidator = okPayValidator;
}

View file

@ -19,6 +19,7 @@ package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.common.util.Tuple3;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.locale.CurrencyUtil;
import io.bitsquare.locale.TradeCurrency;
@ -46,6 +47,7 @@ public abstract class PaymentMethodForm {
protected final InputValidator inputValidator;
protected final GridPane gridPane;
protected int gridRow;
private BSFormatter formatter;
protected final BooleanProperty allInputsValid = new SimpleBooleanProperty();
protected int gridRowFrom;
@ -53,11 +55,12 @@ public abstract class PaymentMethodForm {
protected CheckBox useCustomAccountNameCheckBox;
private ComboBox<TradeCurrency> currencyComboBox;
public PaymentMethodForm(PaymentAccount paymentAccount, InputValidator inputValidator, GridPane gridPane, int gridRow) {
public PaymentMethodForm(PaymentAccount paymentAccount, InputValidator inputValidator, GridPane gridPane, int gridRow, BSFormatter formatter) {
this.paymentAccount = paymentAccount;
this.inputValidator = inputValidator;
this.gridPane = gridPane;
this.gridRow = gridRow;
this.formatter = formatter;
}
protected void addTradeCurrencyComboBox() {
@ -116,24 +119,24 @@ public abstract class PaymentMethodForm {
if (hours > 24)
displayText = hours / 24 + " days";
addLabelTextField(gridPane, gridRow, "Max. allowed trade period / date:", displayText + " / " + dateFromBlocks);
}
}
protected void addAllowedPeriod() {
long hours = paymentAccount.getPaymentMethod().getMaxTradePeriod() / 6;
String displayText = hours + " hours";
String time = hours + " hours";
if (hours == 1)
displayText = "1 hour";
time = "1 hour";
else if (hours == 24)
displayText = "1 day";
time = "1 day";
else if (hours > 24)
displayText = hours / 24 + " days";
time = hours / 24 + " days";
displayText += " (Max. permitted period until the trade has to be completed)";
String displayText = "Max. trade duration: " + time + " / Max. trade limit: " +
formatter.formatCoinWithCode(paymentAccount.getPaymentMethod().getMaxTradeLimitInBitcoin());
addLabelTextField(gridPane, ++gridRow, "Max. allowed trade period:", displayText);
addLabelTextField(gridPane, ++gridRow, "Limitations:", displayText);
}
abstract protected void autoFillNameTextField();

View file

@ -18,6 +18,7 @@
package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.gui.util.validation.PerfectMoneyValidator;
@ -47,8 +48,8 @@ public class PerfectMoneyForm extends PaymentMethodForm {
}
public PerfectMoneyForm(PaymentAccount paymentAccount, PerfectMoneyValidator perfectMoneyValidator, InputValidator inputValidator, GridPane gridPane, int
gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.perfectMoneyAccount = (PerfectMoneyAccount) paymentAccount;
this.perfectMoneyValidator = perfectMoneyValidator;
}

View file

@ -19,6 +19,7 @@ package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.common.util.Tuple2;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.payment.CountryBasedPaymentAccount;
import io.bitsquare.payment.PaymentAccount;
@ -40,8 +41,8 @@ public class SameBankForm extends BankForm {
}
public SameBankForm(PaymentAccount paymentAccount, InputValidator inputValidator,
GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
}
@Override

View file

@ -19,6 +19,7 @@ package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.common.util.Tuple3;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.BICValidator;
import io.bitsquare.gui.util.validation.IBANValidator;
@ -26,6 +27,7 @@ import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.locale.*;
import io.bitsquare.payment.*;
import javafx.collections.FXCollections;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.control.*;
@ -63,8 +65,8 @@ public class SepaForm extends PaymentMethodForm {
}
public SepaForm(PaymentAccount paymentAccount, IBANValidator ibanValidator, BICValidator bicValidator, InputValidator inputValidator,
GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.sepaAccount = (SepaAccount) paymentAccount;
this.ibanValidator = ibanValidator;
this.bicValidator = bicValidator;
@ -152,8 +154,9 @@ public class SepaForm extends PaymentMethodForm {
private void addCountriesGrid(boolean isEditable, String title, List<CheckBox> checkBoxList, List<Country> dataProvider) {
Label label = addLabel(gridPane, ++gridRow, title, 0);
label.setWrapText(true);
label.setPrefWidth(200);
label.setMaxWidth(180);
label.setTextAlignment(TextAlignment.RIGHT);
GridPane.setHalignment(label, HPos.RIGHT);
GridPane.setValignment(label, VPos.TOP);
FlowPane flowPane = new FlowPane();
flowPane.setPadding(new Insets(10, 10, 10, 10));

View file

@ -20,6 +20,7 @@ package io.bitsquare.gui.components.paymentmethods;
import com.google.common.base.Joiner;
import io.bitsquare.common.util.Tuple3;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.payment.PaymentAccount;
import io.bitsquare.payment.PaymentAccountContractData;
@ -47,8 +48,8 @@ public class SpecificBankForm extends BankForm {
}
public SpecificBankForm(PaymentAccount paymentAccount, InputValidator inputValidator,
GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.specificBanksAccountContractData = (SpecificBanksAccountContractData) paymentAccount.contractData;
}

View file

@ -18,6 +18,7 @@
package io.bitsquare.gui.components.paymentmethods;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.Layout;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.gui.util.validation.SwishValidator;
@ -48,8 +49,8 @@ public class SwishForm extends PaymentMethodForm {
return gridRow;
}
public SwishForm(PaymentAccount paymentAccount, SwishValidator swishValidator, InputValidator inputValidator, GridPane gridPane, int gridRow) {
super(paymentAccount, inputValidator, gridPane, gridRow);
public SwishForm(PaymentAccount paymentAccount, SwishValidator swishValidator, InputValidator inputValidator, GridPane gridPane, int gridRow, BSFormatter formatter) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter);
this.swishAccount = (SwishAccount) paymentAccount;
this.swishValidator = swishValidator;
}

View file

@ -24,6 +24,7 @@ import io.bitsquare.gui.components.TitledGroupBg;
import io.bitsquare.gui.components.paymentmethods.BlockChainForm;
import io.bitsquare.gui.components.paymentmethods.PaymentMethodForm;
import io.bitsquare.gui.main.overlays.popups.Popup;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.FormBuilder;
import io.bitsquare.gui.util.ImageUtil;
import io.bitsquare.gui.util.Layout;
@ -59,6 +60,7 @@ public class AltCoinAccountsView extends ActivatableViewAndModel<GridPane, AltCo
private final PerfectMoneyValidator perfectMoneyValidator;
private final SwishValidator swishValidator;
private final AltCoinAddressValidator altCoinAddressValidator;
private BSFormatter formatter;
private PaymentMethodForm paymentMethodForm;
private TitledGroupBg accountTitledGroupBg;
@ -76,7 +78,8 @@ public class AltCoinAccountsView extends ActivatableViewAndModel<GridPane, AltCo
AliPayValidator aliPayValidator,
PerfectMoneyValidator perfectMoneyValidator,
SwishValidator swishValidator,
AltCoinAddressValidator altCoinAddressValidator) {
AltCoinAddressValidator altCoinAddressValidator,
BSFormatter formatter) {
super(model);
this.ibanValidator = ibanValidator;
@ -87,6 +90,7 @@ public class AltCoinAccountsView extends ActivatableViewAndModel<GridPane, AltCo
this.perfectMoneyValidator = perfectMoneyValidator;
this.swishValidator = swishValidator;
this.altCoinAddressValidator = altCoinAddressValidator;
this.formatter = formatter;
}
@Override
@ -247,7 +251,7 @@ public class AltCoinAccountsView extends ActivatableViewAndModel<GridPane, AltCo
}
private PaymentMethodForm getPaymentMethodForm(PaymentAccount paymentAccount) {
return new BlockChainForm(paymentAccount, altCoinAddressValidator, inputValidator, root, gridRow);
return new BlockChainForm(paymentAccount, altCoinAddressValidator, inputValidator, root, gridRow, formatter);
}
private void removeNewAccountForm() {

View file

@ -23,6 +23,7 @@ import io.bitsquare.gui.common.view.FxmlView;
import io.bitsquare.gui.components.TitledGroupBg;
import io.bitsquare.gui.components.paymentmethods.*;
import io.bitsquare.gui.main.overlays.popups.Popup;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.FormBuilder;
import io.bitsquare.gui.util.ImageUtil;
import io.bitsquare.gui.util.Layout;
@ -38,6 +39,7 @@ import javafx.scene.control.*;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.text.TextAlignment;
import javafx.util.Callback;
import javafx.util.StringConverter;
@ -61,6 +63,7 @@ public class FiatAccountsView extends ActivatableViewAndModel<GridPane, FiatAcco
private final PerfectMoneyValidator perfectMoneyValidator;
private final SwishValidator swishValidator;
private final AltCoinAddressValidator altCoinAddressValidator;
private BSFormatter formatter;
private PaymentMethodForm paymentMethodForm;
private TitledGroupBg accountTitledGroupBg;
@ -78,7 +81,8 @@ public class FiatAccountsView extends ActivatableViewAndModel<GridPane, FiatAcco
AliPayValidator aliPayValidator,
PerfectMoneyValidator perfectMoneyValidator,
SwishValidator swishValidator,
AltCoinAddressValidator altCoinAddressValidator) {
AltCoinAddressValidator altCoinAddressValidator,
BSFormatter formatter) {
super(model);
this.ibanValidator = ibanValidator;
@ -89,6 +93,7 @@ public class FiatAccountsView extends ActivatableViewAndModel<GridPane, FiatAcco
this.perfectMoneyValidator = perfectMoneyValidator;
this.swishValidator = swishValidator;
this.altCoinAddressValidator = altCoinAddressValidator;
this.formatter = formatter;
}
@Override
@ -156,8 +161,9 @@ public class FiatAccountsView extends ActivatableViewAndModel<GridPane, FiatAcco
private void buildForm() {
addTitledGroupBg(root, gridRow, 2, "Manage accounts");
Tuple2<Label, ListView> tuple = addLabelListView(root, gridRow, "Your national currency accounts:", Layout.FIRST_ROW_DISTANCE);
Tuple2<Label, ListView> tuple = addLabelListView(root, gridRow, "Your national currency\naccounts:", Layout.FIRST_ROW_DISTANCE);
GridPane.setValignment(tuple.first, VPos.TOP);
tuple.first.setTextAlignment(TextAlignment.RIGHT);
paymentAccountsListView = tuple.second;
paymentAccountsListView.setPrefHeight(2 * Layout.LIST_ROW_HEIGHT + 14);
paymentAccountsListView.setCellFactory(new Callback<ListView<PaymentAccount>, ListCell<PaymentAccount>>() {
@ -274,21 +280,21 @@ public class FiatAccountsView extends ActivatableViewAndModel<GridPane, FiatAcco
private PaymentMethodForm getPaymentMethodForm(PaymentMethod paymentMethod, PaymentAccount paymentAccount) {
switch (paymentMethod.getId()) {
case PaymentMethod.OK_PAY_ID:
return new OKPayForm(paymentAccount, okPayValidator, inputValidator, root, gridRow);
return new OKPayForm(paymentAccount, okPayValidator, inputValidator, root, gridRow, formatter);
case PaymentMethod.PERFECT_MONEY_ID:
return new PerfectMoneyForm(paymentAccount, perfectMoneyValidator, inputValidator, root, gridRow);
return new PerfectMoneyForm(paymentAccount, perfectMoneyValidator, inputValidator, root, gridRow, formatter);
case PaymentMethod.SEPA_ID:
return new SepaForm(paymentAccount, ibanValidator, bicValidator, inputValidator, root, gridRow);
return new SepaForm(paymentAccount, ibanValidator, bicValidator, inputValidator, root, gridRow, formatter);
case PaymentMethod.NATIONAL_BANK_ID:
return new NationalBankForm(paymentAccount, inputValidator, root, gridRow);
return new NationalBankForm(paymentAccount, inputValidator, root, gridRow, formatter);
case PaymentMethod.SAME_BANK_ID:
return new SameBankForm(paymentAccount, inputValidator, root, gridRow);
return new SameBankForm(paymentAccount, inputValidator, root, gridRow, formatter);
case PaymentMethod.SPECIFIC_BANKS_ID:
return new SpecificBankForm(paymentAccount, inputValidator, root, gridRow);
return new SpecificBankForm(paymentAccount, inputValidator, root, gridRow, formatter);
case PaymentMethod.ALI_PAY_ID:
return new AliPayForm(paymentAccount, aliPayValidator, inputValidator, root, gridRow);
return new AliPayForm(paymentAccount, aliPayValidator, inputValidator, root, gridRow, formatter);
case PaymentMethod.SWISH_ID:
return new SwishForm(paymentAccount, swishValidator, inputValidator, root, gridRow);
return new SwishForm(paymentAccount, swishValidator, inputValidator, root, gridRow, formatter);
default:
log.error("Not supported PaymentMethod: " + paymentMethod);
return null;

View file

@ -101,7 +101,7 @@ class CreateOfferDataModel extends ActivatableDataModel {
final ObservableList<PaymentAccount> paymentAccounts = FXCollections.observableArrayList();
private PaymentAccount paymentAccount;
PaymentAccount paymentAccount;
private boolean isTabSelected;
private Notification walletFundedNotification;

View file

@ -313,6 +313,7 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
void initWithData(Offer.Direction direction, TradeCurrency tradeCurrency) {
dataModel.initWithData(direction, tradeCurrency);
btcValidator.setPaymentMethod(dataModel.paymentAccount.getPaymentMethod());
}
@ -368,6 +369,7 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
}
public void onPaymentAccountSelected(PaymentAccount paymentAccount) {
btcValidator.setPaymentMethod(paymentAccount.getPaymentMethod());
dataModel.onPaymentAccountSelected(paymentAccount);
}

View file

@ -85,7 +85,7 @@ class OfferBookViewModel extends ActivatableViewModel {
// If id is empty string we ignore filter (display all methods)
private PaymentMethod selectedPaymentMethod = new PaymentMethod(SHOW_ALL_FLAG, 0, 0);
private PaymentMethod selectedPaymentMethod = new PaymentMethod(SHOW_ALL_FLAG, 0, 0, null);
private final ObservableList<OfferBookListItem> offerBookListItems;
private final ListChangeListener<OfferBookListItem> listChangeListener;
@ -334,19 +334,15 @@ class OfferBookViewModel extends ActivatableViewModel {
return false;
}
//TODO not tested with all combinations yet....
static boolean isPaymentAccountValidForOffer(Offer offer, PaymentAccount paymentAccount) {
// check if we have a matching currency
Set<String> paymentAccountCurrencyCodes = paymentAccount.getTradeCurrencies().stream().map(TradeCurrency::getCode).collect(Collectors.toSet());
boolean matchesCurrencyCode = paymentAccountCurrencyCodes.contains(offer.getCurrencyCode());
log.error("paymentAccount.paymentAccountCurrencyCodes " + paymentAccountCurrencyCodes);
log.error("offer.getCurrencyCode() " + offer.getCurrencyCode());
log.error("matchesCurrencyCode " + matchesCurrencyCode);
if (!matchesCurrencyCode)
return false;
// check if we have a matching payment method or if its a bank account payment method which is treated special
if (paymentAccount instanceof CountryBasedPaymentAccount) {
CountryBasedPaymentAccount countryBasedPaymentAccount = (CountryBasedPaymentAccount) paymentAccount;
@ -358,15 +354,11 @@ class OfferBookViewModel extends ActivatableViewModel {
// check if we have a matching country
boolean matchesCountryCodes = offer.getAcceptedCountryCodes().contains(countryBasedPaymentAccount.getCountry().code);
log.error("offer.getAcceptedCountryCodes() " + offer.getAcceptedCountryCodes());
log.error("paymentAccount.getCountry().code " + countryBasedPaymentAccount.getCountry().code);
log.error("matchesCountryCodes " + matchesCountryCodes);
if (!matchesCountryCodes)
return false;
if (paymentAccount instanceof SepaAccount || offer.getPaymentMethod().equals(PaymentMethod.SEPA)) {
boolean samePaymentMethod = paymentAccount.getPaymentMethod().equals(offer.getPaymentMethod());
log.error("samePaymentMethod " + samePaymentMethod);
return samePaymentMethod;
} else if (offer.getPaymentMethod().equals(PaymentMethod.SAME_BANK) ||
offer.getPaymentMethod().equals(PaymentMethod.SPECIFIC_BANKS)) {
@ -376,36 +368,20 @@ class OfferBookViewModel extends ActivatableViewModel {
// check if we have a matching bank
boolean offerSideMatchesBank = offer.getAcceptedBankIds().contains(((BankAccount) paymentAccount).getBankId());
boolean paymentAccountSideMatchesBank = ((SpecificBanksAccount) paymentAccount).getAcceptedBanks().contains(offer.getBankId());
log.error("offer.getAcceptedBankIds() " + offer.getAcceptedBankIds());
log.error("((BankAccount) paymentAccount).getBankId() " + ((BankAccount) paymentAccount).getBankId());
log.error("offerSideMatchesBank " + offerSideMatchesBank);
log.error("paymentAccountSideMatchesBank " + paymentAccountSideMatchesBank);
return offerSideMatchesBank && paymentAccountSideMatchesBank;
} else {
// national or same bank
boolean matchesBank = offer.getAcceptedBankIds().contains(((BankAccount) paymentAccount).getBankId());
log.error("offer.getAcceptedBankIds() " + offer.getAcceptedBankIds());
log.error("((BankAccount) paymentAccount).getBankId() " + ((BankAccount) paymentAccount).getBankId());
log.error("matchesBank " + matchesBank);
return matchesBank;
}
} else {
if (paymentAccount instanceof SpecificBanksAccount) {
// check if we have a matching bank
boolean paymentAccountSideMatchesBank = ((SpecificBanksAccount) paymentAccount).getAcceptedBanks().contains(offer.getBankId());
log.error("offer.getAcceptedBankIds() " + offer.getAcceptedBankIds());
log.error("((BankAccount) paymentAccount).getBankId() " + ((BankAccount) paymentAccount).getBankId());
log.error("paymentAccountSideMatchesBank " + paymentAccountSideMatchesBank);
return paymentAccountSideMatchesBank;
} else if (paymentAccount instanceof SameBankAccount) {
// check if we have a matching bank
boolean paymentAccountSideMatchesBank = ((SameBankAccount) paymentAccount).getBankId().equals(offer.getBankId());
log.error("offer.getAcceptedBankIds() " + offer.getAcceptedBankIds());
log.error("((BankAccount) paymentAccount).getBankId() " + ((BankAccount) paymentAccount).getBankId());
log.error("paymentAccountSideMatchesBank " + paymentAccountSideMatchesBank);
return paymentAccountSideMatchesBank;
} else {
// national

View file

@ -88,7 +88,7 @@ class TakeOfferDataModel extends ActivatableDataModel {
final ObjectProperty<Coin> feeFromFundingTxProperty = new SimpleObjectProperty(Coin.NEGATIVE_SATOSHI);
private BalanceListener balanceListener;
private PaymentAccount paymentAccount;
PaymentAccount paymentAccount;
private boolean isTabSelected;

View file

@ -170,6 +170,8 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
};
offer.errorMessageProperty().addListener(offerErrorListener);
errorMessage.set(offer.errorMessageProperty().get());
btcValidator.setPaymentMethod(dataModel.paymentAccount.getPaymentMethod());
}
@ -195,6 +197,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
public void onPaymentAccountSelected(PaymentAccount paymentAccount) {
dataModel.onPaymentAccountSelected(paymentAccount);
btcValidator.setPaymentMethod(paymentAccount.getPaymentMethod());
}
public void onShowPayFundsScreen() {

View file

@ -17,9 +17,11 @@
package io.bitsquare.gui.util.validation;
import io.bitsquare.btc.Restrictions;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.locale.BSResources;
import io.bitsquare.payment.PaymentMethod;
import org.bitcoinj.core.Coin;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import java.math.BigDecimal;
@ -28,11 +30,18 @@ public class BtcValidator extends NumberValidator {
private final BSFormatter formatter;
@NotNull
private PaymentMethod paymentMethod;
@Inject
public BtcValidator(BSFormatter formatter) {
this.formatter = formatter;
}
public void setPaymentMethod(@NotNull PaymentMethod paymentMethod) {
this.paymentMethod = paymentMethod;
}
@Override
public ValidationResult validate(String input) {
ValidationResult result = validateIfNotEmpty(input);
@ -61,10 +70,8 @@ public class BtcValidator extends NumberValidator {
}
protected ValidationResult validateIfNotExceedsMaxBtcValue(String input) {
BigDecimal bd = new BigDecimal(input);
final BigDecimal satoshis = bd.movePointRight(8);
if (satoshis.longValue() > Restrictions.MAX_TRADE_AMOUNT.longValue())
return new ValidationResult(false, BSResources.get("validation.btc.toLarge", formatter.formatCoinWithCode(Restrictions.MAX_TRADE_AMOUNT)));
if (Coin.parseCoin(input).compareTo(paymentMethod.getMaxTradeLimitInBitcoin()) > 0)
return new ValidationResult(false, BSResources.get("validation.btc.toLarge", formatter.formatCoinWithCode(paymentMethod.getMaxTradeLimitInBitcoin())));
else
return new ValidationResult(true);
}

View file

@ -17,7 +17,6 @@
package io.bitsquare.gui.util.validation;
import io.bitsquare.btc.Restrictions;
import io.bitsquare.gui.util.BSFormatter;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.NetworkParameters;
@ -38,7 +37,6 @@ public class BtcValidatorTest {
assertTrue(validator.validate(".1").isValid);
assertTrue(validator.validate("0.12345678").isValid);
assertTrue(validator.validate(Coin.SATOSHI.toPlainString()).isValid);
assertTrue(validator.validate(Restrictions.MAX_TRADE_AMOUNT.toPlainString()).isValid);
assertFalse(validator.validate(null).isValid);
assertFalse(validator.validate("").isValid);
@ -50,8 +48,6 @@ public class BtcValidatorTest {
assertFalse(validator.validate("0.000,1").isValid);
assertFalse(validator.validate("0.123456789").isValid);
assertFalse(validator.validate("-1").isValid);
assertFalse(validator.validate(String.valueOf(Restrictions.MAX_TRADE_AMOUNT.longValue() + Coin.SATOSHI
.longValue())).isValid);
assertFalse(validator.validate(NetworkParameters.MAX_MONEY.toPlainString()).isValid);
}