]> git.ktnx.net Git - mobile-ledger.git/commitdiff
make Currency loadable by id
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Fri, 29 Jan 2021 05:23:05 +0000 (05:23 +0000)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Fri, 29 Jan 2021 11:27:04 +0000 (11:27 +0000)
app/src/main/java/net/ktnx/mobileledger/model/Currency.java
app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java

index 5f488e28634eb4ca72a156b05371be075747c0af..1c7dbf7f81f014062c1282d55d2f9633d47abe9b 100644 (file)
@@ -76,6 +76,10 @@ public class Currency {
         MobileLedgerProfile profile = Data.getProfile();
         return profile.loadCurrencyByName(name);
     }
+    public static Currency loadById(int id) {
+        MobileLedgerProfile profile = Data.getProfile();
+        return profile.loadCurrencyById(id);
+    }
     static public boolean equal(Currency left, Currency right) {
         if (left == null) {
             return right == null;
index 0e8c04485262c6fa8c603408051807914557b039..b8085765eb069048f78cfe5621e93ef8e5887268 100644 (file)
@@ -629,6 +629,25 @@ public final class MobileLedgerProfile {
                 new AccountAndTransactionListSaver(this, accounts, transactions);
         accountAndTransactionListSaver.start();
     }
+    private Currency tryLoadCurrencyById(SQLiteDatabase db, int id) {
+        try (Cursor cursor = db.rawQuery(
+                "SELECT c.id, c.name, c.position, c.has_gap FROM currencies c WHERE c.id=?",
+                new String[]{String.valueOf(id)}))
+        {
+            if (cursor.moveToFirst()) {
+                return new Currency(cursor.getInt(0), cursor.getString(1),
+                        Currency.Position.valueOf(cursor.getString(2)), cursor.getInt(3) == 1);
+            }
+            return null;
+        }
+    }
+    public Currency loadCurrencyById(int id) {
+        SQLiteDatabase db = App.getDatabase();
+        Currency result = tryLoadCurrencyById(db, id);
+        if (result == null)
+            throw new RuntimeException(String.format("Unable to load currency with id '%d'", id));
+        return result;
+    }
 
     public enum FutureDates {
         None(0), OneWeek(7), TwoWeeks(14), OneMonth(30), TwoMonths(60), ThreeMonths(90),