preliminary single-account register report
This commit is contained in:
		
							parent
							
								
									d2e6b8cbae
								
							
						
					
					
						commit
						94709e5139
					
				| @ -119,6 +119,9 @@ virtualPostings = filter isVirtual . tpostings | |||||||
| balancedVirtualPostings :: Transaction -> [Posting] | balancedVirtualPostings :: Transaction -> [Posting] | ||||||
| balancedVirtualPostings = filter isBalancedVirtual . tpostings | balancedVirtualPostings = filter isBalancedVirtual . tpostings | ||||||
| 
 | 
 | ||||||
|  | transactionsPostings :: [Transaction] -> [Posting] | ||||||
|  | transactionsPostings = concat . map tpostings | ||||||
|  | 
 | ||||||
| -- | Get the sums of a transaction's real, virtual, and balanced virtual postings. | -- | Get the sums of a transaction's real, virtual, and balanced virtual postings. | ||||||
| transactionPostingBalances :: Transaction -> (MixedAmount,MixedAmount,MixedAmount) | transactionPostingBalances :: Transaction -> (MixedAmount,MixedAmount,MixedAmount) | ||||||
| transactionPostingBalances t = (sumPostings $ realPostings t | transactionPostingBalances t = (sumPostings $ realPostings t | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ module Hledger.Cli.Register ( | |||||||
|  ,RegisterReportItem |  ,RegisterReportItem | ||||||
|  ,register |  ,register | ||||||
|  ,registerReport |  ,registerReport | ||||||
|  |  ,accountRegisterReport | ||||||
|  ,registerReportAsText |  ,registerReportAsText | ||||||
|  ,showPostingWithBalanceForVty |  ,showPostingWithBalanceForVty | ||||||
|  ,tests_Hledger_Cli_Register |  ,tests_Hledger_Cli_Register | ||||||
| @ -79,8 +80,11 @@ registerReportItemAsText _ (dd, p, b) = concatTopPadded [datedesc, pstr, " ", ba | |||||||
| showPostingWithBalanceForVty showtxninfo p b = registerReportItemAsText [] $ mkitem showtxninfo p b | showPostingWithBalanceForVty showtxninfo p b = registerReportItemAsText [] $ mkitem showtxninfo p b | ||||||
| 
 | 
 | ||||||
| -- | Get a register report with the specified options for this journal. | -- | Get a register report with the specified options for this journal. | ||||||
|  | -- This is a journal register report, covering the whole journal like | ||||||
|  | -- ledger's register command; for an account-specific register see | ||||||
|  | -- accountRegisterReport. | ||||||
| registerReport :: [Opt] -> FilterSpec -> Journal -> RegisterReport | registerReport :: [Opt] -> FilterSpec -> Journal -> RegisterReport | ||||||
| registerReport opts fspec j = getitems ps nullposting startbal | registerReport opts fspec j = postingsToRegisterReportItems ps nullposting startbal (+) | ||||||
|     where |     where | ||||||
|       ps | interval == NoInterval = displayableps |       ps | interval == NoInterval = displayableps | ||||||
|          | otherwise              = summarisePostingsByInterval interval depth empty filterspan displayableps |          | otherwise              = summarisePostingsByInterval interval depth empty filterspan displayableps | ||||||
| @ -95,14 +99,36 @@ registerReport opts fspec j = getitems ps nullposting startbal | |||||||
|       filterspan = datespan fspec |       filterspan = datespan fspec | ||||||
|       (interval, depth, empty) = (intervalFromOpts opts, depthFromOpts opts, Empty `elem` opts) |       (interval, depth, empty) = (intervalFromOpts opts, depthFromOpts opts, Empty `elem` opts) | ||||||
| 
 | 
 | ||||||
|  | -- | Get an account register report with the specified options for this | ||||||
|  | -- journal.  An account register report is like a postings register report | ||||||
|  | -- except it is focussed on one account only, it shows the other postings | ||||||
|  | -- in the transactions for this account, and it shows the accurate | ||||||
|  | -- historic balance for this account. | ||||||
|  | -- Does not yet handle reporting intervals. | ||||||
|  | accountRegisterReport :: [Opt] -> Journal -> Matcher -> AccountName -> RegisterReport | ||||||
|  | accountRegisterReport _ j m a = postingsToRegisterReportItems ps nullposting startbal (-) | ||||||
|  |  where | ||||||
|  |      ps = displayps | ||||||
|  |       -- ps | interval == NoInterval = displayps | ||||||
|  |       --    | otherwise              = summarisePostingsByInterval interval depth empty filterspan displayps | ||||||
|  |      -- postings to display: this account's transactions' "other" postings, filtered | ||||||
|  |      -- same matcher used on transactions then again on postings, ok I think | ||||||
|  |      ts = filter (matchesTransaction (MatchInAcct True a)) $ jtxns j | ||||||
|  |      displayps = filter (matchesPosting (MatchAnd [MatchAcct False a, m])) $ transactionsPostings ts | ||||||
|  |      -- starting balance: sum of this account's unfiltered postings prior to the specified start date, if any | ||||||
|  |      startdate = matcherStartDate m | ||||||
|  |      priormatcher = MatchAnd [MatchDate True (DateSpan Nothing startdate), MatchAcct True a] | ||||||
|  |      priorps = filter (matchesPosting priormatcher) $ journalPostings j | ||||||
|  |      startbal = sumPostings priorps | ||||||
|  | 
 | ||||||
| -- | Generate register report line items. | -- | Generate register report line items. | ||||||
| getitems :: [Posting] -> Posting -> MixedAmount -> [RegisterReportItem] | postingsToRegisterReportItems :: [Posting] -> Posting -> MixedAmount -> (MixedAmount -> MixedAmount -> MixedAmount) -> [RegisterReportItem] | ||||||
| getitems [] _ _ = [] | postingsToRegisterReportItems [] _ _ _ = [] | ||||||
| getitems (p:ps) pprev b = i:(getitems ps p b') | postingsToRegisterReportItems (p:ps) pprev b sumfn = i:(postingsToRegisterReportItems ps p b' sumfn) | ||||||
|     where |     where | ||||||
|       i = mkitem isfirst p b' |       i = mkitem isfirst p b' | ||||||
|       isfirst = ptransaction p /= ptransaction pprev |       isfirst = ptransaction p /= ptransaction pprev | ||||||
|       b' = b + pamount p |       b' = b `sumfn` pamount p | ||||||
| 
 | 
 | ||||||
| -- | Generate one register report line item, from a flag indicating | -- | Generate one register report line item, from a flag indicating | ||||||
| -- whether to include transaction info, a posting, and the current running | -- whether to include transaction info, a posting, and the current running | ||||||
| @ -252,7 +278,3 @@ tests_Hledger_Cli_Register = TestList | |||||||
|   --    ] |   --    ] | ||||||
| 
 | 
 | ||||||
|  ] |  ] | ||||||
| 
 |  | ||||||
| -------------------------------------------------------------------------------- |  | ||||||
| -- register mode 2: realistic account register |  | ||||||
| 
 |  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user