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=fb1bd72fd2a359c790e6611a83fe15ad827847a1;hp=b3e2e0c519793173b87f3b60dcdb666948a02960;hb=abd5a19252bf81af903c3406132030e3ad63704f;hpb=1aadcdeec93fc8892a8323735334890cd8859c80 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 b3e2e0c5..fb1bd72f 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/UpdateTransactionsTask.java @@ -1,18 +1,18 @@ /* * Copyright © 2019 Damyan Ivanov. - * This file is part of Mobile-Ledger. - * Mobile-Ledger is free software: you can distribute it and/or modify it + * 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 * the Free Software Foundation, either version 3 of the License, or * (at your opinion), any later version. * - * Mobile-Ledger is distributed in the hope that it will be useful, + * MoLe is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License terms for details. * * You should have received a copy of the GNU General Public License - * along with Mobile-Ledger. If not, see . + * along with MoLe. If not, see . */ package net.ktnx.mobileledger.async; @@ -24,46 +24,77 @@ import android.util.Log; 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 net.ktnx.mobileledger.utils.MLDB; +import java.text.ParseException; import java.util.ArrayList; -import java.util.List; +import java.util.Date; -public class UpdateTransactionsTask extends AsyncTask> { - protected List doInBackground(String[] filterAccName) { +public class UpdateTransactionsTask extends AsyncTask { + protected String doInBackground(String[] filterAccName) { + final MobileLedgerProfile profile = Data.profile.get(); + if (profile == null) return "Profile not configured"; + + String profile_uuid = profile.getUuid(); Data.backgroundTaskCount.incrementAndGet(); 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 ORDER BY date desc, id desc"; - params = null; + 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 " + - "ON ta.transaction_id=tr.id WHERE ta.account_name LIKE ?||'%' AND 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" + ".amount <> 0 ORDER BY tr.date desc, tr.id desc"; - params = filterAccName; + params = new String[]{profile_uuid, filterAccName[0]}; } - Log.d("tmp", sql); - SQLiteDatabase db = MLDB.getReadableDatabase(); + Log.d("UTT", sql); + SQLiteDatabase db = MLDB.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; - newList.add(new LedgerTransaction(cursor.getInt(0))); + int transaction_id = cursor.getInt(0); + String dateString = cursor.getString(1); + Date date = Globals.parseLedgerDate(dateString); + + 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)); +// Log.d("UTT", String.format("got transaction %d", transaction_id)); + + lastDate = date; + lastDateString = dateString; + odd = !odd; } Data.transactions.set(newList); - Log.d("transactions", "transaction value updated"); + Log.d("UTT", "transaction list value updated"); } - return newList; + return null; + } + catch (ParseException e) { + return String.format("Error parsing stored date '%s'", e.getMessage()); } finally { Data.backgroundTaskCount.decrementAndGet();