|
@@ -52,10 +52,14 @@ conn = psycopg.connect(f"{host} dbname=grocery user={user} {password}")
|
|
|
cur = conn.cursor()
|
|
|
output = []
|
|
|
|
|
|
-def get_record_from_database(date, store):
|
|
|
+def get_record_from_database(date, store, tags):
|
|
|
cur.execute(get_statement(date, store))
|
|
|
#print(cur.mogrify(get_statement(date, store)))
|
|
|
- return sum([row['price'] for row in cursor_as_dict(cur)])
|
|
|
+ return sum([
|
|
|
+ row['price'] for row in cursor_as_dict(cur) if not (
|
|
|
+ tags & set(row['tags'] or [])
|
|
|
+ )
|
|
|
+ ])
|
|
|
|
|
|
|
|
|
def get_store_code(store, value, user_data=dict()):
|
|
@@ -135,6 +139,11 @@ def _iter(root, blacklist, whitelist, _from, _to):
|
|
|
if __name__ == '__main__':
|
|
|
args = sys.argv
|
|
|
session = gnucash.Session(args[1])
|
|
|
+ tags = set()
|
|
|
+ if len(args) > 5:
|
|
|
+ for arg in args[5:]:
|
|
|
+ tags.add(arg)
|
|
|
+
|
|
|
try:
|
|
|
blacklist = [
|
|
|
# name, also_children
|
|
@@ -167,12 +176,12 @@ if __name__ == '__main__':
|
|
|
store = get_store_code(desc, value)
|
|
|
book = None
|
|
|
while d + timedelta(days=2) > ts > d - timedelta(days=3):
|
|
|
- book = get_record_from_database(ts, store)
|
|
|
+ book = get_record_from_database(ts, store, tags)
|
|
|
book = int(book*100)
|
|
|
if book == int(value):
|
|
|
break;
|
|
|
ts = ts - timedelta(days=1)
|
|
|
- book = get_record_from_database(ts, store)
|
|
|
+ book = get_record_from_database(ts, store, tags)
|
|
|
dbentry = f'{ts} {store:5s}' if book == int(value) else ''
|
|
|
output.append(f'{d} {desc:35s} | {value/100:>6.2f} | {dbentry}')
|
|
|
|