39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from django.shortcuts import render, redirect
|
|
from .forms import ExpenseForm
|
|
from .models import Expense, Category
|
|
from django.db.models import Sum
|
|
|
|
def home(request):
|
|
"""Render the landing screen and handle expense form submission."""
|
|
if request.method == 'POST':
|
|
form = ExpenseForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return redirect('home')
|
|
else:
|
|
form = ExpenseForm()
|
|
|
|
expenses = Expense.objects.all()
|
|
|
|
# Filtering logic
|
|
category_id = request.GET.get('category')
|
|
if category_id:
|
|
expenses = expenses.filter(category_id=category_id)
|
|
|
|
expenses = expenses.order_by('-date')
|
|
|
|
# Analysis
|
|
total_expenses = expenses.aggregate(Sum('amount'))['amount__sum'] or 0
|
|
category_summary = expenses.values('category__name').annotate(total=Sum('amount')).order_by('-total')
|
|
|
|
categories = Category.objects.all()
|
|
|
|
return render(request, "core/index.html", {
|
|
'form': form,
|
|
'expenses': expenses,
|
|
'categories': categories,
|
|
'total_expenses': total_expenses,
|
|
'category_summary': category_summary,
|
|
})
|
|
|