Add history URL routing and templates for transaction history views
This commit is contained in:
parent
71f7a82f60
commit
e5ae5caf2a
21 changed files with 225 additions and 7668 deletions
|
@ -1,6 +1,5 @@
|
|||
from django.urls import path
|
||||
from statement.views import StatementCreateView
|
||||
from transaction.views import TransactionMonthView, TransactionYearView
|
||||
|
||||
from . import views
|
||||
|
||||
|
@ -29,14 +28,4 @@ urlpatterns = [
|
|||
views.AccountDeleteView.as_view(),
|
||||
name="del_account",
|
||||
),
|
||||
path(
|
||||
"<account>/history/<int:year>",
|
||||
TransactionYearView.as_view(),
|
||||
name="account_transaction_year",
|
||||
),
|
||||
path(
|
||||
"<account>/history/<int:year>/<int:month>",
|
||||
TransactionMonthView.as_view(),
|
||||
name="account_transaction_month",
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% load main_extras statement_extras %}
|
||||
{% load main_extras statement_extras history_extras %}
|
||||
{% load i18n %}
|
||||
<div class="plot">
|
||||
<table class="full-width">
|
||||
|
@ -21,10 +21,8 @@
|
|||
<tr>
|
||||
<th scope="row" class="l wi">
|
||||
{% if cat.category %}
|
||||
{% if month %}
|
||||
<a href="{% url_get "transactions" category=cat.category start_date=month end_date=month|end_of_month %}">{{ cat.category__icon|remix }}{{ cat.category__name }}</a>
|
||||
{% elif year %}
|
||||
<a href="{% url_get "transactions" category=cat.category start_date=year end_date=year|end_of_year %}">{{ cat.category__icon|remix }}{{ cat.category__name }}</a>
|
||||
{% if year or month %}
|
||||
<a href="{% history_url year=year month=month category=cat.category account=account.id %}">{{ cat.category__icon|remix }}{{ cat.category__name }}</a>
|
||||
{% else %}
|
||||
{{ cat.category__icon|remix }}{{ cat.category__name }}
|
||||
{% endif %}
|
||||
|
|
|
@ -5,8 +5,10 @@ from django.db.models.functions import Greatest
|
|||
register = template.Library()
|
||||
|
||||
|
||||
@register.inclusion_tag("category/category_plot.html")
|
||||
def category_plot(transactions, budget=True, **kwargs):
|
||||
@register.inclusion_tag("category/category_plot.html", takes_context=True)
|
||||
def category_plot(context, transactions, budget=True, **kwargs):
|
||||
kwargs.setdefault("account", context.get("account"))
|
||||
|
||||
if budget:
|
||||
transactions = transactions.exclude(category__budget=False)
|
||||
categories = (
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.urls import path
|
||||
from transaction.views import TransactionMonthView, TransactionYearView
|
||||
|
||||
from . import views
|
||||
|
||||
|
@ -13,14 +12,4 @@ urlpatterns = [
|
|||
name="category_transactions",
|
||||
),
|
||||
path("<category>/delete", views.CategoryDeleteView.as_view(), name="del_category"),
|
||||
path(
|
||||
"<category>/history/<int:year>",
|
||||
TransactionYearView.as_view(),
|
||||
name="category_transaction_year",
|
||||
),
|
||||
path(
|
||||
"<category>/history/<int:year>/<int:month>",
|
||||
TransactionMonthView.as_view(),
|
||||
name="category_transaction_month",
|
||||
),
|
||||
]
|
||||
|
|
25
nummi/history/templates/history/pagination.html
Normal file
25
nummi/history/templates/history/pagination.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
{% load history_extras %}
|
||||
{% if month %}
|
||||
<p class="pagination">
|
||||
<a href="{% history_url year=month %}">{{ month.year }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
<p class="pagination n3">
|
||||
{% if month %}
|
||||
{% if previous_month %}
|
||||
<a href="{% history_url month=previous_month %}">{{ previous_month|date:"F Y"|capfirst }}</a>
|
||||
{% endif %}
|
||||
<a class="cur" href="{% history_url month=month %}">{{ month|date:"F Y"|capfirst }}</a>
|
||||
{% if next_month %}
|
||||
<a href="{% history_url month=next_month %}">{{ next_month|date:"F Y"|capfirst }}</a>
|
||||
{% endif %}
|
||||
{% elif year %}
|
||||
{% if previous_year %}
|
||||
<a href="{% history_url year=previous_year %}">{{ previous_year|date:"Y" }}</a>
|
||||
{% endif %}
|
||||
<a class="cur" href="{% history_url year=year %}">{{ year|date:"Y" }}</a>
|
||||
{% if next_year %}
|
||||
<a href="{% history_url year=next_year %}">{{ next_year|date:"Y" }}</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
|
@ -18,7 +18,9 @@
|
|||
{% for y, y_data in years_list reversed %}
|
||||
<tr>
|
||||
{% if not year %}
|
||||
<th class="date" scope="row">{% year_url y %}</th>
|
||||
<th class="date" scope="row">
|
||||
<a href="{% history_url year=y account=account.id category=category.id %}">{{ y }}</a>
|
||||
</th>
|
||||
{% endif %}
|
||||
{% for m in y_data %}
|
||||
{% if forloop.parentloop.last and forloop.first %}
|
||||
|
@ -65,11 +67,13 @@
|
|||
<tr {% if not date.month.month|divisibleby:"2" %}class="even"{% endif %}>
|
||||
<td class="icon">{% up_down_icon date.sum %}</td>
|
||||
<th class="date" scope="row">
|
||||
{% if year %}
|
||||
{% month_url date.month fmt="F" %}
|
||||
{% else %}
|
||||
{% month_url date.month %}
|
||||
{% endif %}
|
||||
<a href="{% history_url year=date.month.year month=date.month.month account=account.id category=category.id %}">
|
||||
{% if year %}
|
||||
{{ date.month|date:"F"|capfirst }}
|
||||
{% else %}
|
||||
{{ date.month|date:"Y-m" }}
|
||||
{% endif %}
|
||||
</a>
|
||||
</th>
|
||||
<td class="value">{{ date.sum_m|pmrvalue }}</td>
|
||||
<td class="bar m">{% plot_bar date.sum date.sum_m history.max.pm %}</td>
|
||||
|
|
51
nummi/history/templates/history/transaction_archive.html
Normal file
51
nummi/history/templates/history/transaction_archive.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
{% extends "main/base.html" %}
|
||||
{% load i18n static main_extras transaction_extras category history_extras %}
|
||||
{% block link %}
|
||||
{{ block.super }}
|
||||
{% css "main/css/plot.css" %}
|
||||
{% css "main/css/table.css" %}
|
||||
{% endblock link %}
|
||||
{% block body %}
|
||||
<h2>
|
||||
{% block h2 %}
|
||||
{% endblock h2 %}
|
||||
</h2>
|
||||
{% history_pagination %}
|
||||
{% if account or category %}
|
||||
<p class="back">
|
||||
<a class="big-link"
|
||||
href="{% history_url year=year month=month clear=True %}">{{ "arrow-go-back"|remix }}{% translate "Back" %}</a>
|
||||
{% if account %}
|
||||
<a class="big-link" href="{% url "account" account.id %}">{{ account.icon|remix }}{{ account }}</a>
|
||||
{% endif %}
|
||||
{% if category %}
|
||||
<a class="big-link" href="{% url "category" category.id %}">{{ category.icon|remix }}{{ category }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if history %}
|
||||
<section>
|
||||
<h3>{% translate "History" %}</h3>
|
||||
{% include "history/plot.html" %}
|
||||
</section>
|
||||
{% endif %}
|
||||
{% if not category %}
|
||||
<section>
|
||||
<h3>{% translate "Categories" %}</h3>
|
||||
{% category_plot transactions month=month year=year %}
|
||||
</section>
|
||||
{% endif %}
|
||||
<section>
|
||||
<h3>{% translate "Transactions" %}</h3>
|
||||
{% if month %}
|
||||
{% url_get "transactions" start_date=month end_date=month|end_of_month category=category.id account=account.id as t_url %}
|
||||
{% elif year %}
|
||||
{% url_get "transactions" start_date=year end_date=year|end_of_year category=category.id account=account.id as t_url %}
|
||||
{% endif %}
|
||||
<p>
|
||||
<a class="big-link" href="{{ t_url }}">{{ "list-check"|remixnl }}{% translate "View all transactions" %}</a>
|
||||
</p>
|
||||
{% transaction_table transactions n_max=8 transactions_url=t_url %}
|
||||
</section>
|
||||
{% history_pagination %}
|
||||
{% endblock body %}
|
8
nummi/history/templates/history/transaction_month.html
Normal file
8
nummi/history/templates/history/transaction_month.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
{% extends "history/transaction_archive.html" %}
|
||||
{% load i18n static main_extras transaction_extras category %}
|
||||
{% block title %}
|
||||
{{ month|date:"F Y"|capfirst }} – {{ block.super }}
|
||||
{% endblock title %}
|
||||
{% block h2 %}
|
||||
{{ month|date:"F Y"|capfirst }}
|
||||
{% endblock h2 %}
|
8
nummi/history/templates/history/transaction_year.html
Normal file
8
nummi/history/templates/history/transaction_year.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
{% extends "history/transaction_archive.html" %}
|
||||
{% load i18n static main_extras transaction_extras category %}
|
||||
{% block title %}
|
||||
{{ year|date:"Y" }} – {{ block.super }}
|
||||
{% endblock title %}
|
||||
{% block h2 %}
|
||||
{{ year|date:"Y" }}
|
||||
{% endblock h2 %}
|
|
@ -1,6 +1,9 @@
|
|||
import datetime
|
||||
import math
|
||||
from urllib import parse
|
||||
|
||||
from django import template
|
||||
from django.urls import reverse
|
||||
from django.utils.safestring import mark_safe
|
||||
from history.utils import history
|
||||
from main.templatetags.main_extras import pmrvalue, remix
|
||||
|
@ -8,22 +11,24 @@ from main.templatetags.main_extras import pmrvalue, remix
|
|||
register = template.Library()
|
||||
|
||||
|
||||
@register.inclusion_tag("history/plot.html")
|
||||
def history_plot(transactions, **kwargs):
|
||||
options = kwargs
|
||||
if "category" in kwargs or "account" in kwargs:
|
||||
options["history"] = history(transactions.all())
|
||||
else:
|
||||
options["history"] = history(transactions.exclude(category__budget=False))
|
||||
@register.inclusion_tag("history/plot.html", takes_context=True)
|
||||
def history_plot(context, transactions, **kwargs):
|
||||
kwargs.setdefault("account", context.get("account"))
|
||||
kwargs.setdefault("category", context.get("category"))
|
||||
|
||||
return options
|
||||
if "category" in kwargs or "account" in kwargs:
|
||||
kwargs["history"] = history(transactions.all())
|
||||
else:
|
||||
kwargs["history"] = history(transactions.exclude(category__budget=False))
|
||||
|
||||
return kwargs
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def calendar_opacity(v, vmax):
|
||||
if v is None:
|
||||
return "0%"
|
||||
return f"{math.sin(min(1, math.fabs(v/vmax))*math.pi/2):.0%}"
|
||||
return f"{math.sin(min(1, math.fabs(v/vmax))*math.pi/2): .0%}"
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
|
@ -60,11 +65,11 @@ def plot_bar(s, sum_pm, s_max):
|
|||
if s_max:
|
||||
if sum_pm:
|
||||
_w = abs(sum_pm / s_max)
|
||||
_res += f"""<div style="width: {_w:.1%}"></div>"""
|
||||
_res += f"""<div style="width: {_w: .1%}"></div>"""
|
||||
if sum_pm is not None and s * sum_pm > 0:
|
||||
_w = abs(s / s_max)
|
||||
_res += (
|
||||
f"""<div class="tot" style="width: {_w:.1%}">"""
|
||||
f"""<div class="tot" style="width: {_w: .1%}">"""
|
||||
f"""<span>{pmrvalue(s)}</span></div>"""
|
||||
)
|
||||
else:
|
||||
|
@ -76,7 +81,7 @@ def plot_bar(s, sum_pm, s_max):
|
|||
@register.simple_tag
|
||||
def calendar_head():
|
||||
months = range(1, 13)
|
||||
th = (f"""<th>{month:02d}</th>""" for month in months)
|
||||
th = (f"""<th>{month: 02d}</th>""" for month in months)
|
||||
|
||||
return mark_safe("".join(th))
|
||||
|
||||
|
@ -84,3 +89,31 @@ def calendar_head():
|
|||
@register.filter
|
||||
def sum_year(y_data):
|
||||
return sum(y["sum"] or 0 for y in y_data)
|
||||
|
||||
|
||||
@register.inclusion_tag("history/pagination.html", takes_context=True)
|
||||
def history_pagination(context):
|
||||
return context
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def history_url(context, month=None, year=None, clear=False, **kwargs):
|
||||
if not clear:
|
||||
kwargs.setdefault("account", getattr(context.get("account"), "id", None))
|
||||
kwargs.setdefault("category", getattr(context.get("category"), "id", None))
|
||||
|
||||
if month:
|
||||
if isinstance(month, datetime.date):
|
||||
year = month.year
|
||||
month = month.month
|
||||
url = reverse("history:month", kwargs={"year": year, "month": month})
|
||||
elif year:
|
||||
if isinstance(year, datetime.date):
|
||||
year = year.year
|
||||
url = reverse("history:year", kwargs={"year": year})
|
||||
|
||||
kwargs = {k: v for k, v in kwargs.items() if v}
|
||||
|
||||
if kwargs:
|
||||
return f"{url}?{parse.urlencode(kwargs)}"
|
||||
return url
|
||||
|
|
13
nummi/history/urls.py
Normal file
13
nummi/history/urls.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
app_name = "history"
|
||||
urlpatterns = [
|
||||
path(
|
||||
"month/<int:year>/<int:month>",
|
||||
views.TransactionMonthView.as_view(),
|
||||
name="month",
|
||||
),
|
||||
path("year/<int:year>", views.TransactionYearView.as_view(), name="year"),
|
||||
]
|
54
nummi/history/views.py
Normal file
54
nummi/history/views.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
from django.views.generic.dates import MonthArchiveView, YearArchiveView
|
||||
from history.utils import history
|
||||
from main.views import UserMixin
|
||||
from transaction.models import Transaction
|
||||
|
||||
|
||||
class ACFilterMixin:
|
||||
def get_queryset(self):
|
||||
queryset = super().get_queryset()
|
||||
if account := self.request.GET.get("account"):
|
||||
queryset = queryset.filter(statement__account=account)
|
||||
if category := self.request.GET.get("category"):
|
||||
queryset = queryset.filter(category=category)
|
||||
|
||||
return queryset
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context_data = super().get_context_data(**kwargs)
|
||||
if account := self.request.GET.get("account"):
|
||||
context_data["account"] = get_object_or_404(
|
||||
self.request.user.account_set, pk=account
|
||||
)
|
||||
if category := self.request.GET.get("category"):
|
||||
context_data["category"] = get_object_or_404(
|
||||
self.request.user.category_set, pk=category
|
||||
)
|
||||
|
||||
return context_data
|
||||
|
||||
|
||||
class TransactionMonthView(UserMixin, ACFilterMixin, MonthArchiveView):
|
||||
model = Transaction
|
||||
date_field = "date"
|
||||
context_object_name = "transactions"
|
||||
month_format = "%m"
|
||||
template_name = "history/transaction_month.html"
|
||||
|
||||
|
||||
class TransactionYearView(UserMixin, ACFilterMixin, YearArchiveView):
|
||||
model = Transaction
|
||||
date_field = "date"
|
||||
context_object_name = "transactions"
|
||||
make_object_list = True
|
||||
template_name = "history/transaction_year.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context_data = super().get_context_data(**kwargs)
|
||||
h_data = context_data.get("transactions")
|
||||
if not (context_data.get("account") or context_data.get("category")):
|
||||
h_data = h_data.exclude(category__budget=False)
|
||||
context_data["history"] = history(h_data)
|
||||
|
||||
return context_data
|
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -126,6 +126,7 @@ def page_url(context, page):
|
|||
|
||||
@register.simple_tag
|
||||
def url_get(name, **kwargs):
|
||||
kwargs = {k: v for k, v in kwargs.items() if v}
|
||||
return f"{reverse(name)}?{parse.urlencode(kwargs)}"
|
||||
|
||||
|
||||
|
|
|
@ -10,5 +10,6 @@ urlpatterns = [
|
|||
path("category/", include("category.urls")),
|
||||
path("statement/", include("statement.urls")),
|
||||
path("transaction/", include("transaction.urls")),
|
||||
path("history/", include("history.urls")),
|
||||
path("search/", include("search.urls")),
|
||||
]
|
||||
|
|
|
@ -192,7 +192,7 @@ class TransactionFiltersForm(forms.Form):
|
|||
|
||||
self.fields["category"].queryset = _user.category_set
|
||||
self.fields["account"].queryset = _user.account_set
|
||||
print(kwargs.get("initial"))
|
||||
|
||||
if acc_id := kwargs.get("initial", {}).get("account"):
|
||||
self.fields["statement"].queryset = (
|
||||
self.fields["account"].queryset.get(id=acc_id).statement_set
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
{% extends "main/base.html" %}
|
||||
{% load i18n static main_extras transaction_extras category %}
|
||||
{% block link %}
|
||||
{{ block.super }}
|
||||
{% css "main/css/plot.css" %}
|
||||
{% css "main/css/table.css" %}
|
||||
{% endblock link %}
|
||||
{% block title %}
|
||||
{{ year|date:"Y" }} – {{ block.super }}
|
||||
{% endblock title %}
|
||||
{% block body %}
|
||||
<h2>{{ month|date:"F Y"|capfirst }}</h2>
|
||||
<p class="pagination">{% year_url month %}</p>
|
||||
<p class="pagination n3">
|
||||
{% if previous_month %}
|
||||
{% month_url previous_month fmt="F Y" %}
|
||||
{% endif %}
|
||||
{% month_url month cls="cur" fmt="F Y" %}
|
||||
{% if next_month %}
|
||||
{% month_url next_month fmt="F Y" %}
|
||||
{% endif %}
|
||||
</p>
|
||||
{% if account or category %}
|
||||
<p class="back">
|
||||
<a class="big-link"
|
||||
href="{% url "transaction_month" month.year month.month %}">{{ "arrow-go-back"|remix }}{% translate "Back" %}</a>
|
||||
{% if account %}
|
||||
<a class="big-link" href="{% url "account" account.pk %}">{{ account.icon|remix }}{{ account }}</a>
|
||||
{% endif %}
|
||||
{% if category %}
|
||||
<a class="big-link" href="{% url "category" category.pk %}">{{ category.icon|remix }}{{ category }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if not category %}
|
||||
<section>
|
||||
<h3>{% translate "Categories" %}</h3>
|
||||
{% category_plot transactions month=month %}
|
||||
</section>
|
||||
{% endif %}
|
||||
<section>
|
||||
<h3>{% translate "Transactions" %}</h3>
|
||||
{% url_get "transactions" start_date=month end_date=month|end_of_month category=category.id account=account.id as t_url %}
|
||||
<p>
|
||||
<a class="big-link" href="{{ t_url }}">{{ "list-check"|remixnl }}{% translate "View all transactions" %}</a>
|
||||
</p>
|
||||
{% transaction_table transactions n_max=8 transactions_url=t_url %}
|
||||
</section>
|
||||
<p class="pagination">{% year_url month %}</p>
|
||||
<p class="pagination n3">
|
||||
{% if previous_month %}
|
||||
{% month_url previous_month fmt="F Y" %}
|
||||
{% endif %}
|
||||
{% month_url month cls="cur" fmt="F Y" %}
|
||||
{% if next_month %}
|
||||
{% month_url next_month fmt="F Y" %}
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endblock body %}
|
|
@ -1,62 +0,0 @@
|
|||
{% extends "main/base.html" %}
|
||||
{% load i18n static main_extras transaction_extras category %}
|
||||
{% block link %}
|
||||
{{ block.super }}
|
||||
{% css "main/css/plot.css" %}
|
||||
{% css "main/css/table.css" %}
|
||||
{% endblock link %}
|
||||
{% block title %}
|
||||
{{ year|date:"Y" }} – {{ block.super }}
|
||||
{% endblock title %}
|
||||
{% block body %}
|
||||
<h2>{{ year|date:"Y" }}</h2>
|
||||
<p class="pagination n3">
|
||||
{% if previous_year %}
|
||||
{% year_url previous_year cls="prev" %}
|
||||
{% endif %}
|
||||
{% year_url year cls="cur" %}
|
||||
{% if next_year %}
|
||||
{% year_url next_year cls="next" %}
|
||||
{% endif %}
|
||||
</p>
|
||||
{% if account or category %}
|
||||
<p class="back">
|
||||
<a class="big-link" href="{% url "transaction_year" year.year %}">{{ "arrow-go-back"|remix }}{% translate "Back" %}</a>
|
||||
{% if account %}
|
||||
<a class="big-link" href="{% url "account" account.pk %}">{{ account.icon|remix }}{{ account }}</a>
|
||||
{% endif %}
|
||||
{% if category %}
|
||||
<a class="big-link" href="{% url "category" category.pk %}">{{ category.icon|remix }}{{ category }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if history %}
|
||||
<section>
|
||||
<h3>{% translate "History" %}</h3>
|
||||
{% include "history/plot.html" %}
|
||||
</section>
|
||||
{% endif %}
|
||||
{% if not category %}
|
||||
<section>
|
||||
<h3>{% translate "Categories" %}</h3>
|
||||
{% category_plot transactions year=year %}
|
||||
</section>
|
||||
{% endif %}
|
||||
<section>
|
||||
<h3>{% translate "Transactions" %}</h3>
|
||||
{% url_get "transactions" start_date=year end_date=year|end_of_year category=category.id account=account.id as t_url %}
|
||||
<p>
|
||||
<a class="big-link" href="{{ t_url }}">{{ "list-check"|remixnl }}{% translate "View all transactions" %}</a>
|
||||
</p>
|
||||
{% transaction_table transactions n_max=8 transactions_url=t_url %}
|
||||
</section>
|
||||
<p class="pagination n3">
|
||||
{% if previous_year %}
|
||||
{% year_url previous_year cls="prev" %}
|
||||
{% endif %}
|
||||
{% year_url year cls="cur" %}
|
||||
{% if next_year %}
|
||||
{% year_url next_year cls="next" %}
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endblock body %}
|
|
@ -4,16 +4,6 @@ from . import views
|
|||
|
||||
urlpatterns = [
|
||||
path("list", views.TransactionListView.as_view(), name="transactions"),
|
||||
path(
|
||||
"history/<int:year>",
|
||||
views.TransactionYearView.as_view(),
|
||||
name="transaction_year",
|
||||
),
|
||||
path(
|
||||
"history/<int:year>/<int:month>",
|
||||
views.TransactionMonthView.as_view(),
|
||||
name="transaction_month",
|
||||
),
|
||||
path("new", views.TransactionCreateView.as_view(), name="new_transaction"),
|
||||
path("<transaction>", views.TransactionDetailView.as_view(), name="transaction"),
|
||||
path(
|
||||
|
|
|
@ -1,21 +1,16 @@
|
|||
from account.models import Account
|
||||
from category.models import Category
|
||||
from django.contrib import messages
|
||||
from django.forms import ValidationError
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.html import format_html
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic.dates import MonthArchiveView, YearArchiveView
|
||||
from django.views.generic.edit import FormView
|
||||
from history.utils import history
|
||||
from main.views import (
|
||||
NummiCreateView,
|
||||
NummiDeleteView,
|
||||
NummiDetailView,
|
||||
NummiListView,
|
||||
NummiUpdateView,
|
||||
UserMixin,
|
||||
)
|
||||
|
||||
from .forms import (
|
||||
|
@ -170,7 +165,7 @@ class InvoiceDeleteView(NummiDeleteView):
|
|||
class TransactionListView(NummiListView):
|
||||
model = Transaction
|
||||
context_object_name = "transactions"
|
||||
paginate_by = 50
|
||||
paginate_by = 32
|
||||
|
||||
def get_queryset(self, **kwargs):
|
||||
queryset = super().get_queryset(**kwargs)
|
||||
|
@ -203,54 +198,3 @@ class TransactionListView(NummiListView):
|
|||
initial=filters, user=self.request.user
|
||||
)
|
||||
return data
|
||||
|
||||
|
||||
class TransactionACMixin:
|
||||
model = Transaction
|
||||
|
||||
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(statement__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)
|
||||
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
|
||||
|
||||
|
||||
class TransactionMonthView(UserMixin, TransactionACMixin, MonthArchiveView):
|
||||
model = Transaction
|
||||
date_field = "date"
|
||||
context_object_name = "transactions"
|
||||
month_format = "%m"
|
||||
|
||||
|
||||
class TransactionYearView(UserMixin, TransactionACMixin, YearArchiveView):
|
||||
model = Transaction
|
||||
date_field = "date"
|
||||
context_object_name = "transactions"
|
||||
make_object_list = True
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context_data = super().get_context_data(**kwargs)
|
||||
h_data = context_data.get("transactions")
|
||||
if not (context_data.get("account") or context_data.get("category")):
|
||||
h_data = h_data.exclude(category__budget=False)
|
||||
context_data["history"] = history(h_data)
|
||||
|
||||
return context_data
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue