Create statement detail view separate from edit view
This commit is contained in:
parent
fd140a9314
commit
7d4dbdc0df
7 changed files with 83 additions and 21 deletions
21
nummi/main/static/main/js/base.js
Normal file
21
nummi/main/static/main/js/base.js
Normal 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);
|
||||
});
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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():
|
||||
|
|
29
nummi/statement/templates/statement/statement_detail.html
Normal file
29
nummi/statement/templates/statement/statement_detail.html
Normal 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 %}
|
|
@ -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 %}
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue