X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fmodel%2FMobileLedgerProfile.java;h=a12582714c73721922bfdd69eef197d8b4ad5764;hp=a279f34f0b45fa38a9230822f967a208a93895e4;hb=302e6c48325c2069a632e770a79cdef5ec2bb945;hpb=0fc2ddc465cd9b9314ae336e69535020a96a7fbc diff --git a/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java b/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java index a279f34f..a1258271 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java @@ -17,16 +17,22 @@ package net.ktnx.mobileledger.model; +import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; +import android.util.SparseArray; +import net.ktnx.mobileledger.App; +import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.async.DbOpQueue; import net.ktnx.mobileledger.utils.Globals; +import net.ktnx.mobileledger.utils.Logger; import net.ktnx.mobileledger.utils.MLDB; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.UUID; import androidx.annotation.NonNull; @@ -45,6 +51,7 @@ public final class MobileLedgerProfile { private String authPassword; private int themeId; private int orderNo = -1; + private FutureDates futureDates = FutureDates.None; public MobileLedgerProfile() { this.uuid = String.valueOf(UUID.randomUUID()); } @@ -62,16 +69,17 @@ public final class MobileLedgerProfile { authPassword = origin.authPassword; themeId = origin.themeId; orderNo = origin.orderNo; + futureDates = origin.futureDates; } // loads all profiles into Data.profiles // returns the profile with the given UUID public static MobileLedgerProfile loadAllFromDB(String currentProfileUUID) { MobileLedgerProfile result = null; ArrayList list = new ArrayList<>(); - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); try (Cursor cursor = db.rawQuery("SELECT uuid, name, url, use_authentication, auth_user, " + "auth_password, permit_posting, theme, order_no, " + - "preferred_accounts_filter FROM " + + "preferred_accounts_filter, future_dates FROM " + "profiles order by order_no", null)) { while (cursor.moveToNext()) { @@ -85,6 +93,7 @@ public final class MobileLedgerProfile { item.setThemeId(cursor.getInt(7)); item.orderNo = cursor.getInt(8); item.setPreferredAccountsFilter(cursor.getString(9)); + item.setFutureDates(cursor.getInt(10)); list.add(item); if (item.getUuid().equals(currentProfileUUID)) result = item; } @@ -93,7 +102,7 @@ public final class MobileLedgerProfile { return result; } public static void storeProfilesOrder() { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); db.beginTransaction(); try { int orderNo = 0; @@ -109,6 +118,15 @@ public final class MobileLedgerProfile { db.endTransaction(); } } + public FutureDates getFutureDates() { + return futureDates; + } + public void setFutureDates(int anInt) { + futureDates = FutureDates.valueOf(anInt); + } + public void setFutureDates(FutureDates futureDates) { + this.futureDates = futureDates; + } public String getPreferredAccountsFilter() { return preferredAccountsFilter; } @@ -170,7 +188,7 @@ public final class MobileLedgerProfile { this.authPassword = authPassword; } public void storeInDB() { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); db.beginTransaction(); try { // debug("profiles", String.format("Storing profile in DB: uuid=%s, name=%s, " + @@ -179,12 +197,12 @@ public final class MobileLedgerProfile { // permitPosting ? "TRUE" : "FALSE", authEnabled ? "TRUE" : "FALSE", themeId)); db.execSQL("REPLACE INTO profiles(uuid, name, permit_posting, url, " + "use_authentication, auth_user, " + - "auth_password, theme, order_no, preferred_accounts_filter) " + - "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "auth_password, theme, order_no, preferred_accounts_filter, future_dates) " + + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{uuid, name, permitPosting, url, authEnabled, authEnabled ? authUserName : null, authEnabled ? authPassword : null, themeId, orderNo, - preferredAccountsFilter + preferredAccountsFilter, futureDates.toInt() }); db.setTransactionSuccessful(); } @@ -200,9 +218,8 @@ public final class MobileLedgerProfile { new Object[]{acc.getLevel(), acc.isHiddenByStar(), 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, hidden, " + + "expanded, keep) " + "select ?,?,?,?,?,?,?,1 where (select changes() = 0)", new Object[]{uuid, acc.getName(), acc.getName().toUpperCase(), acc.getParentName(), acc.getLevel(), acc.isHiddenByStar(), acc.isExpanded() }); @@ -236,7 +253,7 @@ public final class MobileLedgerProfile { // debug("profile", String.format("Transaction %d stored", tr.getId())); } public String getOption(String name, String default_value) { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); try (Cursor cursor = db.rawQuery("select value from options where profile = ? and name=?", new String[]{uuid, name})) { @@ -287,7 +304,7 @@ public final class MobileLedgerProfile { setOption(name, String.valueOf(value)); } public void removeFromDB() { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); debug("db", String.format("removing profile %s from DB", uuid)); db.beginTransaction(); try { @@ -297,6 +314,7 @@ public final class MobileLedgerProfile { db.execSQL("delete from account_values where profile=?", uuid_param); db.execSQL("delete from transactions where profile=?", uuid_param); db.execSQL("delete from transaction_accounts where profile=?", uuid_param); + db.execSQL("delete from options where profile=?", uuid_param); db.setTransactionSuccessful(); } finally { @@ -305,12 +323,12 @@ public final class MobileLedgerProfile { } @NonNull public LedgerAccount loadAccount(String name) { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); return loadAccount(db, name); } @Nullable public LedgerAccount tryLoadAccount(String acct_name) { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); return tryLoadAccount(db, acct_name); } @NonNull @@ -350,7 +368,7 @@ public final class MobileLedgerProfile { } public LedgerTransaction loadTransaction(int transactionId) { LedgerTransaction tr = new LedgerTransaction(transactionId, this.uuid); - tr.loadData(MLDB.getDatabase()); + tr.loadData(App.getDatabase()); return tr; } @@ -401,7 +419,7 @@ public final class MobileLedgerProfile { } public List loadChildAccountsOf(LedgerAccount acc) { List result = new ArrayList<>(); - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); try (Cursor c = db.rawQuery( "SELECT a.name FROM accounts a WHERE a.profile = ? and a.name like ?||':%'", new String[]{uuid, acc.getName()})) @@ -419,7 +437,7 @@ public final class MobileLedgerProfile { ArrayList visibleList = new ArrayList<>(); visibleList.add(acc); - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); try (Cursor c = db.rawQuery( "SELECT a.name FROM accounts a WHERE a.profile = ? and a.name like ?||':%'", new String[]{uuid, acc.getName()})) @@ -436,7 +454,7 @@ public final class MobileLedgerProfile { return result; } public void wipeAllData() { - SQLiteDatabase db = MLDB.getDatabase(); + SQLiteDatabase db = App.getDatabase(); db.beginTransaction(); try { String[] pUuid = new String[]{uuid}; @@ -446,9 +464,50 @@ 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])); } finally { db.endTransaction(); } } + public enum FutureDates { + None(0), OneMonth(30), TwoMonths(60), ThreeMonths(90), SixMonths(180), OneYear(365), + All(-1); + private static SparseArray map = new SparseArray<>(); + + static { + for (FutureDates item : FutureDates.values()) { + map.put(item.value, item); + } + } + + private int value; + FutureDates(int value) { + this.value = value; + } + public static FutureDates valueOf(int i) { + return map.get(i, None); + } + public int toInt() { + return this.value; + } + public String getText(Resources resources) { + switch (value) { + case 30: + return resources.getString(R.string.future_dates_30); + case 60: + return resources.getString(R.string.future_dates_60); + case 90: + return resources.getString(R.string.future_dates_90); + case 180: + return resources.getString(R.string.future_dates_180); + case 365: + return resources.getString(R.string.future_dates_365); + case -1: + return resources.getString(R.string.future_dates_all); + default: + return resources.getString(R.string.future_dates_none); + } + } + } }