Corrected bug with forecasting date bounded xacts

This commit is contained in:
John Wiegley 2010-06-13 23:41:50 -04:00
parent 526cbc4c93
commit e78af146e8
3 changed files with 57 additions and 48 deletions

View file

@ -1228,18 +1228,16 @@ void budget_posts::operator()(post_t& post)
void forecast_posts::add_post(const date_interval_t& period, post_t& post) void forecast_posts::add_post(const date_interval_t& period, post_t& post)
{ {
generate_posts::add_post(period, post); date_interval_t i(period);
if (! i.start && ! i.find_period(CURRENT_DATE()))
return;
// Advance the period's interval until it is at or beyond the current date. generate_posts::add_post(i, post);
date_interval_t& i = pending_posts.back().first;
if (! i.start) { // Advance the period's interval until it is at or beyond the current
if (! i.find_period(CURRENT_DATE())) // date.
throw_(std::runtime_error, _("Something odd has happened")); while (*i.start < CURRENT_DATE())
++i; ++i;
} else {
while (*i.start < CURRENT_DATE())
++i;
}
} }
void forecast_posts::flush() void forecast_posts::flush()
@ -1281,6 +1279,8 @@ void forecast_posts::flush()
for (pending_posts_list::iterator i = ++pending_posts.begin(); for (pending_posts_list::iterator i = ++pending_posts.begin();
i != pending_posts.end(); i != pending_posts.end();
i++) { i++) {
assert((*i).first.start);
assert((*least).first.start);
if (*(*i).first.start < *(*least).first.start) if (*(*i).first.start < *(*least).first.start)
least = i; least = i;
} }
@ -1307,7 +1307,6 @@ void forecast_posts::flush()
} }
begin = next; begin = next;
++(*least).first;
// `post' refers to the posting defined in the period transaction. We // `post' refers to the posting defined in the period transaction. We
// make a copy of it within a temporary transaction with the payee // make a copy of it within a temporary transaction with the payee
@ -1337,6 +1336,14 @@ void forecast_posts::flush()
continue; continue;
} }
} }
// Increment the 'least', but remove it from pending_posts if it
// exceeds its own boundaries.
++(*least).first;
if (! (*least).first.start) {
pending_posts.erase(least);
continue;
}
} }
item_handler<post_t>::flush(); item_handler<post_t>::flush();

View file

@ -244,42 +244,42 @@ reg --now=2009/03/21 --forecast-while='total < $3500' books
09-Nov-30 End of November Expenses:Books $110.00 $2880.00 09-Nov-30 End of November Expenses:Books $110.00 $2880.00
09-Dec-01 December Expenses:Books $120.00 $3000.00 09-Dec-01 December Expenses:Books $120.00 $3000.00
09-Dec-31 End of December Expenses:Books $120.00 $3120.00 09-Dec-31 End of December Expenses:Books $120.00 $3120.00
09-May-01 Forecast transaction Expenses:Books $10.00 $3130.00 09-Apr-01 Forecast transaction Expenses:Books $10.00 $3130.00
09-Jun-01 Forecast transaction Expenses:Books $10.00 $3140.00 09-May-01 Forecast transaction Expenses:Books $10.00 $3140.00
09-Jul-01 Forecast transaction Expenses:Books $10.00 $3150.00 09-Jun-01 Forecast transaction Expenses:Books $10.00 $3150.00
09-Aug-01 Forecast transaction Expenses:Books $10.00 $3160.00 09-Jul-01 Forecast transaction Expenses:Books $10.00 $3160.00
09-Sep-01 Forecast transaction Expenses:Books $10.00 $3170.00 09-Aug-01 Forecast transaction Expenses:Books $10.00 $3170.00
09-Oct-01 Forecast transaction Expenses:Books $10.00 $3180.00 09-Sep-01 Forecast transaction Expenses:Books $10.00 $3180.00
09-Nov-01 Forecast transaction Expenses:Books $10.00 $3190.00 09-Oct-01 Forecast transaction Expenses:Books $10.00 $3190.00
09-Dec-01 Forecast transaction Expenses:Books $10.00 $3200.00 09-Nov-01 Forecast transaction Expenses:Books $10.00 $3200.00
10-Jan-01 Forecast transaction Expenses:Books $10.00 $3210.00 09-Dec-01 Forecast transaction Expenses:Books $10.00 $3210.00
10-Feb-01 Forecast transaction Expenses:Books $10.00 $3220.00 10-Jan-01 Forecast transaction Expenses:Books $10.00 $3220.00
10-Mar-01 Forecast transaction Expenses:Books $10.00 $3230.00 10-Feb-01 Forecast transaction Expenses:Books $10.00 $3230.00
10-Apr-01 Forecast transaction Expenses:Books $10.00 $3240.00 10-Mar-01 Forecast transaction Expenses:Books $10.00 $3240.00
10-May-01 Forecast transaction Expenses:Books $10.00 $3250.00 10-Apr-01 Forecast transaction Expenses:Books $10.00 $3250.00
10-Jun-01 Forecast transaction Expenses:Books $10.00 $3260.00 10-May-01 Forecast transaction Expenses:Books $10.00 $3260.00
10-Jul-01 Forecast transaction Expenses:Books $10.00 $3270.00 10-Jun-01 Forecast transaction Expenses:Books $10.00 $3270.00
10-Aug-01 Forecast transaction Expenses:Books $10.00 $3280.00 10-Jul-01 Forecast transaction Expenses:Books $10.00 $3280.00
10-Sep-01 Forecast transaction Expenses:Books $10.00 $3290.00 10-Aug-01 Forecast transaction Expenses:Books $10.00 $3290.00
10-Oct-01 Forecast transaction Expenses:Books $10.00 $3300.00 10-Sep-01 Forecast transaction Expenses:Books $10.00 $3300.00
10-Nov-01 Forecast transaction Expenses:Books $10.00 $3310.00 10-Oct-01 Forecast transaction Expenses:Books $10.00 $3310.00
10-Dec-01 Forecast transaction Expenses:Books $10.00 $3320.00 10-Nov-01 Forecast transaction Expenses:Books $10.00 $3320.00
11-Jan-01 Forecast transaction Expenses:Books $10.00 $3330.00 10-Dec-01 Forecast transaction Expenses:Books $10.00 $3330.00
11-Feb-01 Forecast transaction Expenses:Books $10.00 $3340.00 11-Jan-01 Forecast transaction Expenses:Books $10.00 $3340.00
11-Mar-01 Forecast transaction Expenses:Books $10.00 $3350.00 11-Feb-01 Forecast transaction Expenses:Books $10.00 $3350.00
11-Apr-01 Forecast transaction Expenses:Books $10.00 $3360.00 11-Mar-01 Forecast transaction Expenses:Books $10.00 $3360.00
11-May-01 Forecast transaction Expenses:Books $10.00 $3370.00 11-Apr-01 Forecast transaction Expenses:Books $10.00 $3370.00
11-Jun-01 Forecast transaction Expenses:Books $10.00 $3380.00 11-May-01 Forecast transaction Expenses:Books $10.00 $3380.00
11-Jul-01 Forecast transaction Expenses:Books $10.00 $3390.00 11-Jun-01 Forecast transaction Expenses:Books $10.00 $3390.00
11-Aug-01 Forecast transaction Expenses:Books $10.00 $3400.00 11-Jul-01 Forecast transaction Expenses:Books $10.00 $3400.00
11-Sep-01 Forecast transaction Expenses:Books $10.00 $3410.00 11-Aug-01 Forecast transaction Expenses:Books $10.00 $3410.00
11-Oct-01 Forecast transaction Expenses:Books $10.00 $3420.00 11-Sep-01 Forecast transaction Expenses:Books $10.00 $3420.00
11-Nov-01 Forecast transaction Expenses:Books $10.00 $3430.00 11-Oct-01 Forecast transaction Expenses:Books $10.00 $3430.00
11-Dec-01 Forecast transaction Expenses:Books $10.00 $3440.00 11-Nov-01 Forecast transaction Expenses:Books $10.00 $3440.00
12-Jan-01 Forecast transaction Expenses:Books $10.00 $3450.00 11-Dec-01 Forecast transaction Expenses:Books $10.00 $3450.00
12-Feb-01 Forecast transaction Expenses:Books $10.00 $3460.00 12-Jan-01 Forecast transaction Expenses:Books $10.00 $3460.00
12-Mar-01 Forecast transaction Expenses:Books $10.00 $3470.00 12-Feb-01 Forecast transaction Expenses:Books $10.00 $3470.00
12-Apr-01 Forecast transaction Expenses:Books $10.00 $3480.00 12-Mar-01 Forecast transaction Expenses:Books $10.00 $3480.00
12-May-01 Forecast transaction Expenses:Books $10.00 $3490.00 12-Apr-01 Forecast transaction Expenses:Books $10.00 $3490.00
>>>2 >>>2
=== 0 === 0

View file

@ -10,6 +10,8 @@ reg --forecast-while="d<[2010/03/01]" --now=2009/11/01
>>>1 >>>1
09-Nov-01 Sample Expenses:Food:Dining $20.00 $20.00 09-Nov-01 Sample Expenses:Food:Dining $20.00 $20.00
Assets $-20.00 0 Assets $-20.00 0
09-Dec-01 Forecast transaction Expenses:Food $500.00 $500.00
09-Dec-01 Forecast transaction Assets $-500.00 0
10-Jan-01 Forecast transaction Expenses:Food $500.00 $500.00 10-Jan-01 Forecast transaction Expenses:Food $500.00 $500.00
10-Jan-01 Forecast transaction Assets $-500.00 0 10-Jan-01 Forecast transaction Assets $-500.00 0
10-Feb-01 Forecast transaction Expenses:Food $500.00 $500.00 10-Feb-01 Forecast transaction Expenses:Food $500.00 $500.00