" WHEN description LIKE '%%:'||:term||'%%' THEN 2 " +
" WHEN description LIKE '%% '||:term||'%%' THEN 3 " +
" ELSE 9 END AS ordering FROM transactions " +
- "WHERE description LIKE '%%'||:term||'%%' " + "ORDER BY ordering, description, rowid ")
+ "WHERE description LIKE '%%'||:term||'%%' ORDER BY ordering, description, rowid ")
public abstract List<DescriptionContainer> lookupDescriptionSync(@NonNull String term);
@androidx.room.Transaction
@androidx.room.Transaction
@Query("SELECT * FROM transactions WHERE profile_id = :profileId ORDER BY year " +
- " desc, month desc, day desc, ledger_id desc")
- public abstract List<TransactionWithAccounts> getAllWithAccountsSync(long profileId);
-
- @androidx.room.Transaction
- @Query("SELECT * FROM transactions WHERE profile_id = :profileId ORDER BY year " +
- " desc, month desc, day desc, ledger_id desc")
+ " asc, month asc, day asc, ledger_id asc")
public abstract LiveData<List<TransactionWithAccounts>> getAllWithAccounts(long profileId);
@androidx.room.Transaction
" tr.day, tr.description, tr.comment, tr.generation FROM transactions tr JOIN " +
"transaction_accounts ta ON ta.transaction_id=tr.id WHERE ta.account_name LIKE " +
":accountName||'%' AND ta.amount <> 0 AND tr.profile_id = :profileId ORDER BY tr.year " +
- "desc, tr.month desc, tr.day desc, tr.ledger_id desc")
- public abstract List<TransactionWithAccounts> getAllWithAccountsFilteredSync(long profileId,
- String accountName);
-
- @androidx.room.Transaction
- @Query("SELECT distinct(tr.id), tr.ledger_id, tr.profile_id, tr.data_hash, tr.year, tr.month," +
- " tr.day, tr.description, tr.comment, tr.generation FROM transactions tr JOIN " +
- "transaction_accounts ta ON ta.transaction_id=tr.id WHERE ta.account_name LIKE " +
- ":accountName||'%' AND ta.amount <> 0 AND tr.profile_id = :profileId ORDER BY tr.year " +
- "desc, tr.month desc, tr.day desc, tr.ledger_id desc")
+ "asc, tr.month asc, tr.day asc, tr.ledger_id asc")
public abstract LiveData<List<TransactionWithAccounts>> getAllWithAccountsFiltered(
long profileId, String accountName);
trAcc.setGeneration(transaction.getGeneration());
trAcc.setId(trAccDao.insertSync(trAcc));
- Account acc = accDao.getByNameSync(profileId, trAcc.getAccountName());
- if (acc == null) {
- acc = new Account();
- acc.setProfileId(profileId);
- acc.setName(trAcc.getAccountName());
- acc.setNameUpper(acc.getName()
- .toUpperCase());
- acc.setParentName(LedgerAccount.extractParentName(acc.getName()));
- acc.setLevel(LedgerAccount.determineLevel(acc.getName()));
- acc.setGeneration(trAcc.getGeneration());
-
- acc.setId(accDao.insertSync(acc));
- }
-
- AccountValue accVal = accValDao.getByCurrencySync(acc.getId(), trAcc.getCurrency());
- if (accVal == null) {
- accVal = new AccountValue();
- accVal.setAccountId(acc.getId());
- accVal.setGeneration(trAcc.getGeneration());
- accVal.setCurrency(trAcc.getCurrency());
- accVal.setValue(trAcc.getAmount());
- accVal.setId(accValDao.insertSync(accVal));
- }
- else {
- accVal.setValue(accVal.getValue() + trAcc.getAmount());
- accValDao.updateSync(accVal);
+ String accName = trAcc.getAccountName();
+ while (accName != null) {
+ Account acc = accDao.getByNameSync(profileId, accName);
+ if (acc == null) {
+ acc = new Account();
+ acc.setProfileId(profileId);
+ acc.setName(accName);
+ acc.setNameUpper(accName.toUpperCase());
+ acc.setParentName(LedgerAccount.extractParentName(accName));
+ acc.setLevel(LedgerAccount.determineLevel(acc.getName()));
+ acc.setGeneration(trAcc.getGeneration());
+
+ acc.setId(accDao.insertSync(acc));
+ }
+
+ AccountValue accVal = accValDao.getByCurrencySync(acc.getId(), trAcc.getCurrency());
+ if (accVal == null) {
+ accVal = new AccountValue();
+ accVal.setAccountId(acc.getId());
+ accVal.setGeneration(trAcc.getGeneration());
+ accVal.setCurrency(trAcc.getCurrency());
+ accVal.setValue(trAcc.getAmount());
+ accVal.setId(accValDao.insertSync(accVal));
+ }
+ else {
+ accVal.setValue(accVal.getValue() + trAcc.getAmount());
+ accValDao.updateSync(accVal);
+ }
+
+ accName = LedgerAccount.extractParentName(accName);
}
}
}