- tvDate.setText("");
- tvDescription.setText("");
-
- tvDescription.requestFocus();
-
- while (table.getChildCount() > 2) {
- table.removeViewAt(2);
- }
- for (int i = 0; i < 2; i++) {
- TableRow tr = (TableRow) table.getChildAt(i);
- if (tr == null) break;
-
- ((TextView) tr.getChildAt(0)).setText("");
- ((TextView) tr.getChildAt(1)).setText("");
- }
- }
- @Override
- public void descriptionSelected(String description) {
- debug("descr selected", description);
- if (!inputStateIsInitial()) return;
-
- String accFilter = mProfile.getPreferredAccountsFilter();
-
- ArrayList<String> params = new ArrayList<>();
- StringBuilder sb = new StringBuilder(
- "select t.profile, t.id from transactions t where t.description=?");
- params.add(description);
-
- if (accFilter != null) {
- sb.append(" AND EXISTS (").append("SELECT 1 FROM transaction_accounts ta ")
- .append("WHERE ta.profile = t.profile").append(" AND ta.transaction_id = t.id")
- .append(" AND UPPER(ta.account_name) LIKE '%'||?||'%')");
- params.add(accFilter.toUpperCase());
- }
-
- sb.append(" ORDER BY date desc limit 1");
-
- final String sql = sb.toString();
- debug("descr", sql);
- debug("descr", params.toString());
-
- try (Cursor c = App.getDatabase().rawQuery(sql, params.toArray(new String[]{}))) {
- if (!c.moveToNext()) return;
-
- String profileUUID = c.getString(0);
- int transactionId = c.getInt(1);
- LedgerTransaction tr;
- MobileLedgerProfile profile = Data.getProfile(profileUUID);
- if (profile == null) throw new RuntimeException(String.format(
- "Unable to find profile %s, which is supposed to contain " +
- "transaction %d with description %s", profileUUID, transactionId, description));
-
- tr = profile.loadTransaction(transactionId);
- table = findViewById(R.id.new_transaction_accounts_table);
- ArrayList<LedgerTransactionAccount> accounts = tr.getAccounts();
- TableRow firstNegative = null;
- int negativeCount = 0;
- for (int i = 0; i < accounts.size(); i++) {
- LedgerTransactionAccount acc = accounts.get(i);
- TableRow row = (TableRow) table.getChildAt(i);
- if (row == null) row = doAddAccountRow(false);
-
- ((TextView) row.getChildAt(0)).setText(acc.getAccountName());
- ((TextView) row.getChildAt(1))
- .setText(String.format(Locale.US, "%1.2f", acc.getAmount()));
-
- if (acc.getAmount() < 0.005) {
- if (firstNegative == null) firstNegative = row;
- negativeCount++;
- }
- }
-
- if (negativeCount == 1) {
- ((TextView) firstNegative.getChildAt(1)).setText(null);
- }
-
- check_transaction_submittable();
-
- EditText firstAmount = (EditText) ((TableRow) table.getChildAt(0)).getChildAt(1);
- String amtString = String.valueOf(firstAmount.getText());
- firstAmount.requestFocus();
- firstAmount.setSelection(0, amtString.length());
- }
-
- }
- private boolean inputStateIsInitial() {
- table = findViewById(R.id.new_transaction_accounts_table);
-
- if (table.getChildCount() != 2) return false;
-
- for (int i = 0; i < 2; i++) {
- TableRow row = (TableRow) table.getChildAt(i);
- if (((TextView) row.getChildAt(0)).getText().length() > 0) return false;
- if (((TextView) row.getChildAt(1)).getText().length() > 0) return false;
- }
-
- return true;