fix: roi: use posting dates when available, honor --date2
This will not change the results computed for the typical use-case, just makes "roi" more thorough/consistent by supporting posting dates when they are provided.
This commit is contained in:
parent
1f2c11d1bc
commit
4b1919de02
@ -70,6 +70,7 @@ roi CliOpts{rawopts_=rawopts, reportspec_=rspec@ReportSpec{_rsReportOpts=ReportO
|
|||||||
|
|
||||||
let
|
let
|
||||||
ropts = _rsReportOpts rspec
|
ropts = _rsReportOpts rspec
|
||||||
|
wd = whichDate ropts
|
||||||
showCashFlow = boolopt "cashflow" rawopts
|
showCashFlow = boolopt "cashflow" rawopts
|
||||||
prettyTables = pretty_
|
prettyTables = pretty_
|
||||||
makeQuery flag = do
|
makeQuery flag = do
|
||||||
@ -83,7 +84,7 @@ roi CliOpts{rawopts_=rawopts, reportspec_=rspec@ReportSpec{_rsReportOpts=ReportO
|
|||||||
trans = dbg3 "investments" $ jtxns $ filterJournalTransactions investmentsQuery j
|
trans = dbg3 "investments" $ jtxns $ filterJournalTransactions investmentsQuery j
|
||||||
|
|
||||||
journalSpan =
|
journalSpan =
|
||||||
let dates = map transactionDate2 trans in
|
let dates = map (transactionDateOrDate2 wd) trans in
|
||||||
DateSpan (Just $ minimum dates) (Just $ addDays 1 $ maximum dates)
|
DateSpan (Just $ minimum dates) (Just $ addDays 1 $ maximum dates)
|
||||||
|
|
||||||
requestedSpan = periodAsDateSpan period_
|
requestedSpan = periodAsDateSpan period_
|
||||||
@ -121,16 +122,16 @@ roi CliOpts{rawopts_=rawopts, reportspec_=rspec@ReportSpec{_rsReportOpts=ReportO
|
|||||||
cashFlow =
|
cashFlow =
|
||||||
((map (,nullmixedamt) priceDates)++) $
|
((map (,nullmixedamt) priceDates)++) $
|
||||||
cashFlowApplyCostValue $
|
cashFlowApplyCostValue $
|
||||||
calculateCashFlow trans (And [ Not investmentsQuery
|
calculateCashFlow wd trans (And [ Not investmentsQuery
|
||||||
, Not pnlQuery
|
, Not pnlQuery
|
||||||
, Date span ] )
|
, Date span ] )
|
||||||
|
|
||||||
|
|
||||||
pnl =
|
pnl =
|
||||||
cashFlowApplyCostValue $
|
cashFlowApplyCostValue $
|
||||||
calculateCashFlow trans (And [ Not investmentsQuery
|
calculateCashFlow wd trans (And [ Not investmentsQuery
|
||||||
, pnlQuery
|
, pnlQuery
|
||||||
, Date span ] )
|
, Date span ] )
|
||||||
|
|
||||||
thisSpan = dbg3 "processing span" $
|
thisSpan = dbg3 "processing span" $
|
||||||
OneSpan spanBegin spanEnd valueBefore valueAfter cashFlow pnl
|
OneSpan spanBegin spanEnd valueBefore valueAfter cashFlow pnl
|
||||||
@ -290,9 +291,9 @@ interestSum referenceDay cf rate = sum $ map go cf
|
|||||||
where go (t,m) = realToFrac (unMix m) * rate ** (fromIntegral (referenceDay `diffDays` t) / 365)
|
where go (t,m) = realToFrac (unMix m) * rate ** (fromIntegral (referenceDay `diffDays` t) / 365)
|
||||||
|
|
||||||
|
|
||||||
calculateCashFlow :: [Transaction] -> Query -> CashFlow
|
calculateCashFlow :: WhichDate -> [Transaction] -> Query -> CashFlow
|
||||||
calculateCashFlow trans query = filter (maIsNonZero . snd) $ map go trans
|
calculateCashFlow wd trans query =
|
||||||
where go t = (transactionDate2 t, total [t] query)
|
[ (postingDateOrDate2 wd p, pamount p) | p <- filter (matchesPosting query) (concatMap realPostings trans), maIsNonZero (pamount p) ]
|
||||||
|
|
||||||
total :: [Transaction] -> Query -> MixedAmount
|
total :: [Transaction] -> Query -> MixedAmount
|
||||||
total trans query = sumPostings . filter (matchesPosting query) $ concatMap realPostings trans
|
total trans query = sumPostings . filter (matchesPosting query) $ concatMap realPostings trans
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user