ledger/equity.cc
John Wiegley 2c10922614 Moved definition of virtual accounts into the ledger data file
itself.  They are now called "automated transactions".  Some
rearchitecting.
2003-10-04 07:48:21 +00:00

66 lines
1.8 KiB
C++

#include "ledger.h"
namespace ledger {
static void equity_entry(account * acct, regexps_map& regexps,
std::ostream& out)
{
if (! acct->balance.is_zero() &&
(regexps.empty() || matches(regexps, acct->as_str()))) {
entry opening;
opening.date = std::time(NULL);
opening.cleared = true;
opening.desc = "Opening Balance";
transaction * xact;
for (totals::const_iterator i = acct->balance.amounts.begin();
i != acct->balance.amounts.end();
i++) {
// Skip it, if there is a zero balance for the commodity
if ((*i).second->is_zero())
continue;
xact = new transaction();
xact->acct = const_cast<account *>(acct);
xact->cost = (*i).second->street();
opening.xacts.push_back(xact);
xact = new transaction();
xact->acct = main_ledger->find_account("Equity:Opening Balances");
xact->cost = (*i).second->street();
xact->cost->negate();
opening.xacts.push_back(xact);
}
opening.print(out);
}
// Display balances for all child accounts
for (accounts_map_iterator i = acct->children.begin();
i != acct->children.end();
i++)
equity_entry((*i).second, regexps, out);
}
//////////////////////////////////////////////////////////////////////
//
// Create an Equity file based on a ledger. This is used for
// archiving past years, and starting out a new year with compiled
// balances.
//
void equity_ledger(std::ostream& out, regexps_map& regexps)
{
// The account have their current totals already generated as a
// result of parsing. We just have to output those values.
// totals
for (accounts_map_iterator i = main_ledger->accounts.begin();
i != main_ledger->accounts.end();
i++)
equity_entry((*i).second, regexps, out);
}
} // namespace ledger