40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
from django.shortcuts import render, redirect
|
|
from django.db.models import Sum
|
|
from django.utils import timezone
|
|
from .models import Transaction, Category
|
|
from .forms import TransactionForm
|
|
import datetime
|
|
|
|
def home(request):
|
|
today = timezone.now().date()
|
|
first_day_of_month = today.replace(day=1)
|
|
|
|
# Calculate stats
|
|
total_income = Transaction.objects.filter(type='income').aggregate(Sum('amount'))['amount__sum'] or 0
|
|
total_expense = Transaction.objects.filter(type='expense').aggregate(Sum('amount'))['amount__sum'] or 0
|
|
balance = total_income - total_expense
|
|
|
|
monthly_income = Transaction.objects.filter(type='income', date__gte=first_day_of_month).aggregate(Sum('amount'))['amount__sum'] or 0
|
|
monthly_expense = Transaction.objects.filter(type='expense', date__gte=first_day_of_month).aggregate(Sum('amount'))['amount__sum'] or 0
|
|
|
|
recent_transactions = Transaction.objects.select_related('category').order_by('-date', '-created_at')[:10]
|
|
|
|
if request.method == 'POST':
|
|
form = TransactionForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return redirect('home')
|
|
else:
|
|
form = TransactionForm()
|
|
|
|
context = {
|
|
'total_income': total_income,
|
|
'total_expense': total_expense,
|
|
'balance': balance,
|
|
'monthly_income': monthly_income,
|
|
'monthly_expense': monthly_expense,
|
|
'recent_transactions': recent_transactions,
|
|
'form': form,
|
|
'current_month': today.strftime('%B %Y'),
|
|
}
|
|
return render(request, 'core/index.html', context) |