diff --git a/nummi/main/static/main/css/form.css b/nummi/main/static/main/css/form.css index 06063b9..ec5fa90 100644 --- a/nummi/main/static/main/css/form.css +++ b/nummi/main/static/main/css/form.css @@ -42,6 +42,9 @@ form { &:has(> textarea) { grid-template-rows: min-content 1fr; + textarea { + height: 100%; + } } &:has(> input[type="checkbox"]) { grid-template-columns: min-content 1fr; @@ -68,6 +71,10 @@ form { z-index: 10; } + > a { + padding: 0.5rem; + } + input, select, textarea { diff --git a/nummi/statement/forms.py b/nummi/statement/forms.py index dbf77df..c3841f2 100644 --- a/nummi/statement/forms.py +++ b/nummi/statement/forms.py @@ -1,4 +1,5 @@ from django import forms +from django.forms.widgets import Select from django.utils.translation import gettext_lazy as _ from main.forms import NummiFileInput, NummiForm from transaction.models import Transaction @@ -50,3 +51,7 @@ class StatementForm(NummiForm): instance.transaction_set.add(*new_transactions, bulk=False) return instance + + +class StatementSelect(Select): + template_name = "statement/forms/widgets/statement.html" diff --git a/nummi/statement/templates/statement/forms/widgets/statement.html b/nummi/statement/templates/statement/forms/widgets/statement.html new file mode 100644 index 0000000..0689a39 --- /dev/null +++ b/nummi/statement/templates/statement/forms/widgets/statement.html @@ -0,0 +1,12 @@ +{% load main_extras %} +{% if widget.attrs.disabled %} + {% for group_name, group_choices, group_index in widget.optgroups %} + {% for option in group_choices %} + {% if option.selected %} + {{ "file"|remix }}{{ option.label }} + {% endif %} + {% endfor %} + {% endfor %} +{% else %} + {% include "django/forms/widgets/select.html" %} +{% endif %} diff --git a/nummi/transaction/forms.py b/nummi/transaction/forms.py index 5c6160e..31f7b09 100644 --- a/nummi/transaction/forms.py +++ b/nummi/transaction/forms.py @@ -2,6 +2,7 @@ import json from category.forms import CategorySelect from main.forms import DatalistInput, NummiFileInput, NummiForm +from statement.forms import StatementSelect from .models import Invoice, Transaction from .utils import get_datalist @@ -22,6 +23,7 @@ class TransactionForm(NummiForm): "description", ] widgets = { + "statement": StatementSelect(), "category": CategorySelect(), } diff --git a/nummi/transaction/views.py b/nummi/transaction/views.py index c3f854f..39f0f98 100644 --- a/nummi/transaction/views.py +++ b/nummi/transaction/views.py @@ -12,7 +12,6 @@ from main.views import ( NummiUpdateView, UserMixin, ) -from statement.models import Statement from .forms import InvoiceForm, TransactionForm from .models import Invoice, Transaction @@ -23,23 +22,19 @@ class TransactionCreateView(NummiCreateView): form_class = TransactionForm def get_initial(self): - _queryset = Statement.objects.filter(user=self.request.user) + initial = super().get_initial() if "statement" in self.kwargs: - self.statement = get_object_or_404(_queryset, pk=self.kwargs["statement"]) - else: - self.statement = _queryset.first() - return {"statement": self.statement} + initial["statement"] = get_object_or_404( + self.request.user.statement_set, pk=self.kwargs["statement"] + ) + + return initial def get_form_kwargs(self): if "statement" in self.kwargs: return super().get_form_kwargs() | {"disable_statement": True} return super().get_form_kwargs() - def get_context_data(self, **kwargs): - if "statement" in self.kwargs: - return super().get_context_data(**kwargs) | {"statement": self.statement} - return super().get_context_data(**kwargs) - class InvoiceCreateView(NummiCreateView): model = Invoice