X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FUpdateTransactionsTask.java;h=f58d3e5cae25f8f9a06ea4c8b941a3af40cd0af2;hp=33b378450c874652bb5dd7443cb4c8ffbf317779;hb=11c8dff16901782f69287854cb4788ddf8d932c2;hpb=ac58b6e2bf3595481020b5283d3c4b28551f7f73 diff --git a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java index 33b37845..f58d3e5c 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java @@ -24,44 +24,65 @@ import android.util.Log; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerTransaction; +import net.ktnx.mobileledger.model.TransactionListItem; +import net.ktnx.mobileledger.utils.Globals; import net.ktnx.mobileledger.utils.MLDB; import java.util.ArrayList; +import java.util.Date; import java.util.List; -public class UpdateTransactionsTask extends AsyncTask> { - protected List doInBackground(String[] filterAccName) { +public class UpdateTransactionsTask extends AsyncTask> { + protected List doInBackground(String[] filterAccName) { Data.backgroundTaskCount.incrementAndGet(); String profile_uuid = Data.profile.get().getUuid(); try { - ArrayList newList = new ArrayList<>(); - - boolean hasFilter = (filterAccName != null) && (filterAccName.length > 0) && - (filterAccName[0] != null) && !filterAccName[0].isEmpty(); + ArrayList newList = new ArrayList<>(); String sql; String[] params; - sql = "SELECT id FROM transactions WHERE profile=? ORDER BY date desc, id desc"; - params = new String[]{profile_uuid}; + if (filterAccName[0] == null) { + sql = "SELECT id, date FROM transactions WHERE profile=? ORDER BY date desc, id " + + "desc"; + params = new String[]{profile_uuid}; - if (hasFilter) { - sql = "SELECT distinct tr.id from transactions tr JOIN transaction_accounts ta " + + } + else { + sql = "SELECT distinct tr.id, tr.date from transactions tr JOIN " + + "transaction_accounts ta " + "ON ta.transaction_id=tr.id AND ta.profile=tr.profile WHERE tr.profile=? " + - "and ta" + ".account_name LIKE ?||'%' AND ta" + + "and ta.account_name LIKE ?||'%' AND ta" + ".amount <> 0 ORDER BY tr.date desc, tr.id desc"; - params = filterAccName; + params = new String[]{profile_uuid, filterAccName[0]}; } Log.d("UTT", sql); SQLiteDatabase db = MLDB.getReadableDatabase(); + Date lastDate = null; + boolean odd = true; try (Cursor cursor = db.rawQuery(sql, params)) { while (cursor.moveToNext()) { if (isCancelled()) return null; int transaction_id = cursor.getInt(0); - newList.add(new LedgerTransaction(transaction_id)); + String dateString = cursor.getString(1); + Date date = Globals.parseLedgerDate(dateString); + + if ((lastDate == null) || !lastDate.equals(date)) { + boolean showMonth = (lastDate == null) || (date != null) && + (date.getMonth() != + lastDate.getMonth() || + date.getYear() != + lastDate.getYear()); + newList.add(new TransactionListItem(date, showMonth)); + } + newList.add( + new TransactionListItem(new LedgerTransaction(transaction_id), odd)); // Log.d("UTT", String.format("got transaction %d", transaction_id)); + + lastDate = date; + odd = !odd; } Data.transactions.set(newList); Log.d("UTT", "transaction list value updated");