lib: auto postings are generated right after posting that triggered them (#729)

This commit is contained in:
Dmitry Astapov 2018-04-16 22:48:10 +01:00 committed by Simon Michael
parent ecf49b1e4b
commit 93814652f8
3 changed files with 34 additions and 18 deletions

View File

@ -71,8 +71,9 @@ runModifierTransaction :: Query -> ModifierTransaction -> (Transaction -> Transa
runModifierTransaction q mt = modifier where
q' = simplifyQuery $ And [q, mtvaluequery mt (error "query cannot depend on current time")]
mods = map runModifierPosting $ mtpostings mt
generatePostings ps = [m p | p <- ps, q' `matchesPosting` p, m <- mods]
modifier t@(tpostings -> ps) = t { tpostings = ps ++ generatePostings ps }
generatePostings ps = [p' | p <- ps
, p' <- if q' `matchesPosting` p then p:[ m p | m <- mods] else [p]]
modifier t@(tpostings -> ps) = t { tpostings = generatePostings ps }
-- | Extract 'Query' equivalent of 'mtvalueexpr' from 'ModifierTransaction'
--

View File

@ -15,10 +15,10 @@ hledger print -f- --auto
>>>
2016/01/01 paycheck
income:remuneration $-100
income:donations $-15
assets:bank
(liabilities:tax) $-33 ; income tax
income:donations $-15
(liabilities:tax) $-5 ; income tax
assets:bank
2016/01/01 withdraw
assets:cash $20
@ -42,15 +42,30 @@ hledger register -f- --auto
(liabilities:tax) *.33 ; income tax
>>>
2016/01/01 paycheck income:remuneration $-100 $-100
income:donations $-15 $-115
assets:bank $115 0
(liabilities:tax) $-33 $-33
(liabilities:tax) $-5 $-38
(liabilities:tax) $-33 $-133
income:donations $-15 $-148
(liabilities:tax) $-5 $-153
assets:bank $115 $-38
2016/01/01 withdraw assets:cash $20 $-18
assets:bank $-20 $-38
>>>2
>>>=0
hledger register -f- --auto
<<<
= trigger
(target) 10
2018/1/1
(trigger) 1
(target) 1 = 11 ; this assertion would not fail, auto posting will be taken into account
>>>
2018/01/01 (trigger) 1 1
(target) 10 11
(target) 1 12
>>>2
>>>=0
hledger balance -f- --auto
<<<
2016/1/1 paycheck

View File

@ -14,10 +14,10 @@ hledger rewrite -f- ^income --add-posting '(liabilities:tax) *.33 ; income tax
>>>
2016/01/01 paycheck
income:remuneration $-100
income:donations $-15
assets:bank
(liabilities:tax) $-33 ; income tax
income:donations $-15
(liabilities:tax) $-5 ; income tax
assets:bank
2016/01/01 withdraw
assets:cash $20
@ -194,25 +194,25 @@ hledger rewrite -f- date:2017/1 --add-posting 'Here comes Santa $0'
2017/01/01
expenses:food $20.00
(budget:food) $-20.00
Here comes Santa 0
expenses:leisure $15.00
(budget:misc) $-15.00
Here comes Santa 0
expenses:grocery $30.00
(budget:food) $-30.00
Here comes Santa 0
assets:cash
Here comes Santa 0
Here comes Santa 0
Here comes Santa 0
Here comes Santa 0
(budget:food) $-20.00
(budget:food) $-30.00
(budget:misc) $-15.00
2017/01/02
assets:cash $200.00
Here comes Santa 0
assets:bank
Here comes Santa 0
Here comes Santa 0
assets:bank $-1.60
expenses:fee $1.60 ; cash withdraw fee
(budget:misc) $-1.60
Here comes Santa 0
2017/02/01
assets:cash $100.00