lib: postingTransformAmount, postingToCost, postingValue
This commit is contained in:
		
							parent
							
								
									2325ff4e08
								
							
						
					
					
						commit
						4a75971c6d
					
				| @ -64,10 +64,14 @@ module Hledger.Data.Posting ( | ||||
|   showPosting, | ||||
|   -- * misc. | ||||
|   showComment, | ||||
|   postingTransformAmount, | ||||
|   postingValue, | ||||
|   postingToCost, | ||||
|   tests_Posting | ||||
| ) | ||||
| where | ||||
| import Data.List | ||||
| import qualified Data.Map as M | ||||
| import Data.Maybe | ||||
| import Data.MemoUgly (memo) | ||||
| #if !(MIN_VERSION_base(4,11,0)) | ||||
| @ -342,6 +346,25 @@ aliasReplace (BasicAlias old new) a | ||||
|   | otherwise = a | ||||
| 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 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user