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.
+
+
+
+{% 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 @@
- {% 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
},
)