From 7fdc0e407f8ead10f26646679967e38b27890352 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Wed, 8 Jul 2026 17:39:12 +0200 Subject: [PATCH 01/10] Fixed bug in fuel_create --- expenses_manager/expenses/views.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 0f86762..ea5a610 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -705,12 +705,17 @@ def fuel_create(request): form = FuelEntryForm(request.POST, user=request.user) if form.is_valid(): + category, _ = Category.objects.get_or_create( + slug="gasolina", + owner=request.user, + defaults={"Name": "Gasolina"}, + ) expense = Expense.objects.create( owner=request.user, date=form.cleaned_data["date"], amount=form.cleaned_data["amount"], account=form.cleaned_data["account"], - category=Category.objects.get(slug="gasolina"), + category=category, description="Repostaje", ) @@ -725,9 +730,9 @@ def fuel_create(request): else: form = FuelEntryForm(user=request.user) - return render( - request, "fuel/create.html", {"active_menu": "fuel", "form": form} - ) + return render( + request, "fuel/create.html", {"active_menu": "fuel", "form": form} + ) @login_required From 595a3662207c54d00da79e6604693d5e11d4eadc Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 9 Jul 2026 14:57:17 +0200 Subject: [PATCH 02/10] Added the window "confirm delete" to the goals list --- .../templates/goals/confirm_delete.html | 18 ++++++++++++++++++ expenses_manager/expenses/views.py | 12 ++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 expenses_manager/expenses/templates/goals/confirm_delete.html diff --git a/expenses_manager/expenses/templates/goals/confirm_delete.html b/expenses_manager/expenses/templates/goals/confirm_delete.html new file mode 100644 index 0000000..63c2655 --- /dev/null +++ b/expenses_manager/expenses/templates/goals/confirm_delete.html @@ -0,0 +1,18 @@ +{% extends "expenses/base.html" %} +{% block title %}Objetivos{% endblock %} +{% block content %} + +

Eliminar objetivo

+ +

+ ¿Seguro que quieres eliminar el objetivo + {{ goal.name }}? +

