Compare commits

..

2 Commits

Author SHA1 Message Date
Edgar P. Burkhart 2ba21fbd10
Refactor pagination for month/year 2024-01-02 14:56:13 +01:00
Edgar P. Burkhart 35b26f2d10
Add year link on month view 2024-01-02 14:36:36 +01:00
11 changed files with 96 additions and 88 deletions

View File

@ -1,5 +1,6 @@
{% load main_extras %} {% load main_extras %}
{% load history_extras %} {% load history_extras %}
{% load transaction_extras %}
{% load i18n %} {% load i18n %}
<div class="history plot"> <div class="history plot">
<table class="full-width"> <table class="full-width">
@ -24,7 +25,7 @@
{% if date.sum_m or date.sum_p %} {% if date.sum_m or date.sum_p %}
<tr {% if not date.month.month|divisibleby:"2" %}class="even"{% endif %}> <tr {% if not date.month.month|divisibleby:"2" %}class="even"{% endif %}>
<td class="icon">{% up_down_icon date.sum %}</td> <td class="icon">{% up_down_icon date.sum %}</td>
<th class="date" scope="row">{% month_url date.month account=account category=category %}</th> <th class="date" scope="row">{% month_url date.month %}</th>
<td class="value">{{ date.sum_m|pmrvalue }}</td> <td class="value">{{ date.sum_m|pmrvalue }}</td>
<td class="bar m">{% plot_bar date.sum date.sum_m history.max.pm %}</td> <td class="bar m">{% plot_bar date.sum date.sum_m history.max.pm %}</td>
<td class="bar p">{% plot_bar date.sum date.sum_p history.max.pm %}</td> <td class="bar p">{% plot_bar date.sum date.sum_p history.max.pm %}</td>
@ -52,7 +53,7 @@
{% regroup history.data by month.year as years_list %} {% regroup history.data by month.year as years_list %}
{% for y, year in years_list reversed %} {% for y, year in years_list reversed %}
<tr> <tr>
<th class="date" scope="row">{% year_url y account=account category=category %}</th> <th class="date" scope="row">{% year_url y %}</th>
{% for m in year %} {% for m in year %}
{% if forloop.parentloop.last and forloop.first %} {% if forloop.parentloop.last and forloop.first %}
{% empty_calendar_cells_start m.month.month %} {% empty_calendar_cells_start m.month.month %}

View File

@ -1,13 +1,9 @@
import math import math
from django import template from django import template
from django.template.defaultfilters import date
from django.urls import reverse
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from main.templatetags.main_extras import pmrvalue, remix from main.templatetags.main_extras import pmrvalue, remix
from ..utils import ac_url
register = template.Library() register = template.Library()
@ -39,24 +35,6 @@ def up_down_icon(val):
return remix("arrow-down-s", "red") return remix("arrow-down-s", "red")
@register.simple_tag
def month_url(month, **kwargs):
url_name, url_params = ac_url(
"transaction_month", {"year": month.year, "month": month.month}, **kwargs
)
url = reverse(url_name, kwargs=url_params)
return mark_safe(f"""<a href="{url}">{ date(month, "Y-m") }</a>""")
@register.simple_tag
def year_url(year, **kwargs):
url_name, url_params = ac_url("transaction_year", {"year": year}, **kwargs)
url = reverse(url_name, kwargs=url_params)
return mark_safe(f"""<a href="{url}">{ year }</a>""")
@register.simple_tag @register.simple_tag
def plot_bar(s, sum_pm, s_max): def plot_bar(s, sum_pm, s_max):
_res = "" _res = ""

View File

@ -1,14 +1,9 @@
import datetime import datetime
from django.db.models import Func, Max, Min, Q, Sum from django.db.models import Max, Min, Q, Sum
from django.db.models.functions import Abs, TruncMonth from django.db.models.functions import Abs, TruncMonth
class GenerateMonth(Func):
function = "generate_series"
template = "%(function)s(%(expressions)s, '1 month')::date"
def history(transaction_set): def history(transaction_set):
if not transaction_set.exists(): if not transaction_set.exists():
return None return None
@ -50,14 +45,3 @@ def history(transaction_set):
"sum": _history.aggregate(max=Max(Abs("sum")))["max"], "sum": _history.aggregate(max=Max(Abs("sum")))["max"],
}, },
} }
def ac_url(url_name, url_params, account=None, category=None):
if account:
url_name = "account_" + url_name
url_params |= {"account": account.pk}
elif category:
url_name = "category_" + url_name
url_params |= {"category": category.pk}
return url_name, url_params

View File

