summaryrefslogtreecommitdiff
path: root/derive.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2005-07-13 08:32:16 +0000
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 02:41:15 -0400
commit1f433a129fc6be6d2a94a839293a79d135c081c8 (patch)
tree0d4b9d415f6b63f42499d4e6b95bfe7a63b44cfd /derive.cc
parentdab2bfabc88d195b5fd9e04e46b33251fcf7c52b (diff)
downloadfork-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.cc26
1 files changed, 17 insertions, 9 deletions
diff --git a/derive.cc b/derive.cc
index bb029630..393c21ac 100644
--- a/derive.cc
+++ b/derive.cc
@@ -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: