]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/dao/TemplateHeaderDAO.java
methods for duplication of a template with its data
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / dao / TemplateHeaderDAO.java
index 4ffd08b44f556b2e0376a4ba9cfd944f02c99f70..2d3d7ee48884eb3012218dcb70f1322d3fb8d793 100644 (file)
@@ -89,7 +89,11 @@ public abstract class TemplateHeaderDAO {
 
     @Transaction
     @Query("SELECT * FROM templates WHERE id = :id")
-    public abstract LiveData<TemplateWithAccounts> getTemplateWithAccounts(Long id);
+    public abstract LiveData<TemplateWithAccounts> getTemplateWithAccounts(@NonNull Long id);
+
+    @Transaction
+    @Query("SELECT * FROM templates WHERE id = :id")
+    public abstract TemplateWithAccounts getTemplateWithAccountsSync(@NonNull Long id);
 
     @Transaction
     public void insertSync(TemplateWithAccounts templateWithAccounts) {
@@ -124,5 +128,22 @@ public abstract class TemplateHeaderDAO {
             }
         });
     }
+    public void duplicateTemplateWitAccounts(@NonNull Long id, @Nullable
+            AsyncResultCallback<TemplateWithAccounts> callback) {
+        AsyncTask.execute(() -> {
+            TemplateWithAccounts src = getTemplateWithAccountsSync(id);
+            TemplateWithAccounts dup = src.createDuplicate();
+            dup.header.setName(dup.header.getName());
+            dup.header.setId(insertSync(dup.header));
+            TemplateAccountDAO accDao = DB.get()
+                                          .getTemplateAccountDAO();
+            for (TemplateAccount dupAcc : dup.accounts) {
+                dupAcc.setTemplateId(dup.header.getId());
+                dupAcc.setId(accDao.insertSync(dupAcc));
+            }
+            if (callback != null)
+                new Handler(Looper.getMainLooper()).post(() -> callback.onResult(dup));
+        });
+    }
 
 }