X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FUpdateTransactionsTask.java;h=06bec67ef73d84cf6a355eac0c3d10977e562aba;hb=5df10dc0b58df4d4be4e9ab34f1e0f477ca46766;hp=5093d50c952287846284c1390e07da2259453b23;hpb=90383a155ec16a9f13b1e6ac94a118033e09b3aa;p=mobile-ledger.git 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 5093d50c..06bec67e 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2021 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -22,81 +22,59 @@ import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import net.ktnx.mobileledger.App; +import net.ktnx.mobileledger.db.Profile; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerTransaction; -import net.ktnx.mobileledger.model.MobileLedgerProfile; -import net.ktnx.mobileledger.model.TransactionListItem; -import net.ktnx.mobileledger.utils.Globals; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Date; +import net.ktnx.mobileledger.ui.MainModel; +import net.ktnx.mobileledger.utils.SimpleDate; import static net.ktnx.mobileledger.utils.Logger.debug; -public class UpdateTransactionsTask extends AsyncTask { - protected String doInBackground(String[] filterAccName) { - final MobileLedgerProfile profile = Data.profile.getValue(); - if (profile == null) return "Profile not configured"; +public class UpdateTransactionsTask extends AsyncTask { + protected String doInBackground(MainModel[] model) { + final Profile profile = Data.getProfile(); - String profile_uuid = profile.getUuid(); + long profile_id = profile.getId(); Data.backgroundTaskStarted(); try { - ArrayList newList = new ArrayList<>(); - String sql; String[] params; - if (filterAccName[0] == null) { - sql = "SELECT id, date FROM transactions WHERE profile=? ORDER BY date desc, id " + - "desc"; - params = new String[]{profile_uuid}; + final String accFilter = model[0].getAccountFilter() + .getValue(); + if (accFilter == null) { + sql = "SELECT id, year, month, day FROM transactions WHERE profile_id=? ORDER BY " + + "year desc, month desc, day desc, id desc"; + params = new String[]{String.valueOf(profile_id)}; } 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" + - ".amount <> 0 ORDER BY tr.date desc, tr.id desc"; - params = new String[]{profile_uuid, filterAccName[0]}; + sql = "SELECT distinct tr.id, tr.year, tr.month, tr.day from transactions tr " + + "JOIN transaction_accounts ta ON ta.transaction_id=tr.id WHERE tr" + + ".profile_id=? and ta.account_name LIKE ?||'%' AND ta.amount <> 0 ORDER " + + "BY tr.year desc, tr.month desc, tr.day desc, tr.id " + "desc"; + params = new String[]{String.valueOf(profile_id), accFilter}; } debug("UTT", sql); + TransactionAccumulator accumulator = new TransactionAccumulator(model[0]); + SQLiteDatabase db = App.getDatabase(); - String lastDateString = Globals.formatLedgerDate(new Date()); - Date lastDate = Globals.parseLedgerDate(lastDateString); - boolean odd = true; try (Cursor cursor = db.rawQuery(sql, params)) { while (cursor.moveToNext()) { - if (isCancelled()) return null; - - int transaction_id = cursor.getInt(0); - String dateString = cursor.getString(1); - Date date = Globals.parseLedgerDate(dateString); + if (isCancelled()) + return null; - if (!lastDateString.equals(dateString)) { - boolean showMonth = (date.getMonth() != lastDate.getMonth() || - date.getYear() != lastDate.getYear()); - newList.add(new TransactionListItem(date, showMonth)); - } - newList.add( - new TransactionListItem(new LedgerTransaction(transaction_id), odd)); -// debug("UTT", String.format("got transaction %d", transaction_id)); - - lastDate = date; - lastDateString = dateString; - odd = !odd; + accumulator.put(new LedgerTransaction(cursor.getInt(0)), + new SimpleDate(cursor.getInt(1), cursor.getInt(2), cursor.getInt(3))); } - Data.transactions.setList(newList); - debug("UTT", "transaction list value updated"); } + accumulator.done(); + debug("UTT", "transaction list value updated"); + return null; } - catch (ParseException e) { - return String.format("Error parsing stored date '%s'", e.getMessage()); - } finally { Data.backgroundTaskFinished(); }