+ +
+ {% csrf_token %} + + Cancelar +
+ +{% endblock %} \ No newline at end of file diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index ea5a610..ef1a3c7 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -943,8 +943,16 @@ def goal_delete(request, pk): pk=pk, owner=request.user) - goal.delete() - return redirect("goal_list") + if request.method == "POST": + goal.delete() + messages.success(request, "Objetivo eliminado.") + return redirect("goal_list") + + return render( + request, + "goals/confirm_delete.html", + {"active_menu":"settings", "goal":goal} + ) @login_required From 0821560c709e4f07189e8d8d2e150e93ea3a4c5c Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 9 Jul 2026 15:21:27 +0200 Subject: [PATCH 03/10] Fixed typo --- expenses_manager/expenses/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index ef1a3c7..ef204f3 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -708,7 +708,7 @@ def fuel_create(request): category, _ = Category.objects.get_or_create( slug="gasolina", owner=request.user, - defaults={"Name": "Gasolina"}, + defaults={"name": "Gasolina"}, ) expense = Expense.objects.create( owner=request.user, From e9f9d273916bcddabc2e24eb6693300be6456645 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 9 Jul 2026 15:58:56 +0200 Subject: [PATCH 04/10] Modified the account list to see the state "active" or "inactive" --- .../expenses/static/expenses/css/base.css | 22 +++++++++++++++++++ .../templates/expenses/account_list.html | 12 ++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/expenses_manager/expenses/static/expenses/css/base.css b/expenses_manager/expenses/static/expenses/css/base.css index 70ce213..d262472 100644 --- a/expenses_manager/expenses/static/expenses/css/base.css +++ b/expenses_manager/expenses/static/expenses/css/base.css @@ -430,4 +430,26 @@ tbody tr:hover { padding: 10px; border-radius: 8px; background: #f9f9f9; +} + +.row-inactive { + opacity: 0.55; +} + +.badge { + display: inline-block; + padding: 2px 8px; + border-radius: 12px; + font-size: 0.8em; + font-weight: 600; +} + +.badge-active { + background-color: #e6f4ea; + color: #1e7e34; +} + +.badge-inactive { + background-color: #fbe9e7; + color: #b71c1c; } \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/account_list.html b/expenses_manager/expenses/templates/expenses/account_list.html index 6867499..cc7bd4d 100644 --- a/expenses_manager/expenses/templates/expenses/account_list.html +++ b/expenses_manager/expenses/templates/expenses/account_list.html @@ -22,10 +22,18 @@ {{ account.name }} {{ account.initial_balance }} {{ account.current_balance|floatformat:2 }} - {{ account.active }} + + {% if account.active %} + Activa + {% else %} + Inactiva + {% endif %} + Editar - Eliminar + {% if account.active %} + Eliminar + {% endif %} {% empty %} From ffe00927f752dd413393ddffd04dbf1bfc8ac8b8 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 9 Jul 2026 18:15:39 +0200 Subject: [PATCH 05/10] Created the view "settings" --- .../expenses/static/expenses/css/base.css | 31 +++++++++++++++++++ .../expenses/templates/settings/index.html | 29 +++++++++++++++++ expenses_manager/expenses/views.py | 2 +- 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 expenses_manager/expenses/templates/settings/index.html diff --git a/expenses_manager/expenses/static/expenses/css/base.css b/expenses_manager/expenses/static/expenses/css/base.css index d262472..3def732 100644 --- a/expenses_manager/expenses/static/expenses/css/base.css +++ b/expenses_manager/expenses/static/expenses/css/base.css @@ -452,4 +452,35 @@ tbody tr:hover { .badge-inactive { background-color: #fbe9e7; color: #b71c1c; +} + +.settings-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 16px; + margin-top: 20px; +} + +.settings-card { + display: block; + padding: 16px; + border: 1px solid #ddd; + border-radius: 8px; + text-decoration: none; + color: inherit; + transition: box-shadow 0.15s ease; +} + +.settings-card:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.settings-card h3 { + margin: 0 0 4px 0; +} + +.settings-card p { + margin: 0; + font-size: 0.9em; + color: #666; } \ No newline at end of file diff --git a/expenses_manager/expenses/templates/settings/index.html b/expenses_manager/expenses/templates/settings/index.html new file mode 100644 index 0000000..7226251 --- /dev/null +++ b/expenses_manager/expenses/templates/settings/index.html @@ -0,0 +1,29 @@ +{% extends "expenses/base.html" %} + +{% block title %} + Configuración +{% endblock %} + +{% block content %} +

Configuración

+ +

Gestiona las categorías, etiquetas y objetivos de tu cuenta

+ + + +{% endblock %} \ No newline at end of file diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index ef204f3..bbb139e 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -957,4 +957,4 @@ def goal_delete(request, pk): @login_required def settings_index(request): - return render(request, "settings/index.html") + return render(request, "settings/index.html", {"active_menu": "settings"}) From 3616e6e8453557d5dfdd5ea23f636e2ef1fb6385 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Fri, 10 Jul 2026 09:34:38 +0200 Subject: [PATCH 06/10] Fixed bug that not show the tags as checkboxes, now yes --- expenses_manager/expenses/forms.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/expenses_manager/expenses/forms.py b/expenses_manager/expenses/forms.py index 67b42c4..89bc673 100644 --- a/expenses_manager/expenses/forms.py +++ b/expenses_manager/expenses/forms.py @@ -30,7 +30,7 @@ class ExpenseForm(forms.ModelForm): ] widgets = { "date": forms.DateInput(format="%Y-%m-%d", attrs={"type": "date"}), - "widget": forms.CheckboxSelectMultiple(), + "tags": forms.CheckboxSelectMultiple(), } @@ -95,6 +95,8 @@ class CategoryForm(forms.ModelForm): self.fields["parent"].queryset = Category.objects.filter( owner=user, ) + + class GoalForm(forms.ModelForm): class Meta: model = Goal From 08f888b9f3aad710c0ca64914a6b76a57ede0d54 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Fri, 10 Jul 2026 09:48:07 +0200 Subject: [PATCH 07/10] Modified the visualization of the tags in the expenses form --- .../expenses/static/expenses/css/base.css | 35 +++++++++++++++++++ .../templates/expenses/expense_form.html | 28 ++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/expenses_manager/expenses/static/expenses/css/base.css b/expenses_manager/expenses/static/expenses/css/base.css index 3def732..60255bc 100644 --- a/expenses_manager/expenses/static/expenses/css/base.css +++ b/expenses_manager/expenses/static/expenses/css/base.css @@ -483,4 +483,39 @@ tbody tr:hover { margin: 0; font-size: 0.9em; color: #666; +} + +.tag-chip-list { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin: 8px 0; + max-height: 160px; + overflow-y: auto; + padding: 8px; + border: 1px solid #ddd; + border-radius: 8px; +} + +.tag-chip { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 4px 10px; + border: 1px solid #ccc; + border-radius: 16px; + font-size: 0.85em; + cursor: pointer; + user-select: none; + background-color: #fafafa; +} + +.tag-chip input[type="checkbox"] { + accent-color: #1e7e34; +} + +.tag-chip:has(input:checked) { + background-color: #e6f4ea; + border-color: #1e7e34; + color: #1e7e34; } \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/expense_form.html b/expenses_manager/expenses/templates/expenses/expense_form.html index e2fe7e5..090e5d5 100644 --- a/expenses_manager/expenses/templates/expenses/expense_form.html +++ b/expenses_manager/expenses/templates/expenses/expense_form.html @@ -19,7 +19,33 @@
{% csrf_token %} - {{ form.as_p }} + + {% for field in form %} + {% if field.name == "tags" %} +
+ {{ field.label_tag }} +
+ {% for checkbox in field %} + + {% endfor %} +
+ {% if field.errors %} +
{{ field.errors }}
+ {% endif %} +
+ {% else %} +

+ {{ field.label_tag }} {{ field }} + {% if field.errors %} + {{ field.errors }} + {% endif %} +

+ {% endif %} + {% endfor %} +