add group function to auto-insert an account code

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@1322 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas 1998-10-19 00:49:35 +00:00
parent a20bc2b30b
commit 2b174a1f1a
2 changed files with 89 additions and 26 deletions

View File

@ -351,6 +351,7 @@ xaccRemoveAccount (Account *acc)
/********************************************************************\ /********************************************************************\
\********************************************************************/ \********************************************************************/
void void
xaccInsertSubAccount( Account *adult, Account *child ) xaccInsertSubAccount( Account *adult, Account *child )
{ {
@ -467,6 +468,33 @@ xaccRecomputeGroupBalance (AccountGroup *grp)
/********************************************************************\ /********************************************************************\
\********************************************************************/ \********************************************************************/
void
xaccGroupDepthAutoCode (AccountGroup *grp)
{
int depth;
/* get the depth */
depth = xaccGroupGetDepth (grp);
if (3>depth) depth = 3;
xaccGroupAutoCode (grp, depth);
}
void
xaccGroupAutoCode (AccountGroup *grp, int depth)
{
int i;
for (i=0; i<grp->numAcc; i++) {
Account *acc = grp->account[i];
xaccAccountAutoCode (acc, depth);
xaccGroupAutoCode (acc->children, depth);
}
}
/********************************************************************\
\********************************************************************/
void void
xaccConcatGroups (AccountGroup *togrp, AccountGroup *fromgrp) xaccConcatGroups (AccountGroup *togrp, AccountGroup *fromgrp)
{ {
@ -595,4 +623,22 @@ xaccGroupGetBalance (AccountGroup * grp)
return (grp->balance); return (grp->balance);
} }
/********************************************************************\
\********************************************************************/
int
xaccGroupGetDepth (AccountGroup *grp)
{
int i, depth=0, maxdepth=0;
if (!grp) return 0;
for (i=0; i<grp->numAcc; i++) {
depth = xaccGroupGetDepth (grp->account[i]->children);
if (depth > maxdepth) maxdepth = depth;
}
maxdepth++;
return maxdepth;
}
/****************** END OF FILE *************************************/ /****************** END OF FILE *************************************/

View File

@ -36,11 +36,11 @@ void xaccFreeAccountGroup( AccountGroup *account_group );
/* /*
* The xaccConcatGroups() subroutine will move all accounts * The xaccConcatGroups() subroutine will move all accounts
* from the "from" group to the "to" group * from the "from" group to the "to" group
* *
* The xaccMergeAccounts() subroutine will go through a group, * The xaccMergeAccounts() subroutine will go through a group,
* merging all accounts that have the same name and description. * merging all accounts that have the same name and description.
* This function is useful when importing Quicken(TM) files. * This function is useful when importing Quicken(TM) files.
*/ */
void xaccConcatGroups (AccountGroup *to, AccountGroup *from); void xaccConcatGroups (AccountGroup *to, AccountGroup *from);
void xaccMergeAccounts (AccountGroup *grp); void xaccMergeAccounts (AccountGroup *grp);
@ -59,18 +59,18 @@ void xaccAccountGroupMarkSaved (AccountGroup *grp);
/* /*
* The xaccRemoveAccount() subroutine will remove the indicated * The xaccRemoveAccount() subroutine will remove the indicated
* account from its parent account group. It will NOT free the * account from its parent account group. It will NOT free the
* associated memory or otherwise alter the account: the account * associated memory or otherwise alter the account: the account
* can now be reparented to a new location. * can now be reparented to a new location.
* Note, however, that it will mark the old parents as having * Note, however, that it will mark the old parents as having
* been modified. * been modified.
* *
* The xaccRemoveGroup() subroutine will remove the indicated * The xaccRemoveGroup() subroutine will remove the indicated
* account group from its parent account. It will NOT free the * account group from its parent account. It will NOT free the
* associated memory or otherwise alter the account group: the * associated memory or otherwise alter the account group: the
* account group can now be reparented to a new location. * account group can now be reparented to a new location.
* Note, however, that it will mark the old parents as having * Note, however, that it will mark the old parents as having
* been modified. * been modified.
*/ */
void xaccRemoveAccount (Account *); void xaccRemoveAccount (Account *);
void xaccRemoveGroup (AccountGroup *); void xaccRemoveGroup (AccountGroup *);
@ -79,15 +79,18 @@ void xaccInsertSubAccount( Account *parent, Account *child );
/* /*
* The xaccGetNumAccounts() subroutine returns the number * The xaccGetNumAccounts() subroutine returns the number
* of accounts, including subaccounts, in the account group * of accounts, including subaccounts, in the account group
*
* The xaccGroupGetNumAccounts() subroutine returns the number
* of accounts in the indicated group only (children not counted).
*
* The xaccGroupGetDepth() subroutine returns the length of the
* longest tree branch. Each link between an account and its
* (non-null) children counts as one unit of length.
*/ */
int xaccGetNumAccounts (AccountGroup *grp); int xaccGetNumAccounts (AccountGroup *grp);
/*
* The xaccGroupGetNumAccounts() subroutine returns the number
* of accounts in the indicated group only (children not counted).
*/
int xaccGroupGetNumAccounts (AccountGroup *grp); int xaccGroupGetNumAccounts (AccountGroup *grp);
int xaccGroupGetDepth (AccountGroup *grp);
/* /*
* The xaccGetAccountFromID() subroutine fetches the account * The xaccGetAccountFromID() subroutine fetches the account
@ -123,19 +126,19 @@ void xaccRecomputeGroupBalance (AccountGroup *);
/* /*
* The xaccGetAccountRoot () subroutine will find the topmost * The xaccGetAccountRoot () subroutine will find the topmost
* (root) group to which this account belongs. * (root) group to which this account belongs.
*/ */
AccountGroup * xaccGetAccountRoot (Account *); AccountGroup * xaccGetAccountRoot (Account *);
/* The xaccConsolidateGrpTrans() subroutine scans through /* The xaccConsolidateGrpTrans() subroutine scans through
* all of the transactions in an account, and compares them. * all of the transactions in an account, and compares them.
* if any of them are exact duplicates, the duplicates are removed. * if any of them are exact duplicates, the duplicates are removed.
* duplicates may occur when accounts from multiple sources are * duplicates may occur when accounts from multiple sources are
* merged. Note that this can be a dangerous operation to perform * merged. Note that this can be a dangerous operation to perform
* *
* Note that this suborutine merely walks the acount group * Note that this suborutine merely walks the acount group
* tree, and calls ConsolidateTransacations on each account * tree, and calls ConsolidateTransacations on each account
*/ */
void xaccConsolidateGrpTransactions (AccountGroup *); void xaccConsolidateGrpTransactions (AccountGroup *);
@ -143,4 +146,18 @@ void xaccConsolidateGrpTransactions (AccountGroup *);
Account * xaccGroupGetAccount (AccountGroup *, int); Account * xaccGroupGetAccount (AccountGroup *, int);
double xaccGroupGetBalance (AccountGroup *); double xaccGroupGetBalance (AccountGroup *);
/*
* The xaccGroupAutoCode() method will traverse the group, automatically
* inserting account codes into those accounts whose account codes
* are blank. It uses the algorithm used in xaccAccountAutoCode()
* to pick an account code.
*
* The xaccGroupDepthAutoCode() first measures teh depth of the account
* tree, and uses that depth to pck the number of digits in the account
* code.
*/
void xaccGroupAutoCode (AccountGroup *grp, int num_digits);
void xaccGroupDepthAutoCode (AccountGroup *grp);
#endif /* __XACC_ACCOUNT_GROUP_H__ */ #endif /* __XACC_ACCOUNT_GROUP_H__ */