diff --git a/app/apps/transactions/forms.py b/app/apps/transactions/forms.py index 1ea1c65..456cd3a 100644 --- a/app/apps/transactions/forms.py +++ b/app/apps/transactions/forms.py @@ -6,6 +6,7 @@ from crispy_forms.layout import ( Row, Column, Field, + Div, ) from django import forms from django.db.models import Q @@ -206,10 +207,21 @@ class TransactionForm(forms.ModelForm): else: self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput() self.helper.layout.append( - FormActions( + Div( NoClassSubmit( - "submit", _("Add"), css_class="btn btn-outline-primary w-100" + "submit", _("Add"), css_class="btn btn-outline-primary" ), + NoClassSubmit( + "submit_and_similar", + _("Save and add similar"), + css_class="btn btn-outline-primary", + ), + NoClassSubmit( + "submit_and_another", + _("Save and add another"), + css_class="btn btn-outline-primary", + ), + css_class="d-grid gap-2", ), ) diff --git a/app/apps/transactions/views/transactions.py b/app/apps/transactions/views/transactions.py index 5854309..4071acc 100644 --- a/app/apps/transactions/views/transactions.py +++ b/app/apps/transactions/views/transactions.py @@ -43,16 +43,33 @@ def transaction_add(request): year=year, ).date() + update = False + if request.method == "POST": form = TransactionForm(request.POST) if form.is_valid(): form.save() messages.success(request, _("Transaction added successfully")) - return HttpResponse( - status=204, - headers={"HX-Trigger": "updated, hide_offcanvas"}, - ) + if "submit" in request.POST: + return HttpResponse( + status=204, + headers={"HX-Trigger": "updated, hide_offcanvas"}, + ) + elif "submit_and_another" in request.POST: + form = TransactionForm( + initial={ + "date": expected_date, + "type": transaction_type, + }, + ) + update = True + elif "submit_and_similar" in request.POST: + form = TransactionForm( + initial=request.POST.dict(), + ) + update = True + else: form = TransactionForm( initial={ @@ -61,11 +78,15 @@ def transaction_add(request): }, ) - return render( + response = render( request, "transactions/fragments/add.html", {"form": form}, ) + if update: + response["HX-Trigger"] = "updated" + + return response @login_required