lib: refactor: more consistent amount precision helpers
Hledger.Data.Amount: renamed: setAmountPrecision -> amountSetPrecision setFullPrecision -> amountSetFullPrecision setMixedAmountPrecision -> mixedAmountSetPrecision added: mixedAmountSetFullPrecision
This commit is contained in:
		
							parent
							
								
									d5ed8090fa
								
							
						
					
					
						commit
						d865ec5d65
					
				| @ -83,9 +83,9 @@ module Hledger.Data.Amount ( | |||||||
|   showAmountWithZeroCommodity, |   showAmountWithZeroCommodity, | ||||||
|   showAmountDebug, |   showAmountDebug, | ||||||
|   showAmountWithoutPrice, |   showAmountWithoutPrice, | ||||||
|   setAmountPrecision, |   amountSetPrecision, | ||||||
|   withPrecision, |   withPrecision, | ||||||
|   setFullPrecision, |   amountSetFullPrecision, | ||||||
|   setAmountInternalPrecision, |   setAmountInternalPrecision, | ||||||
|   withInternalPrecision, |   withInternalPrecision, | ||||||
|   setAmountDecimalPoint, |   setAmountDecimalPoint, | ||||||
| @ -129,7 +129,8 @@ module Hledger.Data.Amount ( | |||||||
|   showMixedAmountLinesB, |   showMixedAmountLinesB, | ||||||
|   wbToText, |   wbToText, | ||||||
|   wbUnpack, |   wbUnpack, | ||||||
|   setMixedAmountPrecision, |   mixedAmountSetPrecision, | ||||||
|  |   mixedAmountSetFullPrecision, | ||||||
|   canonicaliseMixedAmount, |   canonicaliseMixedAmount, | ||||||
|   -- * misc. |   -- * misc. | ||||||
|   ltraceamount, |   ltraceamount, | ||||||
| @ -330,17 +331,17 @@ amountIsZero Amount{aquantity=q} = q == 0 | |||||||
| 
 | 
 | ||||||
| -- | Set an amount's display precision, flipped. | -- | Set an amount's display precision, flipped. | ||||||
| withPrecision :: Amount -> AmountPrecision -> Amount | withPrecision :: Amount -> AmountPrecision -> Amount | ||||||
| withPrecision = flip setAmountPrecision | withPrecision = flip amountSetPrecision | ||||||
| 
 | 
 | ||||||
| -- | Set an amount's display precision. | -- | Set an amount's display precision. | ||||||
| setAmountPrecision :: AmountPrecision -> Amount -> Amount | amountSetPrecision :: AmountPrecision -> Amount -> Amount | ||||||
| setAmountPrecision p a@Amount{astyle=s} = a{astyle=s{asprecision=p}} | amountSetPrecision p a@Amount{astyle=s} = a{astyle=s{asprecision=p}} | ||||||
| 
 | 
 | ||||||
| -- | Increase an amount's display precision, if needed, to enough decimal places | -- | Increase an amount's display precision, if needed, to enough decimal places | ||||||
| -- to show it exactly (showing all significant decimal digits, excluding trailing | -- to show it exactly (showing all significant decimal digits, excluding trailing | ||||||
| -- zeros). | -- zeros). | ||||||
| setFullPrecision :: Amount -> Amount | amountSetFullPrecision :: Amount -> Amount | ||||||
| setFullPrecision a = setAmountPrecision p a | amountSetFullPrecision a = amountSetPrecision p a | ||||||
|   where |   where | ||||||
|     p                = max displayprecision naturalprecision |     p                = max displayprecision naturalprecision | ||||||
|     displayprecision = asprecision $ astyle a |     displayprecision = asprecision $ astyle a | ||||||
| @ -841,8 +842,13 @@ ltraceamount :: String -> MixedAmount -> MixedAmount | |||||||
| ltraceamount s = traceWith (((s ++ ": ") ++).showMixedAmount) | ltraceamount s = traceWith (((s ++ ": ") ++).showMixedAmount) | ||||||
| 
 | 
 | ||||||
| -- | Set the display precision in the amount's commodities. | -- | Set the display precision in the amount's commodities. | ||||||
| setMixedAmountPrecision :: AmountPrecision -> MixedAmount -> MixedAmount | mixedAmountSetPrecision :: AmountPrecision -> MixedAmount -> MixedAmount | ||||||
| setMixedAmountPrecision p = mapMixedAmount (setAmountPrecision p) | mixedAmountSetPrecision p = mapMixedAmount (amountSetPrecision p) | ||||||
|  | 
 | ||||||
|  | -- | In each component amount, increase the display precision sufficiently | ||||||
|  | -- to render it exactly (showing all significant decimal digits). | ||||||
|  | mixedAmountSetFullPrecision :: MixedAmount -> MixedAmount | ||||||
|  | mixedAmountSetFullPrecision = mapMixedAmount amountSetFullPrecision | ||||||
| 
 | 
 | ||||||
| mixedAmountStripPrices :: MixedAmount -> MixedAmount | mixedAmountStripPrices :: MixedAmount -> MixedAmount | ||||||
| mixedAmountStripPrices = mapMixedAmount (\a -> a{aprice=Nothing}) | mixedAmountStripPrices = mapMixedAmount (\a -> a{aprice=Nothing}) | ||||||
|  | |||||||
| @ -1278,7 +1278,7 @@ journalApplyAliases aliases j = | |||||||
| --     [ "P" | --     [ "P" | ||||||
| --     , showDate (pddate pd) | --     , showDate (pddate pd) | ||||||
| --     , T.unpack (pdcommodity pd) | --     , T.unpack (pdcommodity pd) | ||||||
| --     , (showAmount . setAmountPrecision maxprecision) (pdamount pd | --     , (showAmount . amountSetPrecision maxprecision) (pdamount pd | ||||||
| --     ) | --     ) | ||||||
| --     ] | --     ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -182,7 +182,7 @@ entryp = do | |||||||
|         tstatus    = Cleared, |         tstatus    = Cleared, | ||||||
|         tpostings  = [ |         tpostings  = [ | ||||||
|           nullposting{paccount=a |           nullposting{paccount=a | ||||||
|                      ,pamount=Mixed [setAmountPrecision (Precision 2) $ num hours]  -- don't assume hours; do set precision to 2 |                      ,pamount=Mixed [amountSetPrecision (Precision 2) $ num hours]  -- don't assume hours; do set precision to 2 | ||||||
|                      ,ptype=VirtualPosting |                      ,ptype=VirtualPosting | ||||||
|                      ,ptransaction=Just t |                      ,ptransaction=Just t | ||||||
|                      } |                      } | ||||||
|  | |||||||
| @ -72,7 +72,7 @@ tsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec@ReportSpec{ | |||||||
|     _          -> [maincontent] |     _          -> [maincontent] | ||||||
|   where |   where | ||||||
|     -- as with print, show amounts with all of their decimal places |     -- as with print, show amounts with all of their decimal places | ||||||
|     t = transactionMapPostingAmounts setFullPrecision t' |     t = transactionMapPostingAmounts amountSetFullPrecision t' | ||||||
|     maincontent = Widget Greedy Greedy $ do |     maincontent = Widget Greedy Greedy $ do | ||||||
|       let |       let | ||||||
|         prices = journalPriceOracle (infer_value_ ropts) j |         prices = journalPriceOracle (infer_value_ ropts) j | ||||||
|  | |||||||
| @ -373,7 +373,7 @@ amountAndCommentWizard PrevInput{..} EntryState{..} = do | |||||||
|       balancingamt = negate $ sum $ map pamount realps where realps = filter isReal esPostings |       balancingamt = negate $ sum $ map pamount realps where realps = filter isReal esPostings | ||||||
|       balancingamtfirstcommodity = Mixed $ take 1 $ amounts balancingamt |       balancingamtfirstcommodity = Mixed $ take 1 $ amounts balancingamt | ||||||
|       showamt = |       showamt = | ||||||
|         showMixedAmount . setMixedAmountPrecision |         showMixedAmount . mixedAmountSetPrecision | ||||||
|                   -- what should this be ? |                   -- what should this be ? | ||||||
|                   -- 1 maxprecision (show all decimal places or none) ? |                   -- 1 maxprecision (show all decimal places or none) ? | ||||||
|                   -- 2 maxprecisionwithpoint (show all decimal places or .0 - avoids some but not all confusion with thousands separators) ? |                   -- 2 maxprecisionwithpoint (show all decimal places or .0 - avoids some but not all confusion with thousands separators) ? | ||||||
|  | |||||||
| @ -93,7 +93,7 @@ close CliOpts{rawopts_=rawopts, reportspec_=rspec} j = do | |||||||
| 
 | 
 | ||||||
|     -- since balance assertion amounts are required to be exact, the |     -- since balance assertion amounts are required to be exact, the | ||||||
|     -- amounts in opening/closing transactions should be too (#941, #1137) |     -- amounts in opening/closing transactions should be too (#941, #1137) | ||||||
|     precise = setFullPrecision |     precise = amountSetFullPrecision | ||||||
| 
 | 
 | ||||||
|     -- interleave equity postings next to the corresponding closing posting, or put them all at the end ? |     -- interleave equity postings next to the corresponding closing posting, or put them all at the end ? | ||||||
|     interleaved = boolopt "interleaved" rawopts |     interleaved = boolopt "interleaved" rawopts | ||||||
|  | |||||||
| @ -60,7 +60,7 @@ print' opts j = do | |||||||
|   -- that. For now we try to reverse it by increasing all amounts' decimal places  |   -- that. For now we try to reverse it by increasing all amounts' decimal places  | ||||||
|   -- sufficiently to show the amount exactly. The displayed amounts may have minor |   -- sufficiently to show the amount exactly. The displayed amounts may have minor | ||||||
|   -- differences from the originals, such as trailing zeroes added. |   -- differences from the originals, such as trailing zeroes added. | ||||||
|   let j' = journalMapPostingAmounts setFullPrecision j |   let j' = journalMapPostingAmounts amountSetFullPrecision j | ||||||
|   case maybestringopt "match" $ rawopts_ opts of |   case maybestringopt "match" $ rawopts_ opts of | ||||||
|     Nothing   -> printEntries opts j' |     Nothing   -> printEntries opts j' | ||||||
|     Just desc -> printMatch opts j' $ T.pack desc |     Just desc -> printMatch opts j' $ T.pack desc | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user