register: fix a Prelude.head error with reporting interval, --empty, and --depth
This commit is contained in:
		
							parent
							
								
									8937ed457d
								
							
						
					
					
						commit
						abcc831b5a
					
				| @ -7,6 +7,7 @@ A ledger-compatible @register@ command. | |||||||
| 
 | 
 | ||||||
| module Commands.Register | module Commands.Register | ||||||
| where | where | ||||||
|  | import Safe (headMay, lastMay) | ||||||
| import Ledger | import Ledger | ||||||
| import Options | import Options | ||||||
| #if __GLASGOW_HASKELL__ <= 610 | #if __GLASGOW_HASKELL__ <= 610 | ||||||
| @ -45,6 +46,7 @@ showRegisterReport opts filterspec l | |||||||
|                                Nothing -> True |                                Nothing -> True | ||||||
|                                Just e  -> (fromparse $ parsewith datedisplayexpr e) p |                                Just e  -> (fromparse $ parsewith datedisplayexpr e) p | ||||||
|                          |                          | ||||||
|  | -- XXX confusing, refactor | ||||||
| -- | Given a date span (representing a reporting interval) and a list of | -- | Given a date span (representing a reporting interval) and a list of | ||||||
| -- postings within it: aggregate the postings so there is only one per | -- postings within it: aggregate the postings so there is only one per | ||||||
| -- account, and adjust their date/description so that they will render | -- account, and adjust their date/description so that they will render | ||||||
| @ -60,17 +62,17 @@ showRegisterReport opts filterspec l | |||||||
| -- and also zero-posting accounts within the span. | -- and also zero-posting accounts within the span. | ||||||
| summarisePostingsInDateSpan :: DateSpan -> Maybe Int -> Bool -> [Posting] -> [Posting] | summarisePostingsInDateSpan :: DateSpan -> Maybe Int -> Bool -> [Posting] -> [Posting] | ||||||
| summarisePostingsInDateSpan (DateSpan b e) depth showempty ps | summarisePostingsInDateSpan (DateSpan b e) depth showempty ps | ||||||
|     | null ps && showempty = [p] |     | null ps && (isNothing b || isNothing e) = [] | ||||||
|     | null ps = [] |     | null ps && showempty = [summaryp] | ||||||
|     | otherwise = summaryps' |     | otherwise = summaryps' | ||||||
|     where |     where | ||||||
|       postingwithinfo date desc = nullposting{ptransaction=Just nulltransaction{tdate=date,tdescription=desc}} |       summaryp = summaryPosting b' ("- "++ showDate (addDays (-1) e')) | ||||||
|       p = postingwithinfo b' ("- "++ showDate (addDays (-1) e')) |       b' = fromMaybe (maybe nulldate postingDate $ headMay ps) b | ||||||
|       b' = fromMaybe (postingDate $ head ps) b |       e' = fromMaybe (maybe (addDays 1 nulldate) postingDate $ lastMay ps) e | ||||||
|       e' = fromMaybe (postingDate $ last ps) e |       summaryPosting date desc = nullposting{ptransaction=Just nulltransaction{tdate=date,tdescription=desc}} | ||||||
|       summaryps' | 
 | ||||||
|           | showempty = summaryps |       summaryps' = (if showempty then id else filter (not . isZeroMixedAmount . pamount)) summaryps | ||||||
|           | otherwise = filter (not . isZeroMixedAmount . pamount) summaryps |       summaryps = [summaryp{paccount=a,pamount=balancetoshowfor a} | a <- clippedanames] | ||||||
|       anames = sort $ nub $ map paccount ps |       anames = sort $ nub $ map paccount ps | ||||||
|       -- aggregate balances by account, like cacheLedger, then do depth-clipping |       -- aggregate balances by account, like cacheLedger, then do depth-clipping | ||||||
|       (_,_,exclbalof,inclbalof) = groupPostings ps |       (_,_,exclbalof,inclbalof) = groupPostings ps | ||||||
| @ -79,7 +81,6 @@ summarisePostingsInDateSpan (DateSpan b e) depth showempty ps | |||||||
|       d = fromMaybe 99999 $ depth |       d = fromMaybe 99999 $ depth | ||||||
|       balancetoshowfor a = |       balancetoshowfor a = | ||||||
|           (if isclipped a then inclbalof else exclbalof) (if null a then "top" else a) |           (if isclipped a then inclbalof else exclbalof) (if null a then "top" else a) | ||||||
|       summaryps = [p{paccount=a,pamount=balancetoshowfor a} | a <- clippedanames] |  | ||||||
| 
 | 
 | ||||||
| {- | | {- | | ||||||
| Show postings one per line, plus transaction info for the first posting of | Show postings one per line, plus transaction info for the first posting of | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								tests/register-depth-empty.test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								tests/register-depth-empty.test
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | -f - register --depth 1 --empty --monthly | ||||||
|  | <<< | ||||||
|  | 2010/1/1 x | ||||||
|  |   a:aa      1 | ||||||
|  |   b:bb:bbb | ||||||
|  | 
 | ||||||
|  | >>> | ||||||
|  | >>>2 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user