@ -163,6 +163,23 @@ footer {
} }
} }
} }
&.n3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
width: max-content;
margin: auto;
.prev {
grid-column: 1;
}
.cur {
grid-column: 2;
}
.next {
grid-column: 3;
}
}
} }
@media (width < 1024px) { @media (width < 1024px) {

View File

@ -19,6 +19,7 @@
<h2> <h2>
{% block h2 %}{% endblock %} {% block h2 %}{% endblock %}
</h2> </h2>
{% block backlinks %}
{% if account %} {% if account %}
<p> <p>
<a class="big-link" href="{{ account.get_absolute_url }}">{{ account.icon|remix }}{{ account }}</a> <a class="big-link" href="{{ account.get_absolute_url }}">{{ account.icon|remix }}{{ account }}</a>
@ -34,6 +35,7 @@
<a href="{% url "search" %}">{% translate "Search" %}</a> <a href="{% url "search" %}">{% translate "Search" %}</a>
</p> </p>
{% endif %} {% endif %}
{% endblock %}
{% include "main/pagination.html" %} {% include "main/pagination.html" %}
{% block table %}{% endblock %} {% block table %}{% endblock %}
{% include "main/pagination.html" %} {% include "main/pagination.html" %}

View File

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n transaction_extras %}
{% if page_obj %} {% if page_obj %}
<p class="pagination"> <p class="pagination">
{% for page in paginator.page_range %} {% for page in paginator.page_range %}
@ -8,28 +8,25 @@
</p> </p>
{% endif %} {% endif %}
{% if month %} {% if month %}
<p class="pagination"> <p class="pagination">{% year_url month %}</p>
{% with month=previous_month %} <p class="pagination n3">
{% include "main/pagination_month.html" %} {% if previous_month %}
{% endwith %} {% month_url previous_month %}
{% with cur=True %} {% endif %}
{% include "main/pagination_month.html" %} {% month_url month cls="cur" %}
{% endwith %} {% if next_month %}
{% with month=next_month %} {% month_url next_month %}
{% include "main/pagination_month.html" %} {% endif %}
{% endwith %}
</p> </p>
{% endif %} {% endif %}
{% if year %} {% if year %}
<p class="pagination"> <p class="pagination n3">
{% with year=previous_year %} {% if previous_year %}
{% include "main/pagination_year.html" %} {% year_url previous_year cls="prev" %}
{% endwith %} {% endif %}
{% with cur=True %} {% year_url year cls="cur" %}
{% include "main/pagination_year.html" %} {% if next_year %}
{% endwith %} {% year_url next_year cls="next" %}
{% with year=next_year %} {% endif %}
{% include "main/pagination_year.html" %}
{% endwith %}
</p> </p>
{% endif %} {% endif %}

View File

@ -1,5 +0,0 @@
{% load i18n %}
{% if month %}
<a {% if cur %}class="cur"{% endif %}
href="{% if account %}{% url "account_transaction_month" account.id month.year month.month %}{% elif category %}{% url "category_transaction_month" category.id month.year month.month %}{% else %}{% url "transaction_month" month.year month.month %}{% endif %}">{{ month|date:"F Y"|capfirst }}</a>
{% endif %}

View File

@ -1,5 +0,0 @@
{% load i18n %}
{% if year %}
<a {% if cur %}class="cur"{% endif %}
href="{% if account %}{% url "account_transaction_year" account.id year.year %}{% elif category %}{% url "category_transaction_year" category.id year.year %}{% else %}{% url "transaction_year" year.year %}{% endif %}">{{ year|date:"Y" }}</a>
{% endif %}

View File

@ -1,5 +1,5 @@
{% extends "transaction/transaction_list.html" %} {% extends "transaction/transaction_list.html" %}
{% load i18n main_extras static category %} {% load i18n main_extras transaction_extras static category %}
{% block link %} {% block link %}
{{ block.super }} {{ block.super }}
{% css "main/css/plot.css" %} {% css "main/css/plot.css" %}

View File

@ -0,0 +1,30 @@
import datetime
from django import template
from django.template.defaultfilters import date
from django.urls import reverse
from django.utils.safestring import mark_safe
from ..utils import ac_url
register = template.Library()
@register.simple_tag(takes_context=True)
def month_url(context, month, cls=""):
url_name, url_params = ac_url(
"transaction_month", {"year": month.year, "month": month.month}, context
)
url = reverse(url_name, kwargs=url_params)
return mark_safe(f"""<a class="{cls}" href="{url}">{ date(month, "Y-m") }</a>""")
@register.simple_tag(takes_context=True)
def year_url(context, year, cls=""):
if isinstance(year, datetime.date):
year = year.year
url_name, url_params = ac_url("transaction_year", {"year": year}, context)
url = reverse(url_name, kwargs=url_params)
return mark_safe(f"""<a class="{cls}" href="{url}">{ year }</a>""")

View File

@ -0,0 +1,9 @@
def ac_url(url_name, url_params, context):
if account := context.get("account"):
url_name = "account_" + url_name
url_params |= {"account": account.pk}
elif category := context.get("category"):
url_name = "category_" + url_name
url_params |= {"category": category.pk}
return url_name, url_params