]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/model/LedgerTransactionAccount.java
LedgerTransactionAccount: add copy constructor
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / model / LedgerTransactionAccount.java
index 04ea9c06c43831061996d19b19fe3560b461b3c6..801e0169845f8c2ff2daedb06177eec7d62ba3d6 100644 (file)
@@ -1,35 +1,43 @@
 /*
- * Copyright © 2018 Damyan Ivanov.
- * This file is part of Mobile-Ledger.
- * Mobile-Ledger is free software: you can distribute it and/or modify it
+ * Copyright © 2019 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
  * the Free Software Foundation, either version 3 of the License, or
  * (at your opinion), any later version.
  *
- * Mobile-Ledger is distributed in the hope that it will be useful,
+ * MoLe is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU General Public License terms for details.
  *
  * You should have received a copy of the GNU General Public License
- * along with Mobile-Ledger. If not, see <https://www.gnu.org/licenses/>.
+ * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
  */
 
 package net.ktnx.mobileledger.model;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
+
+import net.ktnx.mobileledger.json.ParsedAmount;
+import net.ktnx.mobileledger.json.ParsedPosting;
+import net.ktnx.mobileledger.json.ParsedQuantity;
+import net.ktnx.mobileledger.json.ParsedStyle;
+
+import java.util.ArrayList;
 
 public class LedgerTransactionAccount {
     private String accountName;
+    private String shortAccountName;
     private float amount;
-    private boolean amountSet;
+    private boolean amountSet = false;
     private String currency;
 
     public LedgerTransactionAccount(String accountName, float amount) {
         this(accountName, amount, null);
     }
     public LedgerTransactionAccount(String accountName, float amount, String currency) {
-        this.accountName = accountName;
+        this.setAccountName(accountName);
         this.amount = amount;
         this.amountSet = true;
         this.currency = currency;
@@ -38,22 +46,27 @@ public class LedgerTransactionAccount {
     public LedgerTransactionAccount(String accountName) {
         this.accountName = accountName;
     }
+    public LedgerTransactionAccount(LedgerTransactionAccount origin) {
+        // copy constructor
+        setAccountName(origin.getAccountName());
+        if (origin.isAmountSet())
+            setAmount(origin.getAmount());
+        currency = origin.getCurrency();
+    }
 
     public String getAccountName() {
         return accountName;
     }
-    public String getShortAccountName() {
-        String result = accountName;
-        result = result.replaceAll("(?<=^|:)(.)[^:]+(?=:)", "$1");
-        return result;
-    }
-
     public void setAccountName(String accountName) {
         this.accountName = accountName;
+        shortAccountName = accountName.replaceAll("(?<=^|:)(.)[^:]+(?=:)", "$1");
+    }
+    public String getShortAccountName() {
+        return shortAccountName;
     }
-
     public float getAmount() {
-        if (!amountSet) throw new IllegalStateException("Account amount is not set");
+        if (!amountSet)
+            throw new IllegalStateException("Account amount is not set");
 
         return amount;
     }
@@ -75,7 +88,8 @@ public class LedgerTransactionAccount {
     }
     @NonNull
     public String toString() {
-        if (!amountSet) return "";
+        if (!amountSet)
+            return "";
 
         StringBuilder sb = new StringBuilder();
         if (currency != null) {
@@ -86,4 +100,25 @@ public class LedgerTransactionAccount {
 
         return sb.toString();
     }
+    public ParsedPosting asParsedPosting() {
+        ParsedPosting result = new ParsedPosting();
+        result.setPaccount(accountName);
+        ArrayList<ParsedAmount> amounts = new ArrayList<>();
+        ParsedAmount amt = new ParsedAmount();
+        amt.setAcommodity((currency == null) ? "" : currency);
+        amt.setAismultiplier(false);
+        ParsedQuantity qty = new ParsedQuantity();
+        qty.setDecimalPlaces(2);
+        qty.setDecimalMantissa(Math.round(amount * 100));
+        amt.setAquantity(qty);
+        ParsedStyle style = new ParsedStyle();
+        style.setAscommodityside('L');
+        style.setAscommodityspaced(false);
+        style.setAsprecision(2);
+        style.setAsdecimalpoint('.');
+        amt.setAstyle(style);
+        amounts.add(amt);
+        result.setPamount(amounts);
+        return result;
+    }
 }