Daniel Sheffield 7 luni în urmă
părinte
comite
d14a9cde2a
1 a modificat fișierele cu 13 adăugiri și 4 ștergeri
  1. 13 4
      reconcile.py

+ 13 - 4
reconcile.py

@@ -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}')