lib: postingTransformAmount, postingToCost, postingValue
This commit is contained in:
parent
2325ff4e08
commit
4a75971c6d
@ -64,10 +64,14 @@ module Hledger.Data.Posting (
|
|||||||
showPosting,
|
showPosting,
|
||||||
-- * misc.
|
-- * misc.
|
||||||
showComment,
|
showComment,
|
||||||
|
postingTransformAmount,
|
||||||
|
postingValue,
|
||||||
|
postingToCost,
|
||||||
tests_Posting
|
tests_Posting
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import qualified Data.Map as M
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.MemoUgly (memo)
|
import Data.MemoUgly (memo)
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
@ -342,6 +346,25 @@ aliasReplace (BasicAlias old new) a
|
|||||||
| otherwise = a
|
| otherwise = a
|
||||||
aliasReplace (RegexAlias re repl) a = T.pack $ regexReplaceCIMemo re repl $ T.unpack a -- XXX
|
aliasReplace (RegexAlias re repl) a = T.pack $ regexReplaceCIMemo re repl $ T.unpack a -- XXX
|
||||||
|
|
||||||
|
-- | Apply a transform function to this posting's amount.
|
||||||
|
postingTransformAmount :: (MixedAmount -> MixedAmount) -> Posting -> Posting
|
||||||
|
postingTransformAmount f p@Posting{pamount=a} = p{pamount=f a}
|
||||||
|
|
||||||
|
-- | Convert this posting's amount to market value in its default
|
||||||
|
-- valuation commodity on the given date using the given market prices.
|
||||||
|
-- If no default valuation commodity can be found, amounts are left unchanged.
|
||||||
|
-- The prices are expected to be in parse order.
|
||||||
|
postingValue :: [MarketPrice] -> Day -> Posting -> Posting
|
||||||
|
postingValue prices d p = postingTransformAmount (mixedAmountValue prices' d) p
|
||||||
|
where
|
||||||
|
-- prices are in parse order - sort into date then parse order,
|
||||||
|
-- & reversed for quick lookup of the latest price.
|
||||||
|
prices' = reverse $ sortOn mpdate prices
|
||||||
|
|
||||||
|
-- | Convert this posting's amount to cost, and apply the appropriate amount styles.
|
||||||
|
postingToCost :: M.Map CommoditySymbol AmountStyle -> Posting -> Posting
|
||||||
|
postingToCost styles p@Posting{pamount=a} = p{pamount=mixedAmountToCost styles a}
|
||||||
|
|
||||||
|
|
||||||
-- tests
|
-- tests
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user