mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
mplement ability to delete a transaction
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@486 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
8348efbfad
commit
87e4ad928f
@ -828,35 +828,63 @@ static void
|
||||
deleteCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
RegWindow *regData = (RegWindow *)cd;
|
||||
Split * split;
|
||||
Transaction *trans;
|
||||
int currow;
|
||||
|
||||
#ifdef JUNK
|
||||
if( NULL != trans)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
int num_splits;
|
||||
|
||||
/* get the current split based on cursor position */
|
||||
split = xaccGetCurrentSplit (regData->ledger);
|
||||
if (NULL == split ) return;
|
||||
|
||||
/* ask for user confirmation before performing
|
||||
* permanent daamge */
|
||||
trans = (Transaction *) split->parent;
|
||||
sprintf (buf, TRANS_DEL_MSG, trans->description);
|
||||
if (!verifyBox (toplevel, buf)) return;
|
||||
|
||||
if( verifyBox( toplevel, buf ) )
|
||||
{
|
||||
Account * cred = (Account *) (trans->credit_split.acc);
|
||||
Account * deb = (Account *) (trans->debit);
|
||||
/* if this split is the credit split, or if it
|
||||
* is the only debit split for this transaction,
|
||||
* then delete the entire transaction; otherwise,
|
||||
* delete only the split, and readjust the
|
||||
* transaction totals.
|
||||
*/
|
||||
num_splits = xaccCountSplits (trans->debit_splits);
|
||||
if ((split == &(trans->credit_split)) || (1 >= num_splits)) {
|
||||
Account *acc;
|
||||
int i = 0;
|
||||
|
||||
/* remove the transaction from both accounts */
|
||||
REMOVE_TRANS (cred, trans);
|
||||
REMOVE_TRANS (deb, trans);
|
||||
/* loop over all of the debit splits, killing each of them */
|
||||
split = trans->debit_splits[i];
|
||||
while (split) {
|
||||
acc = (Account *) (split->acc);
|
||||
xaccRemoveSplit (acc, split);
|
||||
xaccFreeSplit (split);
|
||||
|
||||
RECALC_BALANCE (deb);
|
||||
RECALC_BALANCE (cred);
|
||||
|
||||
REFRESH_REGISTER (deb);
|
||||
REFRESH_REGISTER (cred);
|
||||
|
||||
/* Delete the transaction */
|
||||
freeTransaction (trans);
|
||||
i++;
|
||||
split = trans->debit_splits[i];
|
||||
}
|
||||
|
||||
/* kill the credit split */
|
||||
acc = (Account *) (trans->credit_split.acc);
|
||||
xaccRemoveSplit (acc, &(trans->credit_split));
|
||||
xaccFreeTransaction (trans);
|
||||
|
||||
} else {
|
||||
Account *credit_acc, *debit_acc;
|
||||
debit_acc = (Account *) (split->acc);
|
||||
credit_acc = (Account *) (trans->credit_split.acc);
|
||||
|
||||
xaccTransRemoveSplit (trans, split);
|
||||
xaccTransRecomputeAmount (trans);
|
||||
|
||||
xaccRemoveSplit (debit_acc, split);
|
||||
split->acc = NULL;
|
||||
xaccFreeSplit (split);
|
||||
|
||||
accRefresh (debit_acc);
|
||||
accRefresh (credit_acc);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
|
Loading…
Reference in New Issue
Block a user