Create statement detail view separate from edit view

This commit is contained in:
Edgar P. Burkhart 2024-12-31 16:47:36 +01:00
parent fd140a9314
commit 7d4dbdc0df
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
7 changed files with 83 additions and 21 deletions

View file

@ -0,0 +1,21 @@
const beforeUnloadHandler = (event) => {
event.preventDefault();
};
const forms = document.querySelectorAll("form");
for (let form of forms) {
let inputs = form.querySelectorAll("input");
for (input of inputs) {
input.addEventListener("input", (event) => {
window.addEventListener("beforeunload", beforeUnloadHandler);
});
}
form.addEventListener("submit", (event) => {
window.removeEventListener("beforeunload", beforeUnloadHandler);
});
form.addEventListener("reset", (event) => {
window.removeEventListener("beforeunload", beforeUnloadHandler);
});
}

View file

@ -12,6 +12,7 @@
{% block link %}
<link rel="icon" href="{% static "main/svg/logo.svg" %}" type="image/svg+xml">
{% css "main/css/main.css" %}
{% js "main/js/base.js" %}
{% endblock %}
</head>
<body>

View file

@ -46,10 +46,7 @@ class Statement(AccountModel):
)
def __str__(self):
desc = _("%(date)s statement") % {"date": self.date}
if hasattr(self, "account"):
return f"{desc} {self.account}"
return desc
return _("%(date)s statement") % {"date": self.date}
def save(self, *args, **kwargs):
if Statement.objects.filter(id=self.id).exists():

View file

@ -0,0 +1,29 @@
{% extends "main/base.html" %}
{% load i18n main_extras statement_extras category %}
{% block title %}
{{ statement }}
Nummi
{% endblock %}
{% block link %}
{{ block.super }}
{% css "main/css/form.css" %}
{% css "main/css/table.css" %}
{% css "main/css/plot.css" %}
{% endblock %}
{% block body %}
<h2>{{ statement }}</h2>
<p>
<a href="{{ account.get_absolute_url }}">{{ account.icon|remix }}{{ account }}</a>
</p>
<p>
<a href="{% url "edit_statement" statement.id %}">{{ "file-edit"|remix }}{% translate "Edit statement" %}</a>
</p>
<section>
<h3>{% translate "Transactions" %}</h3>
{% include "transaction/transaction_table.html" %}
</section>
<section>
<h3>{% translate "Categories" %}</h3>
{% category_plot transactions budget=False statement=object %}
</section>
{% endblock %}

View file

@ -6,23 +6,10 @@
{% block h2_new %}
{% translate "New statement" %}
{% endblock %}
{% block h2 %}{{ form.instance }}{% endblock %}
{% block pre %}
{% if account %}
{% if not instance|adding %}
<p>
<a href="{{ account.get_absolute_url }}">{{ account.icon|remix }}{{ account }}</a>
<a href="{{ instance.get_absolute_url }}">{{ "arrow-go-back"|remix }}{% translate "Back" %}</a>
</p>
{% endif %}
{% endblock %}
{% block tables %}
{% if not form.instance|adding %}
<section>
<h3>{% translate "Categories" %}</h3>
{% category_plot transactions budget=False statement=object %}
</section>
<section>
<h3>{% translate "Transactions" %}</h3>
{% include "transaction/transaction_table.html" %}
</section>
{% endif %}
{% endblock %}

View file

@ -6,7 +6,10 @@ from . import views
urlpatterns = [
path("list", views.StatementListView.as_view(), name="statements"),
path("new", views.StatementCreateView.as_view(), name="new_statement"),
path("<statement>", views.StatementUpdateView.as_view(), name="statement"),
path("<statement>", views.StatementDetailView.as_view(), name="statement"),
path(
"<statement>/edit", views.StatementUpdateView.as_view(), name="edit_statement"
),
path(
"<statement>/transaction/list",
views.StatementTListView.as_view(),

View file

@ -1,7 +1,13 @@
from account.models import Account
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy
from main.views import NummiCreateView, NummiDeleteView, NummiListView, NummiUpdateView
from main.views import (
NummiCreateView,
NummiDeleteView,
NummiDetailView,
NummiListView,
NummiUpdateView,
)
from transaction.views import TransactionListView
from .forms import StatementForm
@ -57,6 +63,24 @@ class StatementDeleteView(NummiDeleteView):
pk_url_kwarg = "statement"
class StatementDetailView(NummiDetailView):
model = Statement
pk_url_kwarg = "statement"
context_object_name = "statement"
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
statement = data.get("statement")
return data | {
"account": statement.account,
"new_transaction_url": reverse_lazy(
"new_transaction", kwargs={"statement": statement.pk}
),
"transactions": statement.transaction_set.all(),
}
class StatementListView(NummiListView):
model = Statement
context_object_name = "statements"