]> git.rmz.io Git - dotfiles.git/blob - bin/monzo.py
vim/cpp: prefer .cpp over .c implementation files for .h
[dotfiles.git] / bin / monzo.py
1 #!/usr/bin/env python3
2
3 from datetime import datetime
4 import json
5 import sys
6
7 outformat = "qif"
8 # outformat = "csv"
9
10 if __name__ == "__main__":
11 if outformat == "qif":
12 print("!Account")
13 print("NCurrent Accounts:Monzo")
14 print("^")
15 print("!Type:Bank")
16 cnt = 1
17 with open(sys.argv[1], 'r') if len(sys.argv) > 1 else sys.stdin as fp:
18 data = json.load(fp)
19 for t in data.get("transactions"):
20 if t.get("decline_reason", ""):
21 continue
22
23 try:
24 date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%S.%fZ")
25 except ValueError:
26 date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%SZ")
27 amount = t["amount"] / 100
28 if "name" in t.get("counterparty", {}):
29 payee = t["counterparty"]["name"]
30 elif t["merchant"] is None:
31 payee = t["description"]
32 else:
33 payee = t["merchant"]["name"]
34 memo = t["description"]
35 memo += "\n{local_amount} {local_currency}".format(**t)
36 notes = t["notes"]
37 if outformat == "csv":
38 print('{date:%Y-%m-%d},{amount},"{payee}","{description}","{notes}"'.format(date=date,
39 payee=payee,
40 amount=amount,
41 **t))
42 elif outformat == "qif":
43 print("D{:%Y-%m-%d}".format(date))
44 print("T{}".format(amount))
45 print("P{}".format(payee))
46 print("M{}".format(memo))
47 print("#{}".format(t['id']))
48 print("^")
49 cnt += 1