diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index 1ef2bde60c..1ca3a25e39 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -1051,5 +1051,34 @@ xaccSplitGetSharePrice (Split * split) return (split->share_price); } +/********************************************************************\ +\********************************************************************/ + +Account * +xaccGetAccountByName (Transaction *trans, const char * name) +{ + Split *s; + Account *acc; + int i; + + if (!trans) return NULL; + if (!name) return NULL; + + /* walk through the splits, looking for one, any one, that has a parent account */ + i = 0; + s = trans->splits[0]; + while (s) { + acc = s->acc; + if (acc) break; + i++; + s = trans->splits[i]; + } + + if (!acc) return 0x0; + + acc = xaccGetPeerAccountFromName (acc, name); + return acc; +} + /************************ END OF ************************************\ \************************* FILE *************************************/ diff --git a/src/engine/Transaction.h b/src/engine/Transaction.h index f71160a3c9..e912903679 100644 --- a/src/engine/Transaction.h +++ b/src/engine/Transaction.h @@ -126,6 +126,7 @@ char * xaccTransGetNum (Transaction *); char * xaccTransGetDescription (Transaction *); time_t xaccTransGetDate (Transaction *); +/* ------------- splits --------------- */ /* return the number of splits */ int xaccTransCountSplits (Transaction *trans); @@ -221,4 +222,11 @@ int xaccSplitOrder (Split **sa, Split **sb); */ int xaccCountTransactions (Transaction **tarray); +/* + * convenience routine that is essentially identical to + * xaccGetPeerrAccountFromName, except that it accepts the handy + * transaction as root. + */ +Account * xaccGetAccountByName (Transaction *, const char *); + #endif /* __XACC_TRANSACTION_H__ */