diff --git a/nummi/main/static/main/css/form.css b/nummi/main/static/main/css/form.css index 412d942..a29048f 100644 --- a/nummi/main/static/main/css/form.css +++ b/nummi/main/static/main/css/form.css @@ -6,6 +6,14 @@ form { line-height: 2rem; } +form ul.errorlist { + grid-column: 1 / -1; + color: var(--red); + font-weight: 550; + list-style-type: "! "; + margin: 0; +} + form input, form select, form textarea { diff --git a/nummi/main/templates/main/category.html b/nummi/main/templates/main/category.html index ec1c51c..0a7bd04 100644 --- a/nummi/main/templates/main/category.html +++ b/nummi/main/templates/main/category.html @@ -11,7 +11,7 @@ {% block body %}

{{ category }}

-
+ {% csrf_token %} {{ form }}
diff --git a/nummi/main/templates/main/form.html b/nummi/main/templates/main/form.html index 8268316..4f7354b 100644 --- a/nummi/main/templates/main/form.html +++ b/nummi/main/templates/main/form.html @@ -1,5 +1,5 @@ - {% for field in form %} - {{ field.errors }} - - {{ field }} - {% endfor %} +{% for field in form %} +{{ field.errors }} + +{{ field }} +{% endfor %} diff --git a/nummi/main/templates/main/index.html b/nummi/main/templates/main/index.html index fe09c99..ba97a3a 100644 --- a/nummi/main/templates/main/index.html +++ b/nummi/main/templates/main/index.html @@ -29,7 +29,7 @@ {% for snap in snapshots %}
- {{ snap.date|date:"Y-m-d" }} + {{ snap.date|date:"Y-m-d" }} {% value snap.value %} diff --git a/nummi/main/templates/main/snapshot.html b/nummi/main/templates/main/snapshot.html index 72d7993..18bde0b 100644 --- a/nummi/main/templates/main/snapshot.html +++ b/nummi/main/templates/main/snapshot.html @@ -21,7 +21,7 @@ {{ snapshot }} - + {% csrf_token %} {{ form }}
diff --git a/nummi/main/templates/main/transaction.html b/nummi/main/templates/main/transaction.html index f0b4deb..0b693ab 100644 --- a/nummi/main/templates/main/transaction.html +++ b/nummi/main/templates/main/transaction.html @@ -10,8 +10,9 @@

{{ transaction }}

{% spaceless %} - + {% csrf_token %} + {{ form }}
@@ -35,8 +36,9 @@

Add Invoice

- + {% csrf_token %} + {{ invoice_form }}
diff --git a/nummi/main/urls.py b/nummi/main/urls.py index fc2eb94..272fc29 100644 --- a/nummi/main/urls.py +++ b/nummi/main/urls.py @@ -9,23 +9,13 @@ urlpatterns = [ path("transactions", views.TransactionListView.as_view(), name="transactions"), path("transaction", views.transaction, name="transaction"), path("transaction/", views.transaction, name="transaction"), - path( - "transaction//update", views.update_transaction, name="update_transaction" - ), path("transaction//del", views.del_transaction, name="del_transaction"), - path("transaction//add_invoice", views.add_invoice, name="add_invoice"), - path( - "transaction//del_invoice/", - views.del_invoice, - name="del_invoice", - ), + path("del_invoice//", views.del_invoice, name="del_invoice"), path("invoice/", views.invoice, name="invoice"), path("category", views.category, name="category"), path("category/", views.category, name="category"), - path("category//update", views.update_category, name="update_category"), path("category//del", views.del_category, name="del_category"), path("snapshot", views.snapshot, name="snapshot"), - path("snapshot/", views.snapshot, name="snapshot"), - path("snapshot/update/", views.update_snapshot, name="update_snapshot"), - path("snapshot//del", views.del_snapshot, name="del_snapshot"), + path("snapshot/", views.snapshot, name="snapshot"), + path("snapshot//del", views.del_snapshot, name="del_snapshot"), ] diff --git a/nummi/main/views.py b/nummi/main/views.py index 59c572b..2aafd3b 100644 --- a/nummi/main/views.py +++ b/nummi/main/views.py @@ -50,32 +50,41 @@ class TransactionListView(LoginRequiredMixin, ListView): @login_required def transaction(request, uuid=None): - if uuid is None: - _transaction = Transaction() - _invoices = [] - else: - _transaction = get_object_or_404(Transaction, id=uuid) - _invoices = Invoice.objects.filter(transaction=_transaction) + _form = None + _inv_form = None + _invoices = [] + if request.method == "GET": + if uuid is None: + _transaction = Transaction() + else: + _transaction = get_object_or_404(Transaction, id=uuid) + elif request.method == "POST": + if request.POST["form"] == "transaction": + _transaction, _ = Transaction.objects.get_or_create(id=uuid) + _form = TransactionForm(request.POST, instance=_transaction) + if _form.is_valid(): + _form.save() + _inv_form = InvoiceForm(instance=Invoice(transaction=_transaction)) + elif request.POST["form"] == "invoice": + _transaction = get_object_or_404(Transaction, id=uuid) + _invoice = Invoice(transaction=_transaction) + _inv_form = InvoiceForm(request.POST, request.FILES, instance=_invoice) + if _inv_form.is_valid(): + _inv_form.save() + return render( request, "main/transaction.html", { "transaction": _transaction, - "form": TransactionForm(instance=_transaction), - "invoices": _invoices, - "invoice_form": InvoiceForm(instance=Invoice(transaction=_transaction)), + "form": _form or TransactionForm(instance=_transaction), + "invoices": _invoices or Invoice.objects.filter(transaction=_transaction), + "invoice_form": _inv_form + or InvoiceForm(instance=Invoice(transaction=_transaction)), }, ) -@login_required -def update_transaction(request, uuid): - _transaction, _ = Transaction.objects.get_or_create(id=uuid) - _form = TransactionForm(request.POST, instance=_transaction) - _form.save() - return redirect(transaction, uuid=uuid) - - @login_required def del_transaction(request, uuid): _transaction = get_object_or_404(Transaction, id=uuid) @@ -90,15 +99,6 @@ def invoice(request, uuid): return HttpResponse(_file.read(), content_type="application/pdf") -@login_required -def add_invoice(request, uuid): - _transaction = get_object_or_404(Transaction, id=uuid) - _invoice = Invoice(transaction=_transaction) - _form = InvoiceForm(request.POST, request.FILES, instance=_invoice) - _form.save() - return redirect(transaction, uuid=uuid) - - @login_required def del_invoice(request, uuid, invoice_id): _invoice = get_object_or_404(Invoice, id=invoice_id) @@ -108,31 +108,29 @@ def del_invoice(request, uuid, invoice_id): @login_required def category(request, uuid=None): - if uuid is None: - _category = Category() - _transactions = None - else: - _category = get_object_or_404(Category, id=uuid) - _transactions = Transaction.objects.filter(category=_category) + if request.method == "GET": + if uuid is None: + _category = Category() + else: + _category = get_object_or_404(Category, id=uuid) + _form = CategoryForm(instance=_category) + elif request.method == "POST": + _category, _ = Category.objects.get_or_create(id=uuid) + _form = CategoryForm(request.POST, instance=_category) + if _form.is_valid(): + _form.save() + return render( request, "main/category.html", { "category": _category, - "form": CategoryForm(instance=_category), - "transactions": _transactions, + "form": _form, + "transactions": Transaction.objects.filter(category=_category), }, ) -@login_required -def update_category(request, uuid): - _category, _ = Category.objects.get_or_create(id=uuid) - _form = CategoryForm(request.POST, instance=_category) - _form.save() - return redirect(category, uuid=uuid) - - @login_required def del_category(request, uuid): _category = get_object_or_404(Category, id=uuid) @@ -141,35 +139,38 @@ def del_category(request, uuid): @login_required -def snapshot(request, date=None): - if date is None: - _snapshot = Snapshot() - else: - _snapshot = get_object_or_404(Snapshot, date=date) +def snapshot(request, uuid=None): + if request.method == "GET": + if uuid is None: + _snapshot = Snapshot() + else: + _snapshot = get_object_or_404(Snapshot, id=uuid) + context = { + "snapshot": _snapshot, + "form": SnapshotForm(instance=_snapshot), + } + elif request.method == "POST": + try: + _snapshot = Snapshot.objects.get(id=uuid) + except Snapshot.DoesNotExist: + _snapshot = Snapshot(id=uuid) + _form = SnapshotForm(request.POST, instance=_snapshot) + if _form.is_valid(): + _form.save() + context = { + "snapshot": _snapshot, + "form": _form, + } + return render( request, "main/snapshot.html", - { - "snapshot": _snapshot, - "form": SnapshotForm(instance=_snapshot), - }, + context, ) @login_required -def update_snapshot(request, uuid): - try: - _snapshot = Snapshot.objects.get(id=uuid) - except Snapshot.DoesNotExist: - _snapshot = Snapshot(id=uuid) - _form = SnapshotForm(request.POST, instance=_snapshot) - if _form.is_valid(): - _form.save() - return redirect(snapshot, date=_snapshot.date) - - -@login_required -def del_snapshot(request, date): - _snapshot = get_object_or_404(Snapshot, date=date) +def del_snapshot(request, uuid): + _snapshot = get_object_or_404(Snapshot, id=uuid) _snapshot.delete() return redirect(index)