Implemented frontend for account
This commit is contained in:
parent
bb4a8c5db1
commit
719436f9ad
16 changed files with 97 additions and 61 deletions
|
@ -27,10 +27,10 @@ class Account(UserModel):
|
|||
return str(self.name)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse("account", kwargs={"pk": self.pk})
|
||||
return reverse("account", args=(self.pk,))
|
||||
|
||||
def get_delete_url(self):
|
||||
return reverse("del_account", kwargs={"pk": self.pk})
|
||||
return reverse("del_account", args=(self.pk,))
|
||||
|
||||
class Meta:
|
||||
ordering = ["-default", "name"]
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
{% block tables %}
|
||||
{% if not form.instance|adding %}
|
||||
<h3>{% translate "Statements" %}</h3>
|
||||
{% include "main/table/snapshot.html" %}
|
||||
{% include "main/table/statement.html" %}
|
||||
{% endif %}
|
||||
{% if transactions %}
|
||||
<h3>{% translate "Transactions" %}</h3>
|
|
@ -1,33 +1,35 @@
|
|||
from django.urls import path
|
||||
from statement.views import StatementCreateView
|
||||
from transaction.views import TransactionMonthView
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("account", views.AccountCreateView.as_view(), name="new_account"),
|
||||
path("account/<pk>", views.AccountUpdateView.as_view(), name="account"),
|
||||
path("", views.AccountCreateView.as_view(), name="new_account"),
|
||||
path("<account>", views.AccountUpdateView.as_view(), name="account"),
|
||||
path(
|
||||
"account/<pk>/transactions",
|
||||
"<account>/transactions",
|
||||
views.AccountTListView.as_view(),
|
||||
name="account_transactions",
|
||||
),
|
||||
path(
|
||||
"account/<pk>/statements",
|
||||
"<account>/statements",
|
||||
views.AccountSListView.as_view(),
|
||||
name="account_statements",
|
||||
),
|
||||
path(
|
||||
"account/<account>/statement",
|
||||
views.StatementCreateView.as_view(),
|
||||
"<account>/statement",
|
||||
StatementCreateView.as_view(),
|
||||
name="new_statement",
|
||||
),
|
||||
path(
|
||||
"account/<pk>/delete",
|
||||
"<account>/delete",
|
||||
views.AccountDeleteView.as_view(),
|
||||
name="del_account",
|
||||
),
|
||||
path(
|
||||
"account/<account>/history/<int:year>/<int:month>",
|
||||
views.TransactionMonthView.as_view(),
|
||||
"<account>/history/<int:year>/<int:month>",
|
||||
TransactionMonthView.as_view(),
|
||||
name="transaction_month",
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse_lazy
|
||||
from main.views import NummiCreateView, NummiDeleteView, NummiUpdateView
|
||||
from snapshot.views import SnapshotListView
|
||||
from statement.views import StatementListView
|
||||
from transaction.utils import history
|
||||
from transaction.views import TransactionListView
|
||||
|
||||
|
@ -11,13 +12,12 @@ from .models import Account
|
|||
class AccountCreateView(NummiCreateView):
|
||||
model = Account
|
||||
form_class = AccountForm
|
||||
template_name = "main/form/account.html"
|
||||
|
||||
|
||||
class AccountUpdateView(NummiUpdateView):
|
||||
model = Account
|
||||
form_class = AccountForm
|
||||
template_name = "main/form/account.html"
|
||||
pk_url_kwarg = "account"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
_max = 8
|
||||
|
@ -29,40 +29,42 @@ class AccountUpdateView(NummiUpdateView):
|
|||
data["transactions_url"] = reverse_lazy(
|
||||
"account_transactions", args=(account.pk,)
|
||||
)
|
||||
_snapshots = account.snapshot_set.all()
|
||||
if _snapshots.count() > _max:
|
||||
data["snapshots_url"] = reverse_lazy(
|
||||
"account_snapshots", args=(account.pk,)
|
||||
_statements = account.statement_set.all()
|
||||
if _statements.count() > _max:
|
||||
data["statements_url"] = reverse_lazy(
|
||||
"account_statements", args=(account.pk,)
|
||||
)
|
||||
|
||||
return data | {
|
||||
"transactions": _transactions[:8],
|
||||
"new_snapshot_url": reverse_lazy(
|
||||
"new_snapshot", kwargs={"account": account.pk}
|
||||
"new_statement_url": reverse_lazy(
|
||||
"new_statement", kwargs={"account": account.pk}
|
||||
),
|
||||
"snapshots": _snapshots[:8],
|
||||
"statements": _statements[:8],
|
||||
"history": history(account.transaction_set),
|
||||
}
|
||||
|
||||
|
||||
class AccountDeleteView(NummiDeleteView):
|
||||
model = Account
|
||||
pk_url_kwarg = "account"
|
||||
|
||||
|
||||
class AccountMixin:
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(account=self.kwargs.get("pk"))
|
||||
self.account = get_object_or_404(
|
||||
Account.objects.filter(user=self.request.user),
|
||||
pk=self.kwargs.get("account"),
|
||||
)
|
||||
return super().get_queryset().filter(account=self.account)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
return super().get_context_data(**kwargs) | {
|
||||
"object": Account.objects.get(pk=self.kwargs.get("pk")),
|
||||
"account": True,
|
||||
}
|
||||
return super().get_context_data(**kwargs) | {"account": self.account}
|
||||
|
||||
|
||||
class AccountTListView(AccountMixin, TransactionListView):
|
||||
pass
|
||||
|
||||
|
||||
class AccountSListView(AccountMixin, SnapshotListView):
|
||||
class AccountSListView(AccountMixin, StatementListView):
|
||||
pass
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from django.urls import path
|
||||
from transaction.views import TransactionMonthView
|
||||
|
||||
from . import views
|
||||
|
||||
|
@ -15,7 +16,7 @@ urlpatterns = [
|
|||
),
|
||||
path(
|
||||
"category/<category>/history/<int:year>/<int:month>",
|
||||
views.TransactionMonthView.as_view(),
|
||||
TransactionMonthView.as_view(),
|
||||
name="transaction_month",
|
||||
),
|
||||
]
|
||||
|
|
|
@ -33,9 +33,9 @@
|
|||
accesskey="h">{% translate "Home" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url "snapshots" %}"
|
||||
class="{% if request.resolver_match.url_name == "snapshots" %}cur{% endif %}">
|
||||
{% translate "Snapshots" %}
|
||||
<a href="{% url "statements" %}"
|
||||
class="{% if request.resolver_match.url_name == "statements" %}cur{% endif %}">
|
||||
{% translate "Statements" %}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -50,9 +50,9 @@
|
|||
accesskey="a">{% translate "Create account" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url "new_snapshot" %}"
|
||||
class="{% if request.resolver_match.url_name == "new_snapshot" %}cur{% endif %}"
|
||||
accesskey="s">{% translate "Create snapshot" %}</a>
|
||||
<a href="{% url "new_statement" %}"
|
||||
class="{% if request.resolver_match.url_name == "new_statement" %}cur{% endif %}"
|
||||
accesskey="s">{% translate "Create statement" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url "new_category" %}"
|
||||
|
|
|
@ -36,9 +36,9 @@
|
|||
</p>
|
||||
{% endspaceless %}
|
||||
{% endif %}
|
||||
{% if snapshots %}
|
||||
<h2>{% translate "Snapshots" %}</h2>
|
||||
{% include "main/table/snapshot.html" %}
|
||||
{% if statements %}
|
||||
<h2>{% translate "Statements" %}</h2>
|
||||
{% include "main/table/statement.html" %}
|
||||
{% endif %}
|
||||
{% if history.data %}
|
||||
<h2>{% translate "History" %}</h2>
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% translate "Statements" %}
|
||||
{% if object %}– {{ object }}{% endif %}
|
||||
{% if account %}– {{ account }}{% endif %}
|
||||
{% if category %}– {{ category }}{% endif %}
|
||||
– Nummi
|
||||
{% endblock %}
|
||||
{% block link %}
|
||||
|
@ -18,12 +19,21 @@
|
|||
{% endblock %}
|
||||
{% block body %}
|
||||
<h2>{% translate "Statements" %}</h2>
|
||||
{% if object %}<a href="{{ object.get_absolute_url }}">{{ object }}</a>{% endif %}
|
||||
{% if snapshots %}
|
||||
{% if account %}
|
||||
<p>
|
||||
<a href="{{ account.get_absolute_url }}">{{ account.icon|remix }}{{ account }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if category %}
|
||||
<p>
|
||||
<a href="{{ category.get_absolute_url }}">{{ category.icon|remix }}{{ category }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if statements %}
|
||||
{% include "main/list/pagination.html" %}
|
||||
{% include "main/table/snapshot.html" %}
|
||||
{% include "main/table/statement.html" %}
|
||||
{% include "main/list/pagination.html" %}
|
||||
{% else %}
|
||||
<p>{% translate "No snapshots to show" %}</p>
|
||||
<p>{% translate "No statements to show" %}</p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -4,7 +4,8 @@
|
|||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% translate "Transactions" %}
|
||||
{% if object %}– {{ object }}{% endif %}
|
||||
{% if account %}– {{ account }}{% endif %}
|
||||
{% if category %}– {{ category }}{% endif %}
|
||||
{% if search %}
|
||||
– {% translate "Search" %}
|
||||
{% endif %}
|
||||
|
@ -21,7 +22,16 @@
|
|||
{% endblock %}
|
||||
{% block body %}
|
||||
<h2>{% translate "Transactions" %}</h2>
|
||||
{% if object %}<a href="{{ object.get_absolute_url }}">{{ object }}</a>{% endif %}
|
||||
{% if account %}
|
||||
<p>
|
||||
<a href="{{ account.get_absolute_url }}">{{ account.icon|remix }}{{ account }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if category %}
|
||||
<p>
|
||||
<a href="{{ category.get_absolute_url }}">{{ category.icon|remix }}{{ category }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if search %}
|
||||
<a href="{% url "search" %}">{% translate "Search" %}</a>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{% load main_extras %}
|
||||
{% load i18n %}
|
||||
{% if new_snapshot_url %}
|
||||
{% if new_statement_url %}
|
||||
<p>
|
||||
<a href="{{ new_snapshot_url }}">{% translate "Create statement" %}</a>
|
||||
<a href="{{ new_statement_url }}">{% translate "Create statement" %}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
<div id="snapshots" class="table">
|
||||
<table class="full-width {% if snapshots_url %}more{% endif %}">
|
||||
<div id="statements" class="table">
|
||||
<table class="full-width {% if statements_url %}more{% endif %}">
|
||||
<colgroup>
|
||||
<col class="icon" span="2">
|
||||
<col class="date">
|
||||
|
@ -28,7 +28,7 @@
|
|||
<th>{% translate "Transactions" %}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for snap in snapshots %}
|
||||
{% for snap in statements %}
|
||||
<tr>
|
||||
{% if snap.sum == snap.diff %}
|
||||
<td class="c green">{{ "check"|remix }}</td>
|
||||
|
@ -39,12 +39,12 @@
|
|||
{% if snap.file %}<a href="{{ snap.file.url }}">{{ "attachment"|remix }}</a>{% endif %}
|
||||
</td>
|
||||
<th class="date" scope="row">
|
||||
<a href="{% url "snapshot" pk=snap.id %}">{{ snap.date|date:"Y-m-d" }}</a>
|
||||
<a href="{% url "statement" snap.id %}">{{ snap.date|date:"Y-m-d" }}</a>
|
||||
</th>
|
||||
{% if not account %}
|
||||
<td class="r">{{ snap.account.icon|remix }}</td>
|
||||
<td>
|
||||
<a href="{% url "account" pk=snap.account.id %}">{{ snap.account }}</a>
|
||||
<a href="{% url "account" snap.account.id %}">{{ snap.account }}</a>
|
||||
</td>
|
||||
{% endif %}
|
||||
<td class="value">{{ snap.value|value }}</td>
|
||||
|
@ -55,8 +55,8 @@
|
|||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% if snapshots_url %}
|
||||
{% if statements_url %}
|
||||
<p>
|
||||
<a href="{{ snapshots_url }}">{% translate "View all statements" %}</a>
|
||||
<a href="{{ statements_url }}">{% translate "View all statements" %}</a>
|
||||
</p>
|
||||
{% endif %}
|
|
@ -43,7 +43,7 @@
|
|||
</td>
|
||||
<td class="date">{{ trans.date|date:"Y-m-d" }}</td>
|
||||
<th scope="row" class="l">
|
||||
<a href="{% url "transaction" pk=trans.id %}">{{ trans.name }}</a>
|
||||
<a href="{% url "transaction" trans.id %}">{{ trans.name }}</a>
|
||||
</th>
|
||||
<td class="value">{{ trans.value|pmvalue }}</td>
|
||||
<td>{{ trans.trader|default_if_none:"" }}</td>
|
||||
|
@ -51,7 +51,7 @@
|
|||
{% if trans.category %}
|
||||
<td class="r">{{ trans.category.icon|remix }}</td>
|
||||
<td>
|
||||
<a href="{% url "category" pk=trans.category.id %}">{{ trans.category }}</a>
|
||||
<a href="{% url "category" trans.category.id %}">{{ trans.category }}</a>
|
||||
</td>
|
||||
{% else %}
|
||||
<td colspan="2"></td>
|
||||
|
@ -60,7 +60,7 @@
|
|||
{% if not account %}
|
||||
<td class="r">{{ trans.account.icon|remix }}</td>
|
||||
<td>
|
||||
<a href="{% url "account" pk=trans.account.id %}">{{ trans.account }}</a>
|
||||
<a href="{% url "account" trans.account.id %}">{{ trans.account }}</a>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from django.urls import path
|
||||
from django.urls import include, path
|
||||
|
||||
from . import views
|
||||
|
||||
|
@ -6,4 +6,9 @@ urlpatterns = [
|
|||
path("", views.IndexView.as_view(), name="index"),
|
||||
path("login", views.LoginView.as_view(), name="login"),
|
||||
path("logout", views.LogoutView.as_view(), name="logout"),
|
||||
path("account/", include("account.urls")),
|
||||
path("category/", include("category.urls")),
|
||||
path("statement/", include("statement.urls")),
|
||||
path("transaction/", include("transaction.urls")),
|
||||
path("search/", include("search.urls")),
|
||||
]
|
||||
|
|
|
@ -66,6 +66,11 @@ class NummiDeleteView(UserMixin, DeleteView):
|
|||
template_name = "main/confirm_delete.html"
|
||||
success_url = reverse_lazy("index")
|
||||
|
||||
def get_form_kwargs(self):
|
||||
_res = super().get_form_kwargs()
|
||||
_res.pop("user")
|
||||
return _res
|
||||
|
||||
|
||||
class LoginView(auth_views.LoginView):
|
||||
template_name = "main/login.html"
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
from django.urls import path
|
||||
from transaction.views import TransactionCreateView
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("statements", views.SnapshotListView.as_view(), name="statements"),
|
||||
path("statements", views.StatementListView.as_view(), name="statements"),
|
||||
path("statement", views.StatementCreateView.as_view(), name="new_statement"),
|
||||
path("statement/<pk>", views.StatementUpdateView.as_view(), name="statement"),
|
||||
path(
|
||||
|
@ -13,7 +14,7 @@ urlpatterns = [
|
|||
),
|
||||
path(
|
||||
"statement/<statement>/transaction",
|
||||
views.TransactionCreateView.as_view(),
|
||||
TransactionCreateView.as_view(),
|
||||
name="new_transaction",
|
||||
),
|
||||
path(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from category.models import Category
|
||||
from main.forms import NummiFileInput, NummiForm
|
||||
from Statement.models import Statement
|
||||
from statement.models import Statement
|
||||
|
||||
from .models import Invoice, Transaction
|
||||
|
||||
|
|
Loading…
Reference in a new issue