diff --git a/nummi/main/static/main/css/main.css b/nummi/main/static/main/css/main.css
index efd523f..6903443 100644
--- a/nummi/main/static/main/css/main.css
+++ b/nummi/main/static/main/css/main.css
@@ -459,3 +459,32 @@ ul.statements {
}
}
}
+
+.multilink {
+ display: grid;
+ grid-auto-columns: max-content;
+}
+
+.transaction-details {
+ display: grid;
+ grid-auto-columns: minmax(32rem, max-content);
+ grid-auto-rows: min-content;
+
+ max-width: 32rem;
+
+ ul {
+ list-style: none;
+ display: grid;
+
+ li.value {
+ font-size: 1.5rem;
+ text-align: right;
+ }
+ }
+
+ p.description,
+ ul {
+ border: var(--gray) 1px solid;
+ padding: var(--gap);
+ }
+}
diff --git a/nummi/transaction/templates/transaction/invoice_table.html b/nummi/transaction/templates/transaction/invoice_table.html
index ac9e154..9b32285 100644
--- a/nummi/transaction/templates/transaction/invoice_table.html
+++ b/nummi/transaction/templates/transaction/invoice_table.html
@@ -7,32 +7,28 @@
- {% translate "Name" %} |
- {% translate "File" %} |
- {% translate "Delete" %} |
+ {% translate "Invoice" %} |
+ {{ "file-edit"|remix }} |
{% for invoice in transaction.invoices %}
- {{ invoice.name }}
+ {{ invoice.name }} [{{ invoice.file|extension }}]
|
- {% translate "File" %} [{{ invoice.file|extension }}]
- |
-
- {% translate "Delete" %}
+ {{ "file-edit"|remix }}
|
{% empty %}
- {% translate "No invoice" %} |
+ {% translate "No invoice" %} |
{% endfor %}
-
+
{% translate "Create invoice" %}
|
diff --git a/nummi/transaction/templates/transaction/transaction_detail.html b/nummi/transaction/templates/transaction/transaction_detail.html
new file mode 100644
index 0000000..bc5954e
--- /dev/null
+++ b/nummi/transaction/templates/transaction/transaction_detail.html
@@ -0,0 +1,42 @@
+{% extends "main/form/base.html" %}
+{% load i18n %}
+{% load main_extras %}
+{% block title %}
+ {{ transaction }}
+ – Nummi
+{% endblock %}
+{% block link %}
+ {{ block.super }}
+ {% css "main/css/form.css" %}
+ {% css "main/css/table.css" %}
+ {% css "main/css/plot.css" %}
+{% endblock %}
+{% block body %}
+ {{ transaction }}
+
+
+ {% translate "Invoices" %}
+ {% include "transaction/invoice_table.html" %}
+
+{% endblock %}
diff --git a/nummi/transaction/templates/transaction/transaction_form.html b/nummi/transaction/templates/transaction/transaction_form.html
index 5b40a0e..0b215bb 100644
--- a/nummi/transaction/templates/transaction/transaction_form.html
+++ b/nummi/transaction/templates/transaction/transaction_form.html
@@ -13,12 +13,9 @@
{{ statement }}
{% endif %}
-{% endblock %}
-{% block tables %}
- {% if not form.instance|adding %}
-
- {% translate "Invoices" %}
- {% include "transaction/invoice_table.html" %}
-
+ {% if not instance|adding %}
+
+ {{ "arrow-go-back"|remix }}{% translate "Back" %}
+
{% endif %}
{% endblock %}
diff --git a/nummi/transaction/urls.py b/nummi/transaction/urls.py
index 7c62eb8..c39aef6 100644
--- a/nummi/transaction/urls.py
+++ b/nummi/transaction/urls.py
@@ -15,7 +15,12 @@ urlpatterns = [
name="transaction_month",
),
path("new", views.TransactionCreateView.as_view(), name="new_transaction"),
- path("", views.TransactionUpdateView.as_view(), name="transaction"),
+ path("", views.TransactionDetailView.as_view(), name="transaction"),
+ path(
+ "/edit",
+ views.TransactionUpdateView.as_view(),
+ name="edit_transaction",
+ ),
path(
"/delete",
views.TransactionDeleteView.as_view(),
diff --git a/nummi/transaction/views.py b/nummi/transaction/views.py
index 6b1f56e..189b9ba 100644
--- a/nummi/transaction/views.py
+++ b/nummi/transaction/views.py
@@ -7,6 +7,7 @@ from history.utils import history
from main.views import (
NummiCreateView,
NummiDeleteView,
+ NummiDetailView,
NummiListView,
NummiUpdateView,
UserMixin,
@@ -61,6 +62,22 @@ class TransactionUpdateView(NummiUpdateView):
pk_url_kwarg = "transaction"
+class TransactionDetailView(NummiDetailView):
+ model = Transaction
+ pk_url_kwarg = "transaction"
+ context_object_name = "transaction"
+
+ def get_context_data(self, **kwargs):
+ data = super().get_context_data(**kwargs)
+ transaction = data.get("transaction")
+
+ return data | {
+ "account": transaction.statement.account,
+ "statement": transaction.statement,
+ "category": transaction.category,
+ }
+
+
class InvoiceUpdateView(NummiUpdateView):
model = Invoice
form_class = InvoiceForm