38063-vm/core/views.py
Flatlogic Bot f6917d7012 1.00
2026-02-01 13:51:45 +00:00

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)