From 61047df4bf8a8fd5903520ce354b1c4866a645fe Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 23 Jul 2026 15:40:04 +0200 Subject: [PATCH] Added the Edit and Delete options to fuel --- .../templates/expenses/expense_list.html | 9 ++-- .../templates/fuel/confirm_delete.html | 26 +++++++++++ .../expenses/templates/fuel/create.html | 9 ++-- .../expenses/templates/fuel/list.html | 5 +++ expenses_manager/expenses/urls.py | 1 + expenses_manager/expenses/views.py | 44 ++++++++++++++++++- 6 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 expenses_manager/expenses/templates/fuel/confirm_delete.html diff --git a/expenses_manager/expenses/templates/expenses/expense_list.html b/expenses_manager/expenses/templates/expenses/expense_list.html index 3a88c9e..4fc13ab 100644 --- a/expenses_manager/expenses/templates/expenses/expense_list.html +++ b/expenses_manager/expenses/templates/expenses/expense_list.html @@ -128,12 +128,13 @@ {% endfor %} - {% if expense.category.slug == 'gasolina' %} - Editar + {% if expense.fuel_data %} + Editar + Eliminar {% else %} Editar - {% endif %} - Eliminar + Eliminar + {% endif %} {% empty %} diff --git a/expenses_manager/expenses/templates/fuel/confirm_delete.html b/expenses_manager/expenses/templates/fuel/confirm_delete.html new file mode 100644 index 0000000..1b7ee74 --- /dev/null +++ b/expenses_manager/expenses/templates/fuel/confirm_delete.html @@ -0,0 +1,26 @@ +{% extends "expenses/base.html" %} + +{% block title %} + Repostajes +{% endblock %} + +{% block content %} +

Eliminar repostaje.

+ +

+ ¿Seguro que quieres eliminar el repostaje del + {{ fuel.expense.date}} + ({{ fuel.liters }}L por {{fuel.expense.amount}}€)? +

+ +

+ Se eliminará también el gasto asociado en el listado de gastos. +

+ +
+ {% csrf_token %} + {% if next %}{% endif %} + + Cancelar +
+{% endblock %} \ No newline at end of file diff --git a/expenses_manager/expenses/templates/fuel/create.html b/expenses_manager/expenses/templates/fuel/create.html index 1f6985e..411b638 100644 --- a/expenses_manager/expenses/templates/fuel/create.html +++ b/expenses_manager/expenses/templates/fuel/create.html @@ -19,6 +19,7 @@
{% csrf_token %} + {% if next %}{% endif %} {{ form.as_p }}
- {% if editing %} - Volver + {% if next %} + Volver + {% elif editing %} + Volver {% else %} - Volver + Volver {% endif %} {% endblock %} \ No newline at end of file diff --git a/expenses_manager/expenses/templates/fuel/list.html b/expenses_manager/expenses/templates/fuel/list.html index d6e39bd..040afee 100644 --- a/expenses_manager/expenses/templates/fuel/list.html +++ b/expenses_manager/expenses/templates/fuel/list.html @@ -21,6 +21,7 @@ Gasto €/L Km desde anterior + @@ -32,6 +33,10 @@ {{ fuel.expense.amount }} {{ fuel.price_per_liter|floatformat:2 }} {{ fuel.km_since_previous }} + + Editar + Eliminar + {% endfor %} diff --git a/expenses_manager/expenses/urls.py b/expenses_manager/expenses/urls.py index ad395e9..f4e6907 100644 --- a/expenses_manager/expenses/urls.py +++ b/expenses_manager/expenses/urls.py @@ -23,6 +23,7 @@ urlpatterns = [ path('fuel/', views.fuel_list, name='fuel_list'), path('fuel/create/', views.fuel_create, name='fuel_create'), path('fuel//edit/', views.fuel_edit, name='fuel_edit'), + path('fuel//delete/', views.fuel_delete, name='fuel_delete'), path('categories/', views.category_list, name='category_list'), path('categories//edit/', views.category_edit, name='category_edit'), path('categories//delete/', views.category_delete, name='category_delete'), diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 69817c0..3b5cd08 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -18,6 +18,7 @@ from django.db.models import Sum, ProtectedError from django.db.models.functions import ExtractMonth, ExtractYear, ExtractDay from django.contrib.auth.decorators import login_required +from django.utils.http import url_has_allowed_host_and_scheme from django.shortcuts import get_object_or_404, render, redirect logger = logging.getLogger(__name__) @@ -29,6 +30,19 @@ def _get_int(value): return None +def _redirect_back(request, fallback): + next_url = request.POST.get("next") or request.GET.get("next") + + if next_url and url_has_allowed_host_and_scheme( + next_url, + allowed_hosts={request.get_host()}, + require_https=request.is_secure(), + ): + return redirect(next_url) + + return redirect(fallback) + + def sub_months(year, month, n): month -= n while month <= 0: @@ -808,7 +822,7 @@ def fuel_edit(request, pk): fuel.liters = form.cleaned_data["liters"] fuel.save() - return redirect("expense_list") + return _redirect_back(request, "expense_list") else: fuel = expense.fuel_data # Initialize manually @@ -823,13 +837,39 @@ def fuel_edit(request, pk): user=request.user, ) + next_url = request.POST.get("next") or request.GET.get("next", "") + return render( request, "fuel/create.html", { - "active_menu": "expenses", + "active_menu": "fuel" if next_url.startswith("/fuel") else "expenses", "form": form, "editing": True, + "next": next_url + }, + ) + + +@login_required +def fuel_delete(request, pk): + expense = get_object_or_404(Expense, pk=pk, owner=request.user) + fuel = get_object_or_404(FuelEntry, expense=expense) + + if request.method == "POST": + expense.delete() + messages.success(request, "Repostaje eliminado.") + return _redirect_back(request, "fuel_list") + + next_url = request.POST.get("next") or request.GET.get("next", "") + + return render( + request, + "fuel/confirm_delete.html", + { + "active_menu":"fuel" if next_url.startswith("/fuel") else "expenses", + "fuel": fuel, + "next": next_url }, )