bal, reg: use posting date if specified, clarify posting effective date not yet supported
This commit is contained in:
		
							parent
							
								
									dfeafa6064
								
							
						
					
					
						commit
						27621515ea
					
				
							
								
								
									
										11
									
								
								MANUAL.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								MANUAL.md
									
									
									
									
									
								
							| @ -410,13 +410,14 @@ NAME=EXACTVALUE` on the command line. | ||||
| 
 | ||||
| ### Posting dates | ||||
| 
 | ||||
| You can give individual postings a different date (or dates) from their parent transaction, | ||||
| by adding posting tags `date:ACTUALDATE` and/or `date2:EFFECTIVEDATE`. | ||||
| You can give individual postings a different date from their parent | ||||
| transaction, by adding posting tag `date:ACTUALDATE`. If present, this | ||||
| date will be used by the register and balance reports. | ||||
| 
 | ||||
| For compatibility, ledger's posting date syntax is also supported | ||||
| (`[ACTUALDATE]`, `[=EFFECTIVEDATE]` or `[ACTUALDATE=EFFECTIVEDATE]` in a | ||||
| posting comment), and treated as an alterate spelling of the date and | ||||
| date2 tags. | ||||
| (`[ACTUALDATE]`, `[ACTUALDATE=EFFECTIVEDATE]` or `[=EFFECTIVEDATE]` in a | ||||
| posting comment) and treated as an alterate spelling of the date: tag. | ||||
| Note effective dates are not csurrently here are ignored, currently. | ||||
| 
 | ||||
| ### Including other files | ||||
| 
 | ||||
|  | ||||
| @ -23,6 +23,7 @@ module Hledger.Data.Posting ( | ||||
|   transactionAllTags, | ||||
|   -- * date operations | ||||
|   postingDate, | ||||
|   postingEffectiveDate, | ||||
|   isPostingInDateSpan, | ||||
|   postingsDateSpan, | ||||
|   -- * account name operations | ||||
| @ -141,6 +142,14 @@ postingDate p = fromMaybe txndate $ pdate p | ||||
|     where  | ||||
|       txndate = maybe nulldate tdate $ ptransaction p | ||||
| 
 | ||||
| -- | Get a posting's secondary (effective) date - it's own primary date if | ||||
| -- specified (can't access posting secondary dates yet), otherwise the | ||||
| -- parent transaction's effective date, otherwise the null date. | ||||
| postingEffectiveDate :: Posting -> Day | ||||
| postingEffectiveDate p = maybe nulldate transactionEffectiveDate $ ptransaction p | ||||
|   where | ||||
|     transactionEffectiveDate t = fromMaybe (tdate t) $ teffectivedate t | ||||
| 
 | ||||
| -- |Is this posting cleared? If this posting was individually marked | ||||
| -- as cleared, returns True. Otherwise, return the parent | ||||
| -- transaction's cleared status or, if there is no parent | ||||
|  | ||||
| @ -76,7 +76,7 @@ data PostingType = RegularPosting | VirtualPosting | BalancedVirtualPosting | ||||
| type Tag = (String, String) | ||||
| 
 | ||||
| data Posting = Posting { | ||||
|       pdate :: Maybe Day,  -- ^ this posting's clearing date, if different from the transaction's | ||||
|       pdate :: Maybe Day,  -- ^ this posting's date, if different from the transaction's | ||||
|       pstatus :: Bool, | ||||
|       paccount :: AccountName, | ||||
|       pamount :: MixedAmount, | ||||
|  | ||||
| @ -470,13 +470,8 @@ matchesPosting (Or qs) p = any (`matchesPosting` p) qs | ||||
| matchesPosting (And qs) p = all (`matchesPosting` p) qs | ||||
| matchesPosting (Desc r) p = regexMatchesCI r $ maybe "" tdescription $ ptransaction p | ||||
| matchesPosting (Acct r) p = regexMatchesCI r $ paccount p | ||||
| matchesPosting (Date span) p = | ||||
|     case d of Just d'  -> spanContainsDate span d' | ||||
|               Nothing -> False | ||||
|     where d = maybe Nothing (Just . tdate) $ ptransaction p | ||||
| matchesPosting (EDate span) p = | ||||
|     case postingEffectiveDate p of Just d  -> spanContainsDate span d | ||||
|                                    Nothing -> False | ||||
| matchesPosting (Date span) p = span `spanContainsDate` postingDate p | ||||
| matchesPosting (EDate span) p = span `spanContainsDate` postingEffectiveDate p | ||||
| matchesPosting (Status v) p = v == postingCleared p | ||||
| matchesPosting (Real v) p = v == isReal p | ||||
| matchesPosting (Depth d) Posting{paccount=a} = Depth d `matchesAccount` a | ||||
| @ -560,9 +555,6 @@ matchTagName pat name = pat == name | ||||
| matchTagValue :: String -> String -> Bool | ||||
| matchTagValue pat value = regexMatchesCI pat value | ||||
| 
 | ||||
| postingEffectiveDate :: Posting -> Maybe Day | ||||
| postingEffectiveDate p = maybe Nothing (Just . transactionEffectiveDate) $ ptransaction p | ||||
| 
 | ||||
| -- tests | ||||
| 
 | ||||
| tests_Hledger_Query :: Test | ||||
|  | ||||
| @ -248,7 +248,7 @@ tests_entriesReport = [ | ||||
| type PostingsReport = (String               -- label for the running balance column XXX remove | ||||
|                       ,[PostingsReportItem] -- line items, one per posting | ||||
|                       ) | ||||
| type PostingsReportItem = (Maybe (Day, String) -- transaction date and description if this is the first posting | ||||
| type PostingsReportItem = (Maybe (Day, String) -- posting date and description if this is the first posting | ||||
|                           ,Posting             -- the posting, possibly with account name depth-clipped | ||||
|                           ,MixedAmount         -- the running total after this posting | ||||
|                           ) | ||||
| @ -296,9 +296,9 @@ postingsReportItems :: [Posting] -> Posting -> Int -> MixedAmount -> (MixedAmoun | ||||
| postingsReportItems [] _ _ _ _ = [] | ||||
| postingsReportItems (p:ps) pprev d b sumfn = i:(postingsReportItems ps p d b' sumfn) | ||||
|     where | ||||
|       i = mkpostingsReportItem isfirst p' b' | ||||
|       i = mkpostingsReportItem isfirstintxn p' b' | ||||
|       p' = p{paccount=clipAccountName d $ paccount p} | ||||
|       isfirst = ptransaction p /= ptransaction pprev | ||||
|       isfirstintxn = ptransaction p /= ptransaction pprev | ||||
|       b' = b `sumfn` pamount p | ||||
| 
 | ||||
| -- | Generate one postings report line item, given a flag indicating | ||||
| @ -306,9 +306,10 @@ postingsReportItems (p:ps) pprev d b sumfn = i:(postingsReportItems ps p d b' su | ||||
| -- running balance. | ||||
| mkpostingsReportItem :: Bool -> Posting -> MixedAmount -> PostingsReportItem | ||||
| mkpostingsReportItem False p b = (Nothing, p, b) | ||||
| mkpostingsReportItem True p b = (ds, p, b) | ||||
|     where ds = case ptransaction p of Just (Transaction{tdate=da,tdescription=de}) -> Just (da,de) | ||||
|                                       Nothing -> Just (nulldate,"") | ||||
| mkpostingsReportItem True p b = (Just (date,desc), p, b) | ||||
|     where | ||||
|       date = postingDate p | ||||
|       desc = maybe "" tdescription $ ptransaction p | ||||
| 
 | ||||
| -- | Date-sort and split a list of postings into three spans - postings matched | ||||
| -- by the given display expression, and the preceding and following postings. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user