GnuCash c935c2f+
Loading...
Searching...
No Matches
gnc_convenience.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# -*- coding: UTF-8 -*-
3
4
10
11from gnucash import Session, Account, Transaction, Split
12
13
14def get_transaction_list(account):
15 """Returns all transactions in account.
16
17 Splits are derived from account.GetSplitList().
18
19 options:
20
21 account: Account to get transactions from.
22
23 """
24
25 split_list=account.GetSplitList()
26 transaction_list=[]
27 for split in split_list:
28 transaction=split.GetParent()
29 if not (transaction in transaction_list): # this check may not be necessary.
30 transaction_list.append(transaction)
31 return transaction_list
32
33
34def 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.
36
37 options:
38
39 account: (optional) Account to search in.
40 split_list: (optional) List of Splits to search in.
41
42 one or the other has to be provided.
43
44 """
45 if split_list==None:
46 if account==None:
47 return []
48 else:
49 split_list=account.GetSplitList()
50
51 rlist=[]
52 for split in split_list:
53 lot=split.GetLot()
54 if lot == None:
55 rlist.append(split)
56 return rlist
57
58
59def find_account(account,name,account_list=None):
60 """Recursively searches full names of account and descendents
61
62 returns a list of accounts which contain name.
63
64 options:
65
66 account: account to start search in.
67 name: name to search for.
68 account_list: (optional) list to append accounts to.
69
70 """
71
72 if not account_list:
73 account_list=[]
74
75 for child in account.get_children():
76 account_list=find_account(child,name,account_list)
77
78 account_name=account.GetName()
79 if name in account_name:
80 account_list.append(account)
81
82 return account_list
83
84
85def find_lot(lot_list,search_string):
86 """Searches lots in lot_list for search_string.
87
88 returns list of lots where title contains search_string.
89
90 options:
91
92 lot_list: List of Lots to search in.
93 search_string: String to search for.
94
95 """
96
97 rlist=[]
98 for lot in lot_list:
99 ltitle=lot.get_title()
100 if search_string in ltitle:
101 rlist.append(lot)
102 return rlist
103
104
105def find_split(split_list,search_string):
106 """Searches a list of splits for search_string
107
108 returns a list of splits that have search_string as part of
109 memo or
110 description of parent transaction.
111
112 options:
113
114 split_list: List of Splits to search in.
115 search_string: String to search for.
116
117 """
118
119 rlist=[]
120 for split in split_list:
121 memo=split.GetMemo()
122 transaction_description=split.GetParent().GetDescription()
123 if (search_string in memo) or (search_string in transaction_description):
124 rlist.append(split)
125 return rlist
126
127
128def find_split_recursive(account, search_string):
129 """Searches account and descendants for Splits containing search_string
130
131 returns a list of splits that have search_string as part of
132 memo or
133 description of parent transaction.
134
135 options:
136
137 account: Account to search in.
138 search_string: String to search for.
139
140 """
141
142 rlist = []
143 child_account_splits = []
144
145 # Get all splits in descendants
146 for child in account.get_children():
147 childsplits = find_split_recursive(child, search_string)
148 child_account_splits += childsplits
149
150 # Get all splits in account
151 splits=account.GetSplitList()
152 basic_account_splits=find_split(splits,search_string)
153
154 rlist=child_account_splits+basic_account_splits
155 return rlist
156
157
158def find_transaction(account,name,ignore_case=True,transaction_list=None):
159 """Searches the transactions of an account for name.
160
161 Searches in description and in memo of each split.
162 returns a list of transactions that match criteria.
163
164 options:
165
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.
170
171 """
172
173 if not transaction_list:
174 transaction_list=get_transaction_list(account)
175
176 ret = []
177 if ignore_case:
178 name=name.lower()
179
180 for transaction in transaction_list:
181 found = False
182
183 desc=transaction.GetDescription()
184 if ignore_case:
185 desc=desc.lower()
186
187 if name in desc:
188 found=True
189
190 sl=transaction.GetSplitList()
191 for split in sl:
192 memo = split.GetMemo()
193 if ignore_case:
194 memo=memo.lower()
195
196 if name in memo:
197 found=True
198
199 if found:
200 ret.append(transaction)
201
202 return ret