cli: Ensure register reports are correctly aligned for negative numbers.
This uses the new showMixed* function for the register report. This fixes some misaligned negative numbers which appeared in one of the earlier commits, and adds a test for it.
This commit is contained in:
		
							parent
							
								
									162a936360
								
							
						
					
					
						commit
						a838366c9d
					
				| @ -92,8 +92,8 @@ postingsReportItemAsCsvRecord (_, _, _, p, b) = [idx,date,code,desc,acct,amt,bal | |||||||
| postingsReportAsText :: CliOpts -> PostingsReport -> String | postingsReportAsText :: CliOpts -> PostingsReport -> String | ||||||
| postingsReportAsText opts (_,items) = unlines $ map (postingsReportItemAsText opts amtwidth balwidth) items | postingsReportAsText opts (_,items) = unlines $ map (postingsReportItemAsText opts amtwidth balwidth) items | ||||||
|   where |   where | ||||||
|     amtwidth = maximumStrict $ 12 : map (strWidth . showMixedAmount . itemamt) items |     amtwidth = maximumStrict $ map (snd . showMixed showAmount (Just 12) Nothing False . itemamt) items | ||||||
|     balwidth = maximumStrict $ 12 : map (strWidth . showMixedAmount . itembal) items |     balwidth = maximumStrict $ map (snd . showMixed showAmount (Just 12) Nothing False . itembal) items | ||||||
|     itemamt (_,_,_,Posting{pamount=a},_) = a |     itemamt (_,_,_,Posting{pamount=a},_) = a | ||||||
|     itembal (_,_,_,_,a) = a |     itembal (_,_,_,_,a) = a | ||||||
| 
 | 
 | ||||||
| @ -130,15 +130,15 @@ postingsReportItemAsText opts preferredamtwidth preferredbalwidth (mdate, mendda | |||||||
|            ,"  " |            ,"  " | ||||||
|            ,fitString (Just acctwidth) (Just acctwidth) True True acct |            ,fitString (Just acctwidth) (Just acctwidth) True True acct | ||||||
|            ,"  " |            ,"  " | ||||||
|            ,fitString (Just amtwidth) (Just amtwidth) True False amtfirstline |            ,amtfirstline | ||||||
|            ,"  " |            ,"  " | ||||||
|            ,fitString (Just balwidth) (Just balwidth) True False balfirstline |            ,balfirstline | ||||||
|            ] |            ] | ||||||
|     : |     : | ||||||
|     [concat [spacer |     [concat [spacer | ||||||
|             ,fitString (Just amtwidth) (Just amtwidth) True False a |             ,a | ||||||
|             ,"  " |             ,"  " | ||||||
|             ,fitString (Just balwidth) (Just balwidth) True False b |             ,b | ||||||
|             ] |             ] | ||||||
|      | (a,b) <- zip amtrest balrest |      | (a,b) <- zip amtrest balrest | ||||||
|      ] |      ] | ||||||
| @ -178,17 +178,16 @@ postingsReportItemAsText opts preferredamtwidth preferredbalwidth (mdate, mendda | |||||||
|               BalancedVirtualPosting -> (\s -> "["++s++"]", acctwidth-2) |               BalancedVirtualPosting -> (\s -> "["++s++"]", acctwidth-2) | ||||||
|               VirtualPosting         -> (\s -> "("++s++")", acctwidth-2) |               VirtualPosting         -> (\s -> "("++s++")", acctwidth-2) | ||||||
|               _                      -> (id,acctwidth) |               _                      -> (id,acctwidth) | ||||||
|       showamt = showMixedAmountWithoutPrice (color_ . rsOpts $ reportspec_ opts) |       amt = fst $ showMixed showAmountWithoutPrice (Just amtwidth) (Just amtwidth) (color_ . rsOpts $ reportspec_ opts) $ pamount p | ||||||
|       amt = showamt $ pamount p |       bal = fst $ showMixed showAmountWithoutPrice (Just balwidth) (Just balwidth) (color_ . rsOpts $ reportspec_ opts) b | ||||||
|       bal = showamt b |  | ||||||
|       -- alternate behaviour, show null amounts as 0 instead of blank |       -- alternate behaviour, show null amounts as 0 instead of blank | ||||||
|       -- amt = if null amt' then "0" else amt' |       -- amt = if null amt' then "0" else amt' | ||||||
|       -- bal = if null bal' then "0" else bal' |       -- bal = if null bal' then "0" else bal' | ||||||
|       (amtlines, ballines) = (lines amt, lines bal) |       (amtlines, ballines) = (lines amt, lines bal) | ||||||
|       (amtlen, ballen) = (length amtlines, length ballines) |       (amtlen, ballen) = (length amtlines, length ballines) | ||||||
|       numlines = max 1 (max amtlen ballen) |       numlines = max 1 (max amtlen ballen) | ||||||
|       (amtfirstline:amtrest) = take numlines $ amtlines ++ repeat "" -- posting amount is top-aligned |       (amtfirstline:amtrest) = take numlines $ amtlines ++ repeat (replicate amtwidth ' ') -- posting amount is top-aligned | ||||||
|       (balfirstline:balrest) = take numlines $ replicate (numlines - ballen) "" ++ ballines -- balance amount is bottom-aligned |       (balfirstline:balrest) = take numlines $ replicate (numlines - ballen) (replicate balwidth ' ') ++ ballines -- balance amount is bottom-aligned | ||||||
|       spacer = replicate (totalwidth - (amtwidth + 2 + balwidth)) ' ' |       spacer = replicate (totalwidth - (amtwidth + 2 + balwidth)) ' ' | ||||||
| 
 | 
 | ||||||
| -- tests | -- tests | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								tests/register/colour.test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								tests/register/colour.test
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | 2019-1-1 | ||||||
|  |   (a)  -1.0 | ||||||
|  | 
 | ||||||
|  | 2019-1-2 | ||||||
|  |   (a)  1 | ||||||
|  | 
 | ||||||
|  | 2019-1-3 | ||||||
|  |   (a)  1 | ||||||
|  | 
 | ||||||
|  | 2019-1-4 | ||||||
|  |   (a)  1 | ||||||
|  | 
 | ||||||
|  | $ hledger -f- register --color always | ||||||
|  | 2019-01-01                      (a)                           [31m-1.0[m          [31m-1.0[m | ||||||
|  | 2019-01-02                      (a)                            1.0             0 | ||||||
|  | 2019-01-03                      (a)                            1.0           1.0 | ||||||
|  | 2019-01-04                      (a)                            1.0           2.0 | ||||||
|  | >= | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user