From b828324220dff4d8c67b5b129e7395253c98e79e Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Sat, 22 Apr 2023 15:44:27 +0200 Subject: [PATCH] Add category plot on history pages --- .../templates/category/category_plot.html | 2 +- nummi/category/utils.py | 22 +++++++++++++++++++ nummi/main/static/main/css/main.css | 4 +++- nummi/statement/views.py | 21 ++---------------- .../transaction_archive_month.html | 14 ++++++++++++ nummi/transaction/views.py | 12 ++++++---- 6 files changed, 50 insertions(+), 25 deletions(-) create mode 100644 nummi/category/utils.py diff --git a/nummi/category/templates/category/category_plot.html b/nummi/category/templates/category/category_plot.html index 71cddaa..344500b 100644 --- a/nummi/category/templates/category/category_plot.html +++ b/nummi/category/templates/category/category_plot.html @@ -20,7 +20,7 @@ {% spaceless %} {% for cat in categories.data %} - + {% if cat.category %}{{ cat.category__name }}{% endif %} diff --git a/nummi/category/utils.py b/nummi/category/utils.py new file mode 100644 index 0000000..b3b0ea8 --- /dev/null +++ b/nummi/category/utils.py @@ -0,0 +1,22 @@ +from django.db import models + + +def get_categories(transactions): + categories = ( + transactions.values("category", "category__name", "category__icon") + .annotate( + sum=models.Sum("value"), + sum_m=models.Sum("value", filter=models.Q(value__lt=0)), + sum_p=models.Sum("value", filter=models.Q(value__gt=0)), + ) + .order_by("-sum") + ) + return { + "data": categories, + "max": max( + categories.aggregate( + max=models.Max("sum_p", default=0), + min=models.Min("sum_m", default=0), + ).values(), + ), + } diff --git a/nummi/main/static/main/css/main.css b/nummi/main/static/main/css/main.css index 523338c..892b449 100644 --- a/nummi/main/static/main/css/main.css +++ b/nummi/main/static/main/css/main.css @@ -163,8 +163,10 @@ footer { a.big-link { margin-right: 1em; } -[class^="ri-"] { +a [class^="ri-"] { margin-right: 0.5em; +} +[class^="ri-"] { font-weight: normal; } diff --git a/nummi/statement/views.py b/nummi/statement/views.py index cbbbc6a..9121ba3 100644 --- a/nummi/statement/views.py +++ b/nummi/statement/views.py @@ -1,5 +1,5 @@ from account.models import Account -from django.db import models +from category.utils import get_categories from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy from main.views import NummiCreateView, NummiDeleteView, NummiListView, NummiUpdateView @@ -43,24 +43,7 @@ class StatementUpdateView(NummiUpdateView): _transactions = statement.transaction_set.all() if _transactions: - _categories = ( - _transactions.values("category", "category__name", "category__icon") - .annotate( - sum=models.Sum("value"), - sum_m=models.Sum("value", filter=models.Q(value__lt=0)), - sum_p=models.Sum("value", filter=models.Q(value__gt=0)), - ) - .order_by("-sum") - ) - data["categories"] = { - "data": _categories, - "max": max( - _categories.aggregate( - max=models.Max("sum_p", default=0), - min=models.Min("sum_m", default=0), - ).values(), - ), - } + data["categories"] = get_categories(_transactions) return data | { "account": statement.account, diff --git a/nummi/transaction/templates/transaction/transaction_archive_month.html b/nummi/transaction/templates/transaction/transaction_archive_month.html index efd440f..93561c0 100644 --- a/nummi/transaction/templates/transaction/transaction_archive_month.html +++ b/nummi/transaction/templates/transaction/transaction_archive_month.html @@ -1,2 +1,16 @@ {% extends "transaction/transaction_list.html" %} +{% load i18n %} +{% load static %} +{% block link %} + {{ block.super }} + +{% endblock %} {% block h2 %}{{ month|date:"F Y"|capfirst }}{% endblock %} +{% block table %} +

{% translate "Transactions" %}

+ {{ block.super }} +

{% translate "History" %}

+ {% include "category/category_plot.html" %} +{% endblock %} diff --git a/nummi/transaction/views.py b/nummi/transaction/views.py index 0a54fc7..238d19a 100644 --- a/nummi/transaction/views.py +++ b/nummi/transaction/views.py @@ -1,5 +1,6 @@ from account.models import Account from category.models import Category +from category.utils import get_categories from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy from django.views.generic.dates import MonthArchiveView @@ -132,8 +133,11 @@ class TransactionMonthView(UserMixin, MonthArchiveView): return super().get_queryset() def get_context_data(self, **kwargs): - if "account" in self.kwargs: - return super().get_context_data(**kwargs) | {"account": self.account} + context_data = super().get_context_data(**kwargs) if "category" in self.kwargs: - return super().get_context_data(**kwargs) | {"category": self.category} - return super().get_context_data(**kwargs) + return context_data | {"category": self.category} + + context_data["categories"] = get_categories(context_data["transactions"]) + if "account" in self.kwargs: + return context_data | {"account": self.account} + return context_data