fix: Make sure cash and conversion account types are correctly
determined when there are no explicit declarations.
This commit is contained in:
		
							parent
							
								
									36fe6bbcff
								
							
						
					
					
						commit
						a16c88b1b1
					
				| @ -349,20 +349,22 @@ journalAddAccountTypes j = j{jaccounttypes = journalAccountTypes j} | |||||||
| -- | Build a map of all known account types, explicitly declared | -- | Build a map of all known account types, explicitly declared | ||||||
| -- or inferred from the account's parent or name. | -- or inferred from the account's parent or name. | ||||||
| journalAccountTypes :: Journal -> M.Map AccountName AccountType | journalAccountTypes :: Journal -> M.Map AccountName AccountType | ||||||
| journalAccountTypes j = | journalAccountTypes j = M.fromList [(a,acctType) | (a, Just (acctType,_)) <- flatten t'] | ||||||
|   let |  | ||||||
|     t = accountNameTreeFrom $ journalAccountNames j :: Tree AccountName |  | ||||||
|     t' = settypes Nothing t :: Tree (AccountName, Maybe AccountType) |  | ||||||
|   in |  | ||||||
|     M.fromList [(a,t) | (a, Just t) <- flatten t'] |  | ||||||
|   where |   where | ||||||
|     -- Map from the top of the account tree down to the leaves, |     t = accountNameTreeFrom $ journalAccountNames j :: Tree AccountName | ||||||
|     -- propagating account types downward. |     t' = settypes Nothing t :: Tree (AccountName, Maybe (AccountType, Bool)) | ||||||
|     settypes :: Maybe AccountType -> Tree AccountName -> Tree (AccountName, Maybe AccountType) |     -- Map from the top of the account tree down to the leaves, propagating | ||||||
|     settypes mparenttype (Node a subs) = |     -- account types downward. Keep track of whether the account is declared | ||||||
|       let mtype = M.lookup a declaredtypes <|> mparenttype <|> accountNameInferType a |     -- (True), in which case the parent account should be preferred, or merely | ||||||
|       in Node (a, mtype) (map (settypes mtype) subs) |     -- inferred (False), in which case the inferred type should be preferred. | ||||||
|     declaredtypes = journalDeclaredAccountTypes j |     settypes :: Maybe (AccountType, Bool) -> Tree AccountName -> Tree (AccountName, Maybe (AccountType, Bool)) | ||||||
|  |     settypes mparenttype (Node a subs) = Node (a, mtype) (map (settypes mtype) subs) | ||||||
|  |       where | ||||||
|  |         mtype = M.lookup a declaredtypes <|> minferred | ||||||
|  |         minferred = if maybe False snd mparenttype | ||||||
|  |                        then mparenttype | ||||||
|  |                        else (,False) <$> accountNameInferType a <|> mparenttype | ||||||
|  |     declaredtypes = (,True) <$> journalDeclaredAccountTypes j | ||||||
| 
 | 
 | ||||||
| -- | Build a map of the account types explicitly declared. | -- | Build a map of the account types explicitly declared. | ||||||
| journalDeclaredAccountTypes :: Journal -> M.Map AccountName AccountType | journalDeclaredAccountTypes :: Journal -> M.Map AccountName AccountType | ||||||
|  | |||||||
| @ -75,3 +75,23 @@ account liabilities | |||||||
| 
 | 
 | ||||||
| $ hledger -f- accounts type:a | $ hledger -f- accounts type:a | ||||||
| assets | assets | ||||||
|  | 
 | ||||||
|  | # 11. type: can identify cash accounts in the default case | ||||||
|  | < | ||||||
|  | account assets | ||||||
|  | account assets:cash | ||||||
|  | 
 | ||||||
|  | $ hledger -f- accounts type:c | ||||||
|  | assets:cash | ||||||
|  | 
 | ||||||
|  | # 12. type: can identify conversion accounts in the default case | ||||||
|  | < | ||||||
|  | account equity | ||||||
|  | account equity:conversion | ||||||
|  | account equity:trading | ||||||
|  | account equity:trade | ||||||
|  | 
 | ||||||
|  | $ hledger -f- accounts type:v | ||||||
|  | equity:conversion | ||||||
|  | equity:trading | ||||||
|  | equity:trade | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user