From 50966d598bc0667a1f81cc02089ce63e7dc2470a Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 14 Sep 2026 19:58:07 -0300 Subject: [PATCH] fix: expose subcategory creation --- core/context.py | 1 + core/forms.py | 8 ++++++++ core/views.py | 11 ++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/core/context.py b/core/context.py index e84f912..96c9f59 100644 --- a/core/context.py +++ b/core/context.py @@ -5,6 +5,7 @@ def navigation(_request): ("imports-index", "Imports"), ("transaction-list", "Transactions"), ("category-list", "Categories"), + ("category-group-list", "Category groups"), ("payee-list", "Payees"), ("reconciliation-index", "Reconciliation"), ("monthly-report", "Reports"), diff --git a/core/forms.py b/core/forms.py index 4e0b673..6e89017 100644 --- a/core/forms.py +++ b/core/forms.py @@ -85,6 +85,14 @@ class AccountForm(forms.Form): class CategoryForm(forms.Form): name = forms.CharField(max_length=255) kind = forms.ChoiceField(choices=Category.Kind.choices) + group = forms.TypedChoiceField(required=False, empty_value=None, coerce=_uuid) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["group"].choices = [("", "Ungrouped"), *( + (str(row.pk), row.name) + for row in CategoryGroup.objects.filter(archived=False).order_by("name", "id") + )] class CategoryGroupForm(forms.Form): diff --git a/core/views.py b/core/views.py index 25cbd1f..edc9268 100644 --- a/core/views.py +++ b/core/views.py @@ -388,7 +388,16 @@ def account_create(request): def category_create(request): - return _reference_create(request, CategoryForm, create_category, "New category", "category-list") + form = CategoryForm(request.POST or None) + if request.method == "POST" and form.is_valid(): + try: + create_category(name=form.cleaned_data["name"], kind=form.cleaned_data["kind"], group_id=form.cleaned_data["group"], actor=LOCAL_ACTOR) + except DomainError as exc: + form.add_error(None, _domain_message(exc)) + else: + messages.success(request, "Category created.") + return redirect("category-list") + return render(request, "core/references/form.html", {"form": form, "title": "New category"}) def category_group_create(request):