]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java
whitespace
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / model / MobileLedgerProfile.java
index 9d417955dbe259040f54995d9441edb791ddfea3..65dd11084fbf007bd2dea1ad15c182781f234ff4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 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
@@ -29,12 +29,11 @@ import net.ktnx.mobileledger.App;
 import net.ktnx.mobileledger.R;
 import net.ktnx.mobileledger.async.DbOpQueue;
 import net.ktnx.mobileledger.async.SendTransactionTask;
-import net.ktnx.mobileledger.utils.Globals;
-import net.ktnx.mobileledger.utils.Logger;
 import net.ktnx.mobileledger.utils.MLDB;
 import net.ktnx.mobileledger.utils.Misc;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
@@ -60,6 +59,8 @@ public final class MobileLedgerProfile {
     // N.B. when adding new fields, update the copy-constructor below
     private FutureDates futureDates = FutureDates.None;
     private SendTransactionTask.API apiVersion = SendTransactionTask.API.auto;
+    private Calendar firstTransactionDate;
+    private Calendar lastTransactionDate;
     public MobileLedgerProfile() {
         this.uuid = String.valueOf(UUID.randomUUID());
     }
@@ -82,10 +83,12 @@ public final class MobileLedgerProfile {
         futureDates = origin.futureDates;
         apiVersion = origin.apiVersion;
         defaultCommodity = origin.defaultCommodity;
+        firstTransactionDate = origin.firstTransactionDate;
+        lastTransactionDate = origin.lastTransactionDate;
     }
     // loads all profiles into Data.profiles
     // returns the profile with the given UUID
-    public static MobileLedgerProfile loadAllFromDB(String currentProfileUUID) {
+    public static MobileLedgerProfile loadAllFromDB(@Nullable String currentProfileUUID) {
         MobileLedgerProfile result = null;
         ArrayList<MobileLedgerProfile> list = new ArrayList<>();
         SQLiteDatabase db = App.getDatabase();
@@ -268,15 +271,14 @@ public final class MobileLedgerProfile {
     public void storeAccount(SQLiteDatabase db, LedgerAccount acc) {
         // replace into is a bad idea because it would reset hidden to its default value
         // we like the default, but for new accounts only
-        db.execSQL("update accounts set level = ?, keep = 1, hidden=?, expanded=? " +
+        db.execSQL("update accounts set level = ?, keep = 1, expanded=? " +
                    "where profile=? and name = ?",
-                new Object[]{acc.getLevel(), acc.isHiddenByStar(), acc.isExpanded(), uuid,
-                             acc.getName()
+                new Object[]{acc.getLevel(), acc.isExpanded(), uuid, acc.getName()
                 });
-        db.execSQL("insert into accounts(profile, name, name_upper, parent_name, level, hidden, " +
-                   "expanded, keep) " + "select ?,?,?,?,?,?,?,1 where (select changes() = 0)",
+        db.execSQL("insert into accounts(profile, name, name_upper, parent_name, level, " +
+                   "expanded, keep) " + "select ?,?,?,?,?,?,1 where (select changes() = 0)",
                 new Object[]{uuid, acc.getName(), acc.getName().toUpperCase(), acc.getParentName(),
-                             acc.getLevel(), acc.isHiddenByStar(), acc.isExpanded()
+                             acc.getLevel(), acc.isExpanded()
                 });
 //        debug("accounts", String.format("Stored account '%s' in DB [%s]", acc.getName(), uuid));
     }
@@ -292,12 +294,11 @@ public final class MobileLedgerProfile {
         db.execSQL("DELETE from transaction_accounts WHERE profile = ? and transaction_id=?",
                 new Object[]{uuid, tr.getId()});
 
-        db.execSQL(
-                "INSERT INTO transactions(profile, id, date, description, comment, data_hash, " +
-                "keep) " +
-                "values(?,?,?,?,?,?,1)",
-                new Object[]{uuid, tr.getId(), Globals.formatLedgerDate(tr.getDate()),
-                             tr.getDescription(), tr.getComment(), tr.getDataHash()
+        db.execSQL("INSERT INTO transactions(profile, id, year, month, day, description, " +
+                   "comment, data_hash, keep) values(?,?,?,?,?,?,?,?,1)",
+                new Object[]{uuid, tr.getId(), tr.getDate().year, tr.getDate().month,
+                             tr.getDate().day, tr.getDescription(), tr.getComment(),
+                             tr.getDataHash()
                 });
 
         for (LedgerTransactionAccount item : tr.getAccounts()) {
@@ -401,16 +402,16 @@ public final class MobileLedgerProfile {
     }
     @Nullable
     public LedgerAccount tryLoadAccount(SQLiteDatabase db, String accName) {
-        try (Cursor cursor = db.rawQuery(
-                "SELECT a.hidden, a.expanded, (select 1 from accounts a2 " +
-                "where a2.profile = a.profile and a2.name like a.name||':%' limit 1) " +
-                "FROM accounts a WHERE a.profile = ? and a.name=?", new String[]{uuid, accName}))
+        try (Cursor cursor = db.rawQuery("SELECT a.expanded, (select 1 from accounts a2 " +
+                                         "where a2.profile = a.profile and a2.name like a" +
+                                         ".name||':%' limit 1) " +
+                                         "FROM accounts a WHERE a.profile = ? and a.name=?",
+                new String[]{uuid, accName}))
         {
             if (cursor.moveToFirst()) {
                 LedgerAccount acc = new LedgerAccount(accName);
-                acc.setHiddenByStar(cursor.getInt(0) == 1);
-                acc.setExpanded(cursor.getInt(1) == 1);
-                acc.setHasSubAccounts(cursor.getInt(2) == 1);
+                acc.setExpanded(cursor.getInt(0) == 1);
+                acc.setHasSubAccounts(cursor.getInt(1) == 1);
 
                 try (Cursor c2 = db.rawQuery(
                         "SELECT value, currency FROM account_values WHERE profile = ? " +
@@ -524,7 +525,7 @@ public final class MobileLedgerProfile {
             db.execSQL("delete from transactions where profile=?", pUuid);
             db.execSQL("delete from transaction_accounts where profile=?", pUuid);
             db.setTransactionSuccessful();
-            Logger.debug("wipe", String.format(Locale.ENGLISH, "Profile %s wiped out", pUuid[0]));
+            debug("wipe", String.format(Locale.ENGLISH, "Profile %s wiped out", pUuid[0]));
         }
         finally {
             db.endTransaction();
@@ -566,6 +567,12 @@ public final class MobileLedgerProfile {
             return null;
         }
     }
+    public Calendar getFirstTransactionDate() {
+        return firstTransactionDate;
+    }
+    public Calendar getLastTransactionDate() {
+        return lastTransactionDate;
+    }
     public enum FutureDates {
         None(0), OneWeek(7), TwoWeeks(14), OneMonth(30), TwoMonths(60), ThreeMonths(90),
         SixMonths(180), OneYear(365), All(-1);