1+ from typing import Dict , Tuple
2+
3+ import beancount .core .getters
14from beancount .core import data , account , account_types
25from beancount .parser import options
36
710__plugins__ = ('depreciate' ,)
811
912
13+ def get_depreciation_account (
14+ accounts_open_close : Dict [str , Tuple [beancount .core .data .Open , beancount .core .data .Close ]],
15+ expenses_parent : str ,
16+ asset_account : beancount .core .data .Account ,
17+ ) -> str :
18+ new_account = str .join (
19+ account .sep ,
20+ [expenses_parent , 'Depreciation' , account .sans_root (asset_account )]
21+ )
22+
23+ asset_account_open_statement = accounts_open_close .get (asset_account , None )[0 ]
24+ open_meta = asset_account_open_statement .meta
25+ depreciate_account = open_meta .get ('depreciate_account' , None )
26+
27+ if depreciate_account :
28+ return depreciate_account
29+
30+ return new_account
31+
32+
1033def depreciate (entries : data .Entries , unused_options_map , config_string = "" ):
1134 new_entries = []
1235 errors = []
1336 account_types_option = options .get_account_types (unused_options_map )
37+ accounts_open_close = beancount .core .getters .get_account_open_close (entries )
1438 for entry in entries :
1539 if isinstance (entry , data .Transaction ):
1640 selected_postings_groups = select_periodic_posting_groups (entry , 'depreciate' , errors )
@@ -19,9 +43,11 @@ def depreciate(entries: data.Entries, unused_options_map, config_string=""):
1943 for i , config , config_str in selected_postings :
2044 posting : data .Posting = entry .postings [i ]
2145 if account_types .is_account_type (account_types_option .assets , posting .account ):
22- new_account = str .join (account .sep ,
23- [account_types_option .expenses , 'Depreciation' ,
24- account .sans_root (posting .account )])
46+ new_account = get_depreciation_account (
47+ accounts_open_close ,
48+ account_types_option .expenses ,
49+ posting .account
50+ )
2551 else :
2652 continue
2753 new_postings_config .append ((config , posting , new_account ))
0 commit comments