budget-bear/util.py
Sara Montecino 3d048feb9a WIP
2024-02-13 23:05:17 -08:00

33 lines
1.5 KiB
Python
Executable File

from datetime import timedelta
from peewee import fn
import database
def get_start_end_dates(period, date):
if period == 'daily':
start_date = date
end_date = date + timedelta(days=1)
elif period == 'weekly':
start_date = date - timedelta(days=date.weekday())
end_date = start_date + timedelta(days=7)
elif period == 'monthly':
start_date = date.replace(day=1)
next_month = start_date + timedelta(days=32)
end_date = next_month.replace(day=1)
elif period == 'yearly':
start_date = date.replace(day=1, month=1)
end_date = start_date.replace(year=start_date.year + 1)
else:
raise ValueError("Invalid period specified")
return start_date, end_date
def aggregate_transactions_by_category(user_id, start_date, end_date):
query = (database.Transaction
.select(database.TransactionCategory.name, fn.SUM(database.Transaction.amount).alias('total'))
.join(database.TransactionCategory, on=(database.Transaction.subcategory == database.TransactionCategory.primary_key))
.where(
(database.Transaction.user == user_id) &
(database.Transaction.transaction_date >= start_date) &
(database.Transaction.transaction_date < end_date))
.group_by(database.TransactionCategory.name))
return [{transaction.subcategory.name: transaction.total} for transaction in query]