From: Damyan Ivanov Date: Sun, 26 Dec 2021 21:37:36 +0000 (+0200) Subject: do not crash when sending transaction with just empty amounts X-Git-Tag: v0.21.1~1 X-Git-Url: https://git.ktnx.net/?a=commitdiff_plain;h=f3a51462230bae2734179aa7eeef30901daaee30;p=mobile-ledger.git do not crash when sending transaction with just empty amounts if it is accepted by hledger-web, it must be legal --- diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java index 81f1ed07..1fe215b2 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java @@ -443,7 +443,7 @@ public class NewTransactionModel extends ViewModel { LedgerTransaction tr = head.asLedgerTransaction(); tr.setComment(head.getComment()); - LedgerTransactionAccount emptyAmountAccount = null; + List emptyAmountAccounts = new ArrayList<>(); float emptyAmountAccountBalance = 0; for (int i = 1; i < list.size(); i++) { TransactionAccount item = list.get(i) @@ -462,14 +462,20 @@ public class NewTransactionModel extends ViewModel { emptyAmountAccountBalance += item.getAmount(); } else { - emptyAmountAccount = acc; + emptyAmountAccounts.add(acc); } tr.addAccount(acc); } - if (emptyAmountAccount != null) - emptyAmountAccount.setAmount(-emptyAmountAccountBalance); + if (emptyAmountAccounts.size() > 0) { + if (emptyAmountAccounts.size() > 1 && !Misc.isZero(emptyAmountAccountBalance)) + throw new RuntimeException(String.format(Locale.US, + "Should not happen. %d accounts with non zero amount to distribute (%5" + + ".3f)")); + for (LedgerTransactionAccount a : emptyAmountAccounts) + a.setAmount(-emptyAmountAccountBalance); + } return tr; }