Access to checkin/checkout of timelog entries
This commit is contained in:
parent
cb317f9d39
commit
cfe8142b2b
3 changed files with 27 additions and 7 deletions
13
src/post.cc
13
src/post.cc
|
|
@ -351,7 +351,14 @@ namespace {
|
|||
return post.date();
|
||||
}
|
||||
value_t get_datetime(post_t& post) {
|
||||
return post.xdata().datetime;
|
||||
return (! post.xdata().datetime.is_not_a_date_time() ?
|
||||
post.xdata().datetime : datetime_t(post.date()));
|
||||
}
|
||||
value_t get_checkin(post_t& post) {
|
||||
return post.checkin ? *post.checkin : NULL_VALUE;
|
||||
}
|
||||
value_t get_checkout(post_t& post) {
|
||||
return post.checkout ? *post.checkout : NULL_VALUE;
|
||||
}
|
||||
|
||||
template <value_t (*Func)(post_t&)>
|
||||
|
|
@ -444,6 +451,10 @@ expr_t::ptr_op_t post_t::lookup(const symbol_t::kind_t kind,
|
|||
return WRAP_FUNCTOR(get_wrapper<&get_is_calculated>);
|
||||
else if (name == "commodity")
|
||||
return WRAP_FUNCTOR(&get_commodity);
|
||||
else if (name == "checkin")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_checkin>);
|
||||
else if (name == "checkout")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_checkout>);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
|
|
|
|||
14
src/post.h
14
src/post.h
|
|
@ -61,13 +61,15 @@ public:
|
|||
#define POST_COST_VIRTUAL 0x0400 // cost is virtualized: (@)
|
||||
#define POST_ANONYMIZED 0x0800 // a temporary, anonymous posting
|
||||
|
||||
xact_t * xact; // only set for posts of regular xacts
|
||||
account_t * account;
|
||||
xact_t * xact; // only set for posts of regular xacts
|
||||
account_t * account;
|
||||
|
||||
amount_t amount; // can be null until finalization
|
||||
optional<expr_t> amount_expr;
|
||||
optional<amount_t> cost;
|
||||
optional<amount_t> assigned_amount;
|
||||
amount_t amount; // can be null until finalization
|
||||
optional<expr_t> amount_expr;
|
||||
optional<amount_t> cost;
|
||||
optional<amount_t> assigned_amount;
|
||||
optional<datetime_t> checkin;
|
||||
optional<datetime_t> checkout;
|
||||
|
||||
post_t(account_t * _account = NULL,
|
||||
flags_t _flags = ITEM_NORMAL)
|
||||
|
|
|
|||
|
|
@ -76,6 +76,11 @@ namespace {
|
|||
(_("Timelog check-out event does not match any current check-ins"));
|
||||
}
|
||||
|
||||
if (event.checkin.is_not_a_date_time())
|
||||
throw parse_error(_("Timelog check-in has no corresponding check-out"));
|
||||
if (out_event.checkin.is_not_a_date_time())
|
||||
throw parse_error(_("Timelog check-out has no corresponding check-in"));
|
||||
|
||||
if (out_event.checkin < event.checkin)
|
||||
throw parse_error
|
||||
(_("Timelog check-out date less than corresponding check-in"));
|
||||
|
|
@ -107,6 +112,8 @@ namespace {
|
|||
post_t * post = new post_t(event.account, amt, POST_VIRTUAL);
|
||||
post->set_state(item_t::CLEARED);
|
||||
post->pos = event.position;
|
||||
post->checkin = event.checkin;
|
||||
post->checkout = out_event.checkin;
|
||||
curr->add_post(post);
|
||||
event.account->add_post(post);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue