lib: redo buggy Amount refactoring
This commit is contained in:
		
							parent
							
								
									988510dde2
								
							
						
					
					
						commit
						968ae13035
					
				| @ -119,6 +119,7 @@ import Data.Time.Calendar (Day) | ||||
| import Data.Ord (comparing) | ||||
| -- import Data.Text (Text) | ||||
| import qualified Data.Text as T | ||||
| import Safe (maximumDef) | ||||
| import Test.HUnit | ||||
| import Text.Printf | ||||
| import qualified Data.Map as M | ||||
| @ -599,28 +600,31 @@ showMixedAmountDebug m | m == missingmixedamt = "(missing)" | ||||
|                        | otherwise       = printf "Mixed [%s]" as | ||||
|     where as = intercalate "\n       " $ map showAmountDebug $ amounts m | ||||
| 
 | ||||
| -- | Get the string representation of a mixed amount, but without any \@ prices. | ||||
| -- TODO these and related fns are comically complicated: | ||||
| 
 | ||||
| -- | Get the string representation of a mixed amount, without showing any transaction prices. | ||||
| showMixedAmountWithoutPrice :: MixedAmount -> String | ||||
| showMixedAmountWithoutPrice m@(Mixed as) = showMixedAmountWithoutPriceHelper showamt m | ||||
|     where | ||||
|       width = maximum $ map (length . showAmount) as | ||||
|       showamt = printf (printf "%%%ds" width) . showAmountWithoutPrice | ||||
| showMixedAmountWithoutPrice m = intercalate "\n" $ map showamt as | ||||
|   where | ||||
|     Mixed as = normaliseMixedAmountSquashPricesForDisplay $ mixedAmountStripPrices m | ||||
|     showamt = printf (printf "%%%ds" width) . showAmountWithoutPrice | ||||
|       where | ||||
|         width = maximumDef 0 $ map (length . showAmount) as | ||||
| 
 | ||||
| -- | Colour version of showMixedAmountWithoutPrice, adds ANSI codes to show | ||||
| -- any negative Amounts in red. | ||||
| -- | Colour version of showMixedAmountWithoutPrice. Any individual Amount | ||||
| -- which is negative is wrapped in ANSI codes to make it display in red. | ||||
| cshowMixedAmountWithoutPrice :: MixedAmount -> String | ||||
| cshowMixedAmountWithoutPrice m@(Mixed as) = showMixedAmountWithoutPriceHelper showamt m | ||||
|     where | ||||
|       width = maximum $ map (length . showAmount) as | ||||
|       showamt a = | ||||
|         (if isNegativeAmount a then color Dull Red else id) $ | ||||
|         printf (printf "%%%ds" width) $ showAmountWithoutPrice a | ||||
| cshowMixedAmountWithoutPrice m = intercalate "\n" $ map showamt as | ||||
|   where | ||||
|     Mixed as = normaliseMixedAmountSquashPricesForDisplay $ mixedAmountStripPrices m | ||||
|     showamt a = | ||||
|       (if isNegativeAmount a then color Dull Red else id) $ | ||||
|       printf (printf "%%%ds" width) $ showAmountWithoutPrice a | ||||
|       where | ||||
|         width = maximumDef 0 $ map (length . showAmount) as | ||||
| 
 | ||||
| showMixedAmountWithoutPriceHelper :: (Amount -> String) -> MixedAmount -> String | ||||
| showMixedAmountWithoutPriceHelper showfn m = intercalate "\n" $ map showfn as | ||||
|     where | ||||
|       (Mixed as) = normaliseMixedAmountSquashPricesForDisplay $ stripPrices m | ||||
|       stripPrices (Mixed as) = Mixed $ map stripprice as where stripprice a = a{aprice=NoPrice} | ||||
| mixedAmountStripPrices :: MixedAmount -> MixedAmount | ||||
| mixedAmountStripPrices (Mixed as) = Mixed $ map (\a -> a{aprice=NoPrice}) as | ||||
| 
 | ||||
| -- | Get the one-line string representation of a mixed amount, but without | ||||
| -- any \@ prices. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user