Skip to content

Commit 965ae21

Browse files
committed
Merge pull request #251 from fefe982/dev-split-edit
Modify splits only when transaction is saved.
2 parents 7636938 + 163be8d commit 965ae21

2 files changed

Lines changed: 32 additions & 10 deletions

File tree

app/src/org/gnucash/android/db/TransactionsDbAdapter.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import android.content.ContentValues;
2323
import android.content.Context;
2424
import android.database.Cursor;
25+
import android.database.SQLException;
2526
import android.database.sqlite.SQLiteDatabase;
2627
import android.database.sqlite.SQLiteQueryBuilder;
2728
import android.database.sqlite.SQLiteStatement;
29+
import android.text.TextUtils;
2830
import android.util.Log;
2931

3032
import org.gnucash.android.model.*;
@@ -86,16 +88,40 @@ public long addTransaction(Transaction transaction){
8688
contentValues.put(TransactionEntry.COLUMN_RECURRENCE_PERIOD, transaction.getRecurrencePeriod());
8789

8890
Log.d(TAG, "Replacing transaction in db");
89-
long rowId = mDb.replace(TransactionEntry.TABLE_NAME, null, contentValues);
91+
long rowId = -1;
92+
mDb.beginTransaction();
93+
try {
94+
rowId = mDb.replaceOrThrow(TransactionEntry.TABLE_NAME, null, contentValues);
9095

91-
if (rowId > 0){
9296
Log.d(TAG, "Adding splits for transaction");
97+
ArrayList<String> splitUIDs = new ArrayList<String>(transaction.getSplits().size());
9398
for (Split split : transaction.getSplits()) {
94-
mSplitsDbAdapter.addSplit(split);
99+
contentValues.clear();
100+
contentValues.put(SplitEntry.COLUMN_UID, split.getUID());
101+
contentValues.put(SplitEntry.COLUMN_AMOUNT, split.getAmount().absolute().toPlainString());
102+
contentValues.put(SplitEntry.COLUMN_TYPE, split.getType().name());
103+
contentValues.put(SplitEntry.COLUMN_MEMO, split.getMemo());
104+
contentValues.put(SplitEntry.COLUMN_ACCOUNT_UID, split.getAccountUID());
105+
contentValues.put(SplitEntry.COLUMN_TRANSACTION_UID, split.getTransactionUID());
106+
splitUIDs.add(split.getUID());
107+
108+
Log.d(TAG, "Replace transaction split in db");
109+
mDb.replaceOrThrow(SplitEntry.TABLE_NAME, null, contentValues);
95110
}
96111
Log.d(TAG, transaction.getSplits().size() + " splits added");
112+
113+
long deleted = mDb.delete(SplitEntry.TABLE_NAME,
114+
SplitEntry.COLUMN_TRANSACTION_UID + " = ? AND "
115+
+ SplitEntry.COLUMN_UID + " NOT IN ('" + TextUtils.join("' , '", splitUIDs) + "')",
116+
new String[]{transaction.getUID()});
117+
Log.d(TAG, deleted + " splits deleted");
118+
mDb.setTransactionSuccessful();
119+
} catch (SQLException sqle) {
120+
sqle.printStackTrace();
121+
} finally {
122+
mDb.endTransaction();
97123
}
98-
return rowId;
124+
return rowId;
99125
}
100126

101127
/**

app/src/org/gnucash/android/ui/transaction/TransactionFormFragment.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,8 @@ private void saveNewTransaction() {
671671
mTransaction.setTime(cal.getTimeInMillis());
672672
mTransaction.setNote(notes);
673673

674+
// set as not exported.
675+
mTransaction.setExported(false);
674676
//save the normal transaction first
675677
mTransactionsDbAdapter.addTransaction(mTransaction);
676678
scheduleRecurringTransaction();
@@ -760,12 +762,6 @@ public void setSplitList(List<Split> splitList, List<String> removedSplitUIDs){
760762
mAmountEditText.setEnabled(false);
761763
setAmountEditViewVisible(View.GONE);
762764
}
763-
764-
SplitsDbAdapter splitsDbAdapter = new SplitsDbAdapter(getActivity());
765-
for (String removedSplitUID : removedSplitUIDs) {
766-
splitsDbAdapter.deleteRecord(splitsDbAdapter.getID(removedSplitUID));
767-
}
768-
splitsDbAdapter.close();
769765
}
770766

771767
/**

0 commit comments

Comments
 (0)