11 from gnucash
import Session, Account, Transaction, Split
14 def get_transaction_list(account):
15 """Returns all transactions in account. 17 Splits are derived from account.GetSplitList(). 21 account: Account to get transactions from. 25 split_list=account.GetSplitList()
27 for split
in split_list:
28 transaction=split.GetParent()
29 if not (transaction
in transaction_list):
30 transaction_list.append(transaction)
31 return transaction_list
34 def get_splits_without_lot(account=None,split_list=None):
35 """Returns a list of those Splits in split_list or account which do not have an according lot. 39 account: (optional) Account to search in. 40 split_list: (optional) List of Splits to search in. 42 one or the other has to be provided. 49 split_list=account.GetSplitList()
52 for split
in split_list:
59 def find_account(account,name,account_list=None):
60 """Recursively searches full names of account and descendents 62 returns a list of accounts which contain name. 66 account: account to start search in. 67 name: name to search for. 68 account_list: (optional) list to append accounts to. 75 for child
in account.get_children():
76 account_list=find_account(child,name,account_list)
78 account_name=account.GetName()
79 if name
in account_name:
80 account_list.append(account)
85 def find_lot(lot_list,search_string):
86 """Searches lots in lot_list for search_string. 88 returns list of lots where title contains search_string. 92 lot_list: List of Lots to search in. 93 search_string: String to search for. 99 ltitle=lot.get_title()
100 if search_string
in ltitle:
105 def find_split(split_list,search_string):
106 """Searches a list of splits for search_string 108 returns a list of splits that have search_string as part of 110 description of parent transaction. 114 split_list: List of Splits to search in. 115 search_string: String to search for. 120 for split
in split_list:
122 transaction_description=split.GetParent().GetDescription()
123 if (search_string
in memo)
or (search_string
in transaction_description):
128 def find_split_recursive(account, search_string):
129 """Searches account and descendants for Splits containing search_string 131 returns a list of splits that have search_string as part of 133 description of parent transaction. 137 account: Account to search in. 138 search_string: String to search for. 143 child_account_splits = []
146 for child
in account.get_children():
147 childsplits = find_split_recursive(child, search_string)
148 child_account_splits += childsplits
151 splits=account.GetSplitList()
152 basic_account_splits=find_split(splits,search_string)
154 rlist=child_account_splits+basic_account_splits
158 def find_transaction(account,name,ignore_case=True,transaction_list=None):
159 """Searches the transactions of an account for name. 161 Searches in description and in memo of each split. 162 returns a list of transactions that match criteria. 166 account: Account to search in. 167 name: String to search for. 168 ignore_case: (optional, default=True) Ignore case if True. 169 transaction_list: (optional) list of transactions to search in. 173 if not transaction_list:
174 transaction_list=get_transaction_list(account)
180 for transaction
in transaction_list:
183 desc=transaction.GetDescription()
190 sl=transaction.GetSplitList()
192 memo = split.GetMemo()
200 ret.append(transaction)