Compare commits

..

No commits in common. "2736c2ae9dc224d8972c41c639b686201c75ab32" and "b05c3e67607b0b66ae3451710f01ed53fc8f6a3f" have entirely different histories.

21 changed files with 59 additions and 161 deletions

View File

@ -1,16 +0,0 @@
# Generated by Django 4.1.4 on 2023-04-22 09:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("account", "0001_initial"),
]
operations = [
migrations.AlterModelTable(
name="account",
table=None,
),
]

View File

@ -27,10 +27,10 @@ class Account(UserModel):
return str(self.name) return str(self.name)
def get_absolute_url(self): def get_absolute_url(self):
return reverse("account", args=(self.pk,)) return reverse("account", kwargs={"pk": self.pk})
def get_delete_url(self): def get_delete_url(self):
return reverse("del_account", args=(self.pk,)) return reverse("del_account", kwargs={"pk": self.pk})
class Meta: class Meta:
ordering = ["-default", "name"] ordering = ["-default", "name"]

View File

@ -1,35 +1,33 @@
from django.urls import path from django.urls import path
from statement.views import StatementCreateView
from transaction.views import TransactionMonthView
from . import views from . import views
urlpatterns = [ urlpatterns = [
path("", views.AccountCreateView.as_view(), name="new_account"), path("account", views.AccountCreateView.as_view(), name="new_account"),
path("<account>", views.AccountUpdateView.as_view(), name="account"), path("account/<pk>", views.AccountUpdateView.as_view(), name="account"),
path( path(
"<account>/transactions", "account/<pk>/transactions",
views.AccountTListView.as_view(), views.AccountTListView.as_view(),
name="account_transactions", name="account_transactions",
), ),
path( path(
"<account>/statements", "account/<pk>/statements",
views.AccountSListView.as_view(), views.AccountSListView.as_view(),
name="account_statements", name="account_statements",
), ),
path( path(
"<account>/statement", "account/<account>/statement",
StatementCreateView.as_view(), views.StatementCreateView.as_view(),
name="new_statement", name="new_statement",
), ),
path( path(
"<account>/delete", "account/<pk>/delete",
views.AccountDeleteView.as_view(), views.AccountDeleteView.as_view(),
name="del_account", name="del_account",
), ),
path( path(
"<account>/history/<int:year>/<int:month>", "account/<account>/history/<int:year>/<int:month>",
TransactionMonthView.as_view(), views.TransactionMonthView.as_view(),
name="transaction_month", name="transaction_month",
), ),
] ]

View File

@ -1,6 +1,6 @@
from django.urls import reverse_lazy from django.urls import reverse_lazy
from main.views import NummiCreateView, NummiDeleteView, NummiUpdateView from main.views import NummiCreateView, NummiDeleteView, NummiUpdateView
from statement.views import StatementListView from snapshot.views import SnapshotListView
from transaction.utils import history from transaction.utils import history
from transaction.views import TransactionListView from transaction.views import TransactionListView
@ -11,12 +11,13 @@ from .models import Account
class AccountCreateView(NummiCreateView): class AccountCreateView(NummiCreateView):
model = Account model = Account
form_class = AccountForm form_class = AccountForm
template_name = "main/form/account.html"
class AccountUpdateView(NummiUpdateView): class AccountUpdateView(NummiUpdateView):
model = Account model = Account
form_class = AccountForm form_class = AccountForm
pk_url_kwarg = "account" template_name = "main/form/account.html"
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
_max = 8 _max = 8
@ -28,34 +29,34 @@ class AccountUpdateView(NummiUpdateView):
data["transactions_url"] = reverse_lazy( data["transactions_url"] = reverse_lazy(
"account_transactions", args=(account.pk,) "account_transactions", args=(account.pk,)
) )
_statements = account.statement_set.all() _snapshots = account.snapshot_set.all()
if _statements.count() > _max: if _snapshots.count() > _max:
data["statements_url"] = reverse_lazy( data["snapshots_url"] = reverse_lazy(
"account_statements", args=(account.pk,) "account_snapshots", args=(account.pk,)
) )
return data | { return data | {
"transactions": _transactions[:8], "transactions": _transactions[:8],
"new_statement_url": reverse_lazy( "new_snapshot_url": reverse_lazy(
"new_statement", kwargs={"account": account.pk} "new_snapshot", kwargs={"account": account.pk}
), ),
"statements": _statements[:8], "snapshots": _snapshots[:8],
"history": history(account.transaction_set), "history": history(account.transaction_set),
} }
class AccountDeleteView(NummiDeleteView): class AccountDeleteView(NummiDeleteView):
model = Account model = Account
pk_url_kwarg = "account"
class AccountMixin: class AccountMixin:
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(account=self.kwargs.get("account")) return super().get_queryset().filter(account=self.kwargs.get("pk"))
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
return super().get_context_data(**kwargs) | { return super().get_context_data(**kwargs) | {
"account": Account.objects.get(pk=self.kwargs.get("account")), "object": Account.objects.get(pk=self.kwargs.get("pk")),
"account": True,
} }
@ -63,5 +64,5 @@ class AccountTListView(AccountMixin, TransactionListView):
pass pass
class AccountSListView(AccountMixin, StatementListView): class AccountSListView(AccountMixin, SnapshotListView):
pass pass

View File

@ -1,16 +0,0 @@
# Generated by Django 4.1.4 on 2023-04-22 09:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("category", "0001_initial"),
]
operations = [
migrations.AlterModelTable(
name="category",
table=None,
),
]

View File

@ -1,5 +1,4 @@
from django.urls import path from django.urls import path
from transaction.views import TransactionMonthView
from . import views from . import views
@ -16,7 +15,7 @@ urlpatterns = [
), ),
path( path(
"category/<category>/history/<int:year>/<int:month>", "category/<category>/history/<int:year>/<int:month>",
TransactionMonthView.as_view(), views.TransactionMonthView.as_view(),
name="transaction_month", name="transaction_month",
), ),
] ]

View File

@ -25,7 +25,6 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.RenameField("Transaction", "snapshot", "statement"),
migrations.SeparateDatabaseAndState( migrations.SeparateDatabaseAndState(
database_operations=database_operations, database_operations=database_operations,
state_operations=state_operations, state_operations=state_operations,

View File

@ -33,9 +33,9 @@
accesskey="h">{% translate "Home" %}</a> accesskey="h">{% translate "Home" %}</a>
</li> </li>
<li> <li>
<a href="{% url "statements" %}" <a href="{% url "snapshots" %}"
class="{% if request.resolver_match.url_name == "statements" %}cur{% endif %}"> class="{% if request.resolver_match.url_name == "snapshots" %}cur{% endif %}">
{% translate "Statements" %} {% translate "Snapshots" %}
</a> </a>
</li> </li>
<li> <li>
@ -50,9 +50,9 @@
accesskey="a">{% translate "Create account" %}</a> accesskey="a">{% translate "Create account" %}</a>
</li> </li>
<li> <li>
<a href="{% url "new_statement" %}" <a href="{% url "new_snapshot" %}"
class="{% if request.resolver_match.url_name == "new_statement" %}cur{% endif %}" class="{% if request.resolver_match.url_name == "new_snapshot" %}cur{% endif %}"
accesskey="s">{% translate "Create statement" %}</a> accesskey="s">{% translate "Create snapshot" %}</a>
</li> </li>
<li> <li>
<a href="{% url "new_category" %}" <a href="{% url "new_category" %}"

View File

@ -11,7 +11,7 @@
{% block tables %} {% block tables %}
{% if not form.instance|adding %} {% if not form.instance|adding %}
<h3>{% translate "Statements" %}</h3> <h3>{% translate "Statements" %}</h3>
{% include "main/table/statement.html" %} {% include "main/table/snapshot.html" %}
{% endif %} {% endif %}
{% if transactions %} {% if transactions %}
<h3>{% translate "Transactions" %}</h3> <h3>{% translate "Transactions" %}</h3>

View File

@ -36,9 +36,9 @@
</p> </p>
{% endspaceless %} {% endspaceless %}
{% endif %} {% endif %}
{% if statements %} {% if snapshots %}
<h2>{% translate "Statements" %}</h2> <h2>{% translate "Snapshots" %}</h2>
{% include "main/table/statement.html" %} {% include "main/table/snapshot.html" %}
{% endif %} {% endif %}
{% if history.data %} {% if history.data %}
<h2>{% translate "History" %}</h2> <h2>{% translate "History" %}</h2>

View File

@ -4,8 +4,7 @@
{% load i18n %} {% load i18n %}
{% block title %} {% block title %}
{% translate "Statements" %} {% translate "Statements" %}
{% if account %} {{ account }}{% endif %} {% if object %} {{ object }}{% endif %}
{% if category %} {{ category }}{% endif %}
Nummi Nummi
{% endblock %} {% endblock %}
{% block link %} {% block link %}
@ -19,21 +18,12 @@
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<h2>{% translate "Statements" %}</h2> <h2>{% translate "Statements" %}</h2>
{% if account %} {% if object %}<a href="{{ object.get_absolute_url }}">{{ object }}</a>{% endif %}
<p> {% if snapshots %}
<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/list/pagination.html" %}
{% include "main/table/statement.html" %} {% include "main/table/snapshot.html" %}
{% include "main/list/pagination.html" %} {% include "main/list/pagination.html" %}
{% else %} {% else %}
<p>{% translate "No statements to show" %}</p> <p>{% translate "No snapshots to show" %}</p>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -4,8 +4,7 @@
{% load i18n %} {% load i18n %}
{% block title %} {% block title %}
{% translate "Transactions" %} {% translate "Transactions" %}
{% if account %} {{ account }}{% endif %} {% if object %} {{ object }}{% endif %}
{% if category %} {{ category }}{% endif %}
{% if search %} {% if search %}
{% translate "Search" %} {% translate "Search" %}
{% endif %} {% endif %}
@ -22,16 +21,7 @@
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<h2>{% translate "Transactions" %}</h2> <h2>{% translate "Transactions" %}</h2>
{% if account %} {% if object %}<a href="{{ object.get_absolute_url }}">{{ object }}</a>{% endif %}
<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 %} {% if search %}
<a href="{% url "search" %}">{% translate "Search" %}</a> <a href="{% url "search" %}">{% translate "Search" %}</a>
{% endif %} {% endif %}

View File

@ -1,12 +1,12 @@
{% load main_extras %} {% load main_extras %}
{% load i18n %} {% load i18n %}
{% if new_statement_url %} {% if new_snapshot_url %}
<p> <p>
<a href="{{ new_statement_url }}">{% translate "Create statement" %}</a> <a href="{{ new_snapshot_url }}">{% translate "Create statement" %}</a>
</p> </p>
{% endif %} {% endif %}
<div id="statements" class="table"> <div id="snapshots" class="table">
<table class="full-width {% if statements_url %}more{% endif %}"> <table class="full-width {% if snapshots_url %}more{% endif %}">
<colgroup> <colgroup>
<col class="icon" span="2"> <col class="icon" span="2">
<col class="date"> <col class="date">
@ -28,7 +28,7 @@
<th>{% translate "Transactions" %}</th> <th>{% translate "Transactions" %}</th>
</thead> </thead>
<tbody> <tbody>
{% for snap in statements %} {% for snap in snapshots %}
<tr> <tr>
{% if snap.sum == snap.diff %} {% if snap.sum == snap.diff %}
<td class="c green">{{ "check"|remix }}</td> <td class="c green">{{ "check"|remix }}</td>
@ -39,12 +39,12 @@
{% if snap.file %}<a href="{{ snap.file.url }}">{{ "attachment"|remix }}</a>{% endif %} {% if snap.file %}<a href="{{ snap.file.url }}">{{ "attachment"|remix }}</a>{% endif %}
</td> </td>
<th class="date" scope="row"> <th class="date" scope="row">
<a href="{% url "statement" snap.id %}">{{ snap.date|date:"Y-m-d" }}</a> <a href="{% url "snapshot" pk=snap.id %}">{{ snap.date|date:"Y-m-d" }}</a>
</th> </th>
{% if not account %} {% if not account %}
<td class="r">{{ snap.account.icon|remix }}</td> <td class="r">{{ snap.account.icon|remix }}</td>
<td> <td>
<a href="{% url "account" snap.account.id %}">{{ snap.account }}</a> <a href="{% url "account" pk=snap.account.id %}">{{ snap.account }}</a>
</td> </td>
{% endif %} {% endif %}
<td class="value">{{ snap.value|value }}</td> <td class="value">{{ snap.value|value }}</td>
@ -55,8 +55,8 @@
</tbody> </tbody>
</table> </table>
</div> </div>
{% if statements_url %} {% if snapshots_url %}
<p> <p>
<a href="{{ statements_url }}">{% translate "View all statements" %}</a> <a href="{{ snapshots_url }}">{% translate "View all statements" %}</a>
</p> </p>
{% endif %} {% endif %}

View File

@ -43,7 +43,7 @@
</td> </td>
<td class="date">{{ trans.date|date:"Y-m-d" }}</td> <td class="date">{{ trans.date|date:"Y-m-d" }}</td>
<th scope="row" class="l"> <th scope="row" class="l">
<a href="{% url "transaction" trans.id %}">{{ trans.name }}</a> <a href="{% url "transaction" pk=trans.id %}">{{ trans.name }}</a>
</th> </th>
<td class="value">{{ trans.value|pmvalue }}</td> <td class="value">{{ trans.value|pmvalue }}</td>
<td>{{ trans.trader|default_if_none:"" }}</td> <td>{{ trans.trader|default_if_none:"" }}</td>
@ -51,7 +51,7 @@
{% if trans.category %} {% if trans.category %}
<td class="r">{{ trans.category.icon|remix }}</td> <td class="r">{{ trans.category.icon|remix }}</td>
<td> <td>
<a href="{% url "category" trans.category.id %}">{{ trans.category }}</a> <a href="{% url "category" pk=trans.category.id %}">{{ trans.category }}</a>
</td> </td>
{% else %} {% else %}
<td colspan="2"></td> <td colspan="2"></td>
@ -60,7 +60,7 @@
{% if not account %} {% if not account %}
<td class="r">{{ trans.account.icon|remix }}</td> <td class="r">{{ trans.account.icon|remix }}</td>
<td> <td>
<a href="{% url "account" trans.account.id %}">{{ trans.account }}</a> <a href="{% url "account" pk=trans.account.id %}">{{ trans.account }}</a>
</td> </td>
{% endif %} {% endif %}
</tr> </tr>

View File

@ -1,4 +1,4 @@
from django.urls import include, path from django.urls import path
from . import views from . import views
@ -6,9 +6,4 @@ urlpatterns = [
path("", views.IndexView.as_view(), name="index"), path("", views.IndexView.as_view(), name="index"),
path("login", views.LoginView.as_view(), name="login"), path("login", views.LoginView.as_view(), name="login"),
path("logout", views.LogoutView.as_view(), name="logout"), 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")),
] ]

