feat(transactions): add another transaction (or a similar one) right after adding one

This commit is contained in:
Herculino Trotta
2025-04-20 15:55:50 -03:00
parent b2f04ae1f9
commit 4b7ca61c29
2 changed files with 40 additions and 7 deletions

View File

@@ -6,6 +6,7 @@ from crispy_forms.layout import (
Row, Row,
Column, Column,
Field, Field,
Div,
) )
from django import forms from django import forms
from django.db.models import Q from django.db.models import Q
@@ -206,10 +207,21 @@ class TransactionForm(forms.ModelForm):
else: else:
self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput() self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput()
self.helper.layout.append( self.helper.layout.append(
FormActions( Div(
NoClassSubmit( 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",
), ),
) )

View File

@@ -43,16 +43,33 @@ def transaction_add(request):
year=year, year=year,
).date() ).date()
update = False
if request.method == "POST": if request.method == "POST":
form = TransactionForm(request.POST) form = TransactionForm(request.POST)
if form.is_valid(): if form.is_valid():
form.save() form.save()
messages.success(request, _("Transaction added successfully")) messages.success(request, _("Transaction added successfully"))
return HttpResponse( if "submit" in request.POST:
status=204, return HttpResponse(
headers={"HX-Trigger": "updated, hide_offcanvas"}, 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: else:
form = TransactionForm( form = TransactionForm(
initial={ initial={
@@ -61,11 +78,15 @@ def transaction_add(request):
}, },
) )
return render( response = render(
request, request,
"transactions/fragments/add.html", "transactions/fragments/add.html",
{"form": form}, {"form": form},
) )
if update:
response["HX-Trigger"] = "updated"
return response
@login_required @login_required