]> git.ktnx.net Git - mobile-ledger-staging.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java
profile methods for loading currency by name
[mobile-ledger-staging.git] / app / src / main / java / net / ktnx / mobileledger / model / MobileLedgerProfile.java
index 831dc63f0a04a558b12a15be71bc79e9cac44b9c..956878e9b12bd0065df61074b6d8001e161e39d2 100644 (file)
@@ -32,6 +32,7 @@ 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.Date;
@@ -243,7 +244,7 @@ public final class MobileLedgerProfile {
     public void storeAccountValue(SQLiteDatabase db, String name, String currency, Float amount) {
         db.execSQL("replace into account_values(profile, account, " +
                    "currency, value, keep) values(?, ?, ?, ?, 1);",
-                new Object[]{uuid, name, currency, amount});
+                new Object[]{uuid, name, Misc.emptyIsNull(currency), amount});
     }
     public void storeTransaction(SQLiteDatabase db, LedgerTransaction tr) {
         tr.fillDataHash();
@@ -262,7 +263,7 @@ public final class MobileLedgerProfile {
             db.execSQL("INSERT INTO transaction_accounts(profile, transaction_id, " +
                        "account_name, amount, currency, comment) values(?, ?, ?, ?, ?, ?)",
                     new Object[]{uuid, tr.getId(), item.getAccountName(), item.getAmount(),
-                                 item.getCurrency(), item.getComment()
+                                 Misc.nullIsEmpty(item.getCurrency()), item.getComment()
                     });
         }
 //        debug("profile", String.format("Transaction %d stored", tr.getId()));
@@ -505,6 +506,25 @@ public final class MobileLedgerProfile {
 
         return result;
     }
+    Currency loadCurrencyByName(String name) {
+        SQLiteDatabase db = App.getDatabase();
+        Currency result = tryLoadCurrencyByName(db, name);
+        if (result == null)
+            throw new RuntimeException(String.format("Unable to load currency '%s'", name));
+        return result;
+    }
+    private Currency tryLoadCurrencyByName(SQLiteDatabase db, String name) {
+        try (Cursor cursor = db.rawQuery(
+                "SELECT c.id, c.name, c.position, c.has_gap FROM currencies c WHERE c.name=?",
+                new String[]{name}))
+        {
+            if (cursor.moveToFirst()) {
+                return new Currency(cursor.getInt(0), cursor.getString(1),
+                        Currency.Position.valueOf(cursor.getInt(2)), cursor.getInt(3) == 1);
+            }
+            return null;
+        }
+    }
     public enum FutureDates {
         None(0), OneWeek(7), TwoWeeks(14), OneMonth(30), TwoMonths(60), ThreeMonths(90),
         SixMonths(180), OneYear(365), All(-1);