-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexpense_report.py
More file actions
54 lines (42 loc) · 1.93 KB
/
expense_report.py
File metadata and controls
54 lines (42 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
Generate an expense report grouped by category.
Usage: python expense_report.py
"""
import requests
API_URL = "https://reportforge-api.vercel.app/api/json-to-report"
expenses = [
{"date": "2026-02-01", "description": "Client lunch", "category": "Meals", "amount": 85.50},
{"date": "2026-02-03", "description": "Uber to airport", "category": "Travel", "amount": 42.00},
{"date": "2026-02-03", "description": "Flight to NYC", "category": "Travel", "amount": 389.00},
{"date": "2026-02-04", "description": "Hotel (2 nights)", "category": "Lodging", "amount": 478.00},
{"date": "2026-02-04", "description": "Team dinner", "category": "Meals", "amount": 156.75},
{"date": "2026-02-05", "description": "Conference registration", "category": "Events", "amount": 299.00},
{"date": "2026-02-05", "description": "Taxi to venue", "category": "Travel", "amount": 28.00},
{"date": "2026-02-06", "description": "Office supplies", "category": "Supplies", "amount": 67.30},
{"date": "2026-02-10", "description": "Software subscription", "category": "Software", "amount": 49.99},
]
def generate_report():
response = requests.post(
API_URL,
json={
"data": expenses,
"template": "expense-report",
"title": "February 2026 Expenses"
},
)
if response.status_code != 200:
print(f"Error: {response.status_code}")
print(response.text)
return
result = response.json()
print(f"Template: {result['meta']['template']}")
print(f"Expense items: {result['meta']['rowCount']}")
print(f"Columns: {', '.join(result['meta']['columns'])}")
total = sum(e["amount"] for e in expenses)
print(f"Total expenses: ${total:,.2f}")
filename = "expense-report.html"
with open(filename, "w", encoding="utf-8") as f:
f.write(result["html"])
print(f"\nReport saved to {filename}")
if __name__ == "__main__":
generate_report()