diff --git a/nummi/transaction/templates/transaction/transaction_archive_year.html b/nummi/transaction/templates/transaction/transaction_archive_year.html new file mode 100644 index 0000000..2f0cf71 --- /dev/null +++ b/nummi/transaction/templates/transaction/transaction_archive_year.html @@ -0,0 +1,23 @@ +{% extends "transaction/transaction_list.html" %} +{% load i18n main_extras static category %} +{% block link %} + {{ block.super }} + {% css "main/css/plot.css" %} +{% endblock %} +{% block h2 %}{{ year|date:"Y" }}{% endblock %} +{% block table %} + {% if history %} +
+

+ {% translate "History" %} +

+ {% include "history/plot.html" %} +
+ {% endif %} + {% if not category %} +

{% translate "Categories" %}

+ {% category_plot transactions month=month %} + {% endif %} +

{% translate "Transactions" %}

+ {{ block.super }} +{% endblock %} diff --git a/nummi/transaction/urls.py b/nummi/transaction/urls.py index cba5e2e..7c62eb8 100644 --- a/nummi/transaction/urls.py +++ b/nummi/transaction/urls.py @@ -4,6 +4,11 @@ from . import views urlpatterns = [ path("list", views.TransactionListView.as_view(), name="transactions"), + path( + "history/", + views.TransactionYearView.as_view(), + name="transaction_year", + ), path( "history//", views.TransactionMonthView.as_view(), diff --git a/nummi/transaction/views.py b/nummi/transaction/views.py index f7464cd..fb1a900 100644 --- a/nummi/transaction/views.py +++ b/nummi/transaction/views.py @@ -2,7 +2,8 @@ from account.models import Account from category.models import Category from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy -from django.views.generic.dates import MonthArchiveView +from django.views.generic.dates import MonthArchiveView, YearArchiveView +from history.utils import history from main.views import ( NummiCreateView, NummiDeleteView, @@ -138,3 +139,39 @@ class TransactionMonthView(UserMixin, MonthArchiveView): if "account" in self.kwargs: return context_data | {"account": self.account} return context_data + + +class TransactionYearView(UserMixin, YearArchiveView): + model = Transaction + date_field = "date" + context_object_name = "transactions" + make_object_list = True + + def get_queryset(self): + if "account" in self.kwargs: + self.account = get_object_or_404( + Account.objects.filter(user=self.request.user), + pk=self.kwargs["account"], + ) + return super().get_queryset().filter(account=self.account) + if "category" in self.kwargs: + self.category = get_object_or_404( + Category.objects.filter(user=self.request.user), + pk=self.kwargs["category"], + ) + return super().get_queryset().filter(category=self.category) + + return super().get_queryset() + + def get_context_data(self, **kwargs): + context_data = super().get_context_data(**kwargs) + context_data |= { + "history": history( + context_data["transactions"].exclude(category__budget=False) + ), + } + if "category" in self.kwargs: + return context_data | {"category": self.category} + if "account" in self.kwargs: + return context_data | {"account": self.account} + return context_data