diff options
author | John Wiegley <johnw@newartisans.com> | 2005-07-13 08:32:16 +0000 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2008-04-13 02:41:15 -0400 |
commit | 1f433a129fc6be6d2a94a839293a79d135c081c8 (patch) | |
tree | 0d4b9d415f6b63f42499d4e6b95bfe7a63b44cfd /derive.cc | |
parent | dab2bfabc88d195b5fd9e04e46b33251fcf7c52b (diff) | |
download | fork-ledger-1f433a129fc6be6d2a94a839293a79d135c081c8.tar.gz fork-ledger-1f433a129fc6be6d2a94a839293a79d135c081c8.tar.bz2 fork-ledger-1f433a129fc6be6d2a94a839293a79d135c081c8.zip |
(derive_new_entry): If the "entry" command can't figure out which
account to draw from, and if there is a "basket account" (defined with
"A" in a textual ledger), use that.
Diffstat (limited to 'derive.cc')
-rw-r--r-- | derive.cc | 26 |
1 files changed, 17 insertions, 9 deletions
@@ -45,13 +45,18 @@ entry_t * derive_new_entry(journal_t& journal, added->add_transaction(new transaction_t(**j)); } else if ((*i)[0] == '-' || std::isdigit((*i)[0])) { - if (! matching) + account_t * draw_acct; + if (matching) + draw_acct = matching->transactions.front()->account; + else if (journal.basket) + draw_acct = journal.basket; + else throw error("Could not determine the account to draw from"); transaction_t * m_xact, * xact, * first; m_xact = matching->transactions.front(); - first = xact = new transaction_t(m_xact->account, amount_t(*i++)); + first = xact = new transaction_t(draw_acct, amount_t(*i++)); added->add_transaction(xact); if (! xact->amount.commodity()) @@ -59,7 +64,7 @@ entry_t * derive_new_entry(journal_t& journal, m_xact = matching->transactions.back(); - xact = new transaction_t(m_xact->account, - first->amount); + xact = new transaction_t(draw_acct, - first->amount); added->add_transaction(xact); if (i != end) { @@ -112,13 +117,16 @@ entry_t * derive_new_entry(journal_t& journal, added->add_transaction(xact); } - if (! matching) { + account_t * draw_acct; + if (matching) + draw_acct = matching->transactions.back()->account; + else if (journal.basket) + draw_acct = journal.basket; + else throw error("Could not determine the account to draw from"); - } else { - transaction_t * xact - = new transaction_t(matching->transactions.back()->account); - added->add_transaction(xact); - } + + transaction_t * xact = new transaction_t(draw_acct); + added->add_transaction(xact); } done: |