]> git.rmz.io Git - dotfiles.git/blob - bin/monzo.py
6980487aeef81e218ceb584da7f64cafc98f8326
[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
11 class UnknownAccountError(Exception):
12 pass
13
14
15 def get_account(data):
16 account_id = data["transactions"][0]["account_id"]
17 if account_id == "":
18 return "Accounts:Monzo"
19 elif account_id == "":
20 return "Accounts:Joint Account"
21
22 raise UnknownAccountError(account_id)
23
24
25 if __name__ == "__main__":
26 with open(sys.argv[1], 'r') if len(sys.argv) > 1 else sys.stdin as fp:
27 data = json.load(fp)
28
29 if outformat == "qif":
30 print("!Account")
31 print("NCurrent {}".format(get_account(data)))
32 print("^")
33 print("!Type:Bank")
34
35 cnt = 1
36 for t in data.get("transactions"):
37 if t.get("decline_reason", ""):
38 continue
39
40 try:
41 date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%S.%fZ")
42 except ValueError:
43 date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%SZ")
44 amount = t["amount"] / 100
45 if "name" in t.get("counterparty", {}):
46 payee = t["counterparty"]["name"]
47 elif t["merchant"] is None:
48 payee = t["description"]
49 else:
50 payee = t["merchant"]["name"]
51 memo = t["description"]
52 try:
53 memo = "Tab: {}".format(t["tab"]["name"])
54 except KeyError:
55 pass
56
57 memo += "\n{local_amount} {local_currency}".format(**t)
58 notes = t["notes"]
59 if outformat == "csv":
60 print('{date:%Y-%m-%d},{amount},"{payee}","{description}","{notes}"'.format(date=date,
61 payee=payee,
62 amount=amount,
63 **t))
64 elif outformat == "qif":
65 print("D{:%Y-%m-%d}".format(date))
66 print("T{}".format(amount))
67 print("P{}".format(payee))
68 print("M{}".format(memo))
69 print("#{}".format(t['id']))
70 print("^")
71 cnt += 1