From 3f92a6d2ba39ec3bec2ee22f9c93e3c7d759aff0 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Tue, 18 Apr 2023 14:15:09 +0200 Subject: [PATCH] Add history chart in categories --- nummi/main/static/main/css/plot.css | 11 ++++------- nummi/main/templates/main/category_form.html | 5 +++++ nummi/main/views.py | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/nummi/main/static/main/css/plot.css b/nummi/main/static/main/css/plot.css index 8271130..9651596 100644 --- a/nummi/main/static/main/css/plot.css +++ b/nummi/main/static/main/css/plot.css @@ -24,18 +24,15 @@ table.full-width col.bar {width: auto} right: 0; border-radius: var(--radius) 0 0 var(--radius); } -.plot td.bar.m div:not(.tot) { - background: var(--red-1); -} -.plot td.bar.p div:not(.tot) { - background: var(--green-1); -} +.plot td.bar.m div {background: var(--red-1)} +.plot td.bar.p div {background: var(--green-1)} .plot td.bar div.tot { z-index: 10; height: .5rem; - background: black; } +.plot td.bar.m div.tot {background: var(--red)} +.plot td.bar.p div.tot {background: var(--green)} .plot td.bar div.tot span { position: absolute; display: inline-block; diff --git a/nummi/main/templates/main/category_form.html b/nummi/main/templates/main/category_form.html index c7046d4..c2c1782 100644 --- a/nummi/main/templates/main/category_form.html +++ b/nummi/main/templates/main/category_form.html @@ -11,6 +11,9 @@ + {% endblock %} {% block body %}

@@ -23,5 +26,7 @@ {% if form.instance.transactions %}

{% translate "Transactions" %}

{% include "main/table/transaction.html" %} +

{% translate "History" %}

+ {% include "main/plot/history.html" %} {% endif %} {% endblock %} diff --git a/nummi/main/views.py b/nummi/main/views.py index 921ade7..f462130 100644 --- a/nummi/main/views.py +++ b/nummi/main/views.py @@ -228,11 +228,30 @@ class CategoryUpdateView(NummiUpdateView): def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) category = data["form"].instance + _history = ( + category.transaction_set.values(month=models.functions.TruncMonth("date")) + .annotate( + sum_p=models.Sum("value", filter=models.Q(value__gt=0)), + sum_m=models.Sum("value", filter=models.Q(value__lt=0)), + sum=models.Sum("value"), + ) + .order_by("-month") + ) + return data | { "transactions": category.transaction_set.all()[:8], "transactions_url": reverse_lazy( "category_transactions", args=(category.pk,) ), + "history": { + "data": _history, + "max": max( + _history.aggregate( + max=models.Max("sum_p", default=0), + min=-models.Min("sum_m", default=0), + ).values(), + ), + }, }