X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fmodel%2FLedgerTransaction.java;h=cef83169f7a35ec21b304f08eb7c0b5b9dd25983;hb=HEAD;hp=2eba45e9cd4ea1e58d243b794c59d3547b2aaa81;hpb=93545c6fbf1244fbd96ecfc50e1115dbdc25f9ae;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java b/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java index 2eba45e9..cef83169 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java @@ -17,13 +17,13 @@ package net.ktnx.mobileledger.model; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import net.ktnx.mobileledger.App; +import net.ktnx.mobileledger.db.Profile; +import net.ktnx.mobileledger.db.Transaction; +import net.ktnx.mobileledger.db.TransactionAccount; +import net.ktnx.mobileledger.db.TransactionWithAccounts; import net.ktnx.mobileledger.utils.Digest; import net.ktnx.mobileledger.utils.Globals; import net.ktnx.mobileledger.utils.SimpleDate; @@ -53,39 +53,77 @@ public class LedgerTransaction { return Float.compare(o1.getAmount(), o2.getAmount()); }; private final long profile; - private final Integer id; + private final long ledgerId; private final List accounts; + private long dbId; private SimpleDate date; private String description; private String comment; private String dataHash; private boolean dataLoaded; - public LedgerTransaction(Integer id, String dateString, String description) + public LedgerTransaction(long ledgerId, String dateString, String description) throws ParseException { - this(id, Globals.parseLedgerDate(dateString), description); + this(ledgerId, Globals.parseLedgerDate(dateString), description); + } + public LedgerTransaction(TransactionWithAccounts dbo) { + this(dbo.transaction.getLedgerId(), dbo.transaction.getProfileId()); + dbId = dbo.transaction.getId(); + date = new SimpleDate(dbo.transaction.getYear(), dbo.transaction.getMonth(), + dbo.transaction.getDay()); + description = dbo.transaction.getDescription(); + comment = dbo.transaction.getComment(); + dataHash = dbo.transaction.getDataHash(); + if (dbo.accounts != null) + for (TransactionAccount acc : dbo.accounts) { + accounts.add(new LedgerTransactionAccount(acc)); + } + dataLoaded = true; } - public LedgerTransaction(Integer id, SimpleDate date, String description, - MobileLedgerProfile profile) { + public TransactionWithAccounts toDBO() { + TransactionWithAccounts o = new TransactionWithAccounts(); + o.transaction = new Transaction(); + o.transaction.setId(dbId); + o.transaction.setProfileId(profile); + o.transaction.setLedgerId(ledgerId); + o.transaction.setYear(date.year); + o.transaction.setMonth(date.month); + o.transaction.setDay(date.day); + o.transaction.setDescription(description); + o.transaction.setComment(comment); + fillDataHash(); + o.transaction.setDataHash(dataHash); + + o.accounts = new ArrayList<>(); + int orderNo = 1; + for (LedgerTransactionAccount acc : accounts) { + TransactionAccount a = acc.toDBO(); + a.setOrderNo(orderNo++); + a.setTransactionId(dbId); + o.accounts.add(a); + } + return o; + } + public LedgerTransaction(long ledgerId, SimpleDate date, String description, Profile profile) { this.profile = profile.getId(); - this.id = id; + this.ledgerId = ledgerId; this.date = date; this.description = description; this.accounts = new ArrayList<>(); this.dataHash = null; dataLoaded = false; } - public LedgerTransaction(Integer id, SimpleDate date, String description) { - this(id, date, description, Data.getProfile()); + public LedgerTransaction(long ledgerId, SimpleDate date, String description) { + this(ledgerId, date, description, Data.getProfile()); } public LedgerTransaction(SimpleDate date, String description) { - this(null, date, description); + this(0, date, description); } - public LedgerTransaction(int id) { - this(id, (SimpleDate) null, null); + public LedgerTransaction(int ledgerId) { + this(ledgerId, (SimpleDate) null, null); } - public LedgerTransaction(int id, long profileId) { + public LedgerTransaction(long ledgerId, long profileId) { this.profile = profileId; - this.id = id; + this.ledgerId = ledgerId; this.date = null; this.description = null; this.accounts = new ArrayList<>(); @@ -126,11 +164,10 @@ public class LedgerTransaction { public void setComment(String comment) { this.comment = comment; } - public int getId() { - return id; + public long getLedgerId() { + return ledgerId; } protected void fillDataHash() { - loadData(App.getDatabase()); if (dataHash != null) return; try { @@ -138,7 +175,7 @@ public class LedgerTransaction { StringBuilder data = new StringBuilder(); data.append("ver1"); data.append(profile); - data.append(getId()); + data.append(getLedgerId()); data.append('\0'); data.append(getDescription()); data.append('\0'); @@ -164,40 +201,6 @@ public class LedgerTransaction { String.format("Unable to get instance of %s digest", DIGEST_TYPE), e); } } - public synchronized void loadData(SQLiteDatabase db) { - if (dataLoaded) - return; - - try (Cursor cTr = db.rawQuery( - "SELECT year, month, day, description, comment from transactions WHERE profile=? " + - "AND id=?", new String[]{String.valueOf(profile), String.valueOf(id)})) - { - if (cTr.moveToFirst()) { - date = new SimpleDate(cTr.getInt(0), cTr.getInt(1), cTr.getInt(2)); - description = cTr.getString(3); - comment = cTr.getString(4); - - accounts.clear(); - - try (Cursor cAcc = db.rawQuery( - "SELECT account_name, amount, currency, comment FROM " + - "transaction_accounts WHERE profile=? AND transaction_id = ?", - new String[]{String.valueOf(profile), String.valueOf(id)})) - { - while (cAcc.moveToNext()) { -// debug("transactions", -// String.format("Loaded %d: %s %1.2f %s", id, cAcc.getString(0), -// cAcc.getFloat(1), cAcc.getString(2))); - addAccount(new LedgerTransactionAccount(cAcc.getString(0), cAcc.getFloat(1), - cAcc.getString(2), cAcc.getString(3))); - } - - finishLoading(); - } - } - } - - } public String getDataHash() { fillDataHash(); return dataHash;