View File

@ -66,11 +66,6 @@ class NummiDeleteView(UserMixin, DeleteView):
template_name = "main/confirm_delete.html" template_name = "main/confirm_delete.html"
success_url = reverse_lazy("index") 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): class LoginView(auth_views.LoginView):
template_name = "main/login.html" template_name = "main/login.html"

View File

@ -1,16 +0,0 @@
# Generated by Django 4.1.4 on 2023-04-22 09:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("statement", "0001_initial"),
]
operations = [
migrations.AlterModelTable(
name="statement",
table=None,
),
]

View File

@ -1,10 +1,9 @@
from django.urls import path from django.urls import path
from transaction.views import TransactionCreateView
from . import views from . import views
urlpatterns = [ urlpatterns = [
path("statements", views.StatementListView.as_view(), name="statements"), path("statements", views.SnapshotListView.as_view(), name="statements"),
path("statement", views.StatementCreateView.as_view(), name="new_statement"), path("statement", views.StatementCreateView.as_view(), name="new_statement"),
path("statement/<pk>", views.StatementUpdateView.as_view(), name="statement"), path("statement/<pk>", views.StatementUpdateView.as_view(), name="statement"),
path( path(
@ -14,7 +13,7 @@ urlpatterns = [
), ),
path( path(
"statement/<statement>/transaction", "statement/<statement>/transaction",
TransactionCreateView.as_view(), views.TransactionCreateView.as_view(),
name="new_transaction", name="new_transaction",
), ),
path( path(

View File

@ -1,6 +1,6 @@
from category.models import Category from category.models import Category
from main.forms import NummiFileInput, NummiForm from main.forms import NummiFileInput, NummiForm
from statement.models import Statement from Statement.models import Statement
from .models import Invoice, Transaction from .models import Invoice, Transaction

View File

@ -1,20 +0,0 @@
# Generated by Django 4.1.4 on 2023-04-22 09:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("transaction", "0001_initial"),
]
operations = [
migrations.AlterModelTable(
name="invoice",
table=None,
),
migrations.AlterModelTable(
name="transaction",
table=None,
),
]