From 6c51b5a9b22b892b090bb820247dd0932243e431 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 28 May 2026 13:59:18 +0200 Subject: [PATCH] Fixed bug with the parent categories that shows the others users --- expenses_manager/expenses/forms.py | 8 ++++++++ expenses_manager/expenses/models.py | 22 +++++++++++++++++++++- expenses_manager/expenses/views.py | 4 ++-- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/expenses_manager/expenses/forms.py b/expenses_manager/expenses/forms.py index c2e1b41..67b42c4 100644 --- a/expenses_manager/expenses/forms.py +++ b/expenses_manager/expenses/forms.py @@ -87,6 +87,14 @@ class CategoryForm(forms.ModelForm): model = Category fields = ["name", "parent"] + def __init__(self, *args, **kwargs): + user = kwargs.pop("user") + super().__init__(*args, **kwargs) + + if user: + self.fields["parent"].queryset = Category.objects.filter( + owner=user, + ) class GoalForm(forms.ModelForm): class Meta: model = Goal diff --git a/expenses_manager/expenses/models.py b/expenses_manager/expenses/models.py index 4a8202d..4f2b0a6 100644 --- a/expenses_manager/expenses/models.py +++ b/expenses_manager/expenses/models.py @@ -69,6 +69,27 @@ class Account(models.Model): def monthly_balance(self, year=None): year = year or date.today().year + # ------------------------- + # Previous accumulated balance + # ------------------------- + previous_income = ( + self.incomes.filter(date__year__lt=year) + .aggregate(total=Sum('amount'))['total'] + or Decimal('0') + ) + + previous_expenses = ( + self.expenses.filter(date__year__lt=year) + .aggregate(total=Sum('amount'))['total'] + or Decimal('0') + ) + + balance = (self.initial_balance + previous_income - previous_income) + + # ------------------------- + # Current year data + # ------------------------- + incomes = ( self.incomes.filter(date__year=year) .annotate(month=ExtractMonth("date")) @@ -86,7 +107,6 @@ class Account(models.Model): income_map = {i["month"]: i["total"] for i in incomes} expenses_map = {e["month"]: e["total"] for e in expenses} - balance = self.initial_balance data = [] for month in range(1, 13): diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 3bb69bd..85ad52a 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -830,14 +830,14 @@ def category_list(request): categories = Category.objects.filter(owner=request.user) if request.method == "POST": - form = CategoryForm(request.POST) + form = CategoryForm(request.POST, user=request.user) if form.is_valid(): category = form.save(commit=False) category.owner = request.user category.save() return redirect("category_list") else: - form = CategoryForm() + form = CategoryForm(user=request.user) return render( request, -- 2.45.2