Skip to content

Commit 7636938

Browse files
committed
Merge pull request #245 from fefe982/dev-del-acct
Delete all splits of a transaction when the transaction is deleted (not just those from the referencing account)
2 parents 2bc0c39 + dc5a365 commit 7636938

4 files changed

Lines changed: 30 additions & 12 deletions

File tree

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,25 @@ public boolean destructiveDeleteAccount(long rowId){
279279
}
280280
}
281281
}
282+
// TODO: with "ON DELETE CASCADE", the first two delete will not be necessary.
283+
// deleteRecord(AccountEntry.TABLE_NAME, rowId); will delete related
284+
// transactions and splits
282285
//delete splits in this account
283286
mDb.delete(SplitEntry.TABLE_NAME,
284-
SplitEntry.COLUMN_ACCOUNT_UID + "=?",
287+
SplitEntry.COLUMN_TRANSACTION_UID + " IN ( SELECT DISTINCT "
288+
+ TransactionEntry.TABLE_NAME + "_" + TransactionEntry.COLUMN_UID
289+
+ " FROM trans_split_acct WHERE "
290+
+ AccountEntry.TABLE_NAME + "_" + AccountEntry.COLUMN_UID
291+
+ " = ? )",
285292
new String[]{getAccountUID(rowId)});
293+
// delete empty transactions
294+
// trans_split_acct is an inner joint, empty transactions will
295+
// not be selected in this view
296+
mDb.delete(TransactionEntry.TABLE_NAME,
297+
TransactionEntry.COLUMN_UID + " NOT IN ( SELECT DISTINCT "
298+
+ TransactionEntry.TABLE_NAME + "_" + TransactionEntry.COLUMN_UID
299+
+ " FROM trans_split_acct )",
300+
null);
286301
deleteRecord(AccountEntry.TABLE_NAME, rowId);
287302
mDb.setTransactionSuccessful();
288303
return true;

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -515,13 +515,19 @@ public long getTransactionID(String transactionUID){
515515
* @param transactionId Database record ID of the transaction
516516
* @return <code>true</code> if at least one split was deleted, <code>false</code> otherwise.
517517
*/
518-
public boolean deleteSplitsForTransaction(long transactionId){
518+
public boolean deleteSplitsForTransaction(long transactionId) {
519519
String trxUID = getTransactionUID(transactionId);
520-
boolean result = mDb.delete(SplitEntry.TABLE_NAME,
521-
SplitEntry.COLUMN_TRANSACTION_UID + "=?",
522-
new String[]{trxUID}) > 0;
523-
result &= deleteTransaction(transactionId);
524-
return result;
520+
mDb.beginTransaction();
521+
try {
522+
mDb.delete(SplitEntry.TABLE_NAME,
523+
SplitEntry.COLUMN_TRANSACTION_UID + "=?",
524+
new String[]{trxUID});
525+
boolean result = deleteTransaction(transactionId);
526+
mDb.setTransactionSuccessful();
527+
return result;
528+
} finally {
529+
mDb.endTransaction();
530+
}
525531
}
526532

527533
/**

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,7 @@ public String getUID(long transactionId){
439439
@Override
440440
public boolean deleteRecord(long rowId){
441441
Log.d(TAG, "Delete transaction with record Id: " + rowId);
442-
return mSplitsDbAdapter.deleteSplitsForTransaction(rowId) &&
443-
deleteRecord(TransactionEntry.TABLE_NAME, rowId);
442+
return mSplitsDbAdapter.deleteSplitsForTransaction(rowId);
444443
}
445444

446445
/**

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,9 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
117117
return true;
118118

119119
case R.id.context_menu_delete:
120-
SplitsDbAdapter splitsDbAdapter = new SplitsDbAdapter(getActivity());
121120
for (long id : getListView().getCheckedItemIds()) {
122-
splitsDbAdapter.deleteSplitsForTransactionAndAccount(mTransactionsDbAdapter.getUID(id), mAccountUID);
121+
mTransactionsDbAdapter.deleteRecord(id);
123122
}
124-
splitsDbAdapter.close();
125123
refresh();
126124
mode.finish();
127125
WidgetConfigurationActivity.updateAllWidgets(getActivity());

0 commit comments

Comments
 (0)