Added the Edit and Delete options to fuel

This commit is contained in:
JKuijperM 2026-07-23 15:40:04 +02:00
parent a2eec67491
commit 61047df4bf
6 changed files with 85 additions and 9 deletions

View File

@ -128,12 +128,13 @@
{% endfor %}
</td>
<td class="table-actions">
{% if expense.category.slug == 'gasolina' %}
<a href="{% url 'fuel_edit' expense.id %}">Editar</a>
{% if expense.fuel_data %}
<a href="{% url 'fuel_edit' expense.id %}?next={{ request.get_full_path|urlencode }}">Editar</a>
<a href="{% url 'fuel_delete' expense.id %}?next={{ request.get_full_path|urlencode }}" class="danger">Eliminar</a>
{% else %}
<a href="{% url 'expense_edit' expense.id %}">Editar</a>
<a href="{% url 'expense_delete' expense.id %}" class="danger">Eliminar</a>
{% endif %}
<a href="{% url 'expense_delete' expense.id %}" class="danger">Eliminar</a>
</td>
</tr>
{% empty %}

View File

@ -0,0 +1,26 @@
{% extends "expenses/base.html" %}
{% block title %}
Repostajes
{% endblock %}
{% block content %}
<h2>Eliminar repostaje.</h2>
<p>
¿Seguro que quieres eliminar el repostaje del
<strong>{{ fuel.expense.date}}</strong>
({{ fuel.liters }}L por {{fuel.expense.amount}}€)?
</p>
<p class="form-errors">
Se eliminará también el gasto asociado en el listado de gastos.
</p>
<form method="post">
{% csrf_token %}
{% if next %}<input type="hidden" name="next" value="{{ next }}">{% endif %}
<button class="btn danger">Eliminar</button>
<a class="btn" href="{% url 'fuel_list' %}">Cancelar</a>
</form>
{% endblock %}

View File

@ -19,6 +19,7 @@
<form method="post">
{% csrf_token %}
{% if next %}<input type="hidden" name="next" value="{{ next }}">{% endif %}
{{ form.as_p }}
<button type="submit">
{% if editing %}
@ -29,9 +30,11 @@
</button>
</form>
{% if editing %}
<a href="{% url 'expense_list' %}">Volver</a>
{% if next %}
<a class="btn" href="{{ next }}">Volver</a>
{% elif editing %}
<a class="btn" href="{% url 'expense_list' %}">Volver</a>
{% else %}
<a href="{% url 'fuel_list' %}">Volver</a>
<a class="btn" href="{% url 'fuel_list' %}">Volver</a>
{% endif %}
{% endblock %}

View File

@ -21,6 +21,7 @@
<th>Gasto</th>
<th>€/L</th>
<th>Km desde anterior</th>
<th></th>
</tr>
</thead>
<tbody>
@ -32,6 +33,10 @@
<td>{{ fuel.expense.amount }}</td>
<td>{{ fuel.price_per_liter|floatformat:2 }}</td>
<td>{{ fuel.km_since_previous }}</td>
<td class="table-actions">
<a href="{% url 'fuel_edit' fuel.expense.id %}?next={{ request.get_full_path|urlencode }}">Editar</a>
<a href="{% url 'fuel_delete' fuel.expense.id %}?next={{ request.get_full_path|urlencode }}" class="danger">Eliminar</a>
</td>
</tr>
{% endfor %}
</tbody>

View File

@ -23,6 +23,7 @@ urlpatterns = [
path('fuel/', views.fuel_list, name='fuel_list'),
path('fuel/create/', views.fuel_create, name='fuel_create'),
path('fuel/<int:pk>/edit/', views.fuel_edit, name='fuel_edit'),
path('fuel/<int:pk>/delete/', views.fuel_delete, name='fuel_delete'),
path('categories/', views.category_list, name='category_list'),
path('categories/<int:pk>/edit/', views.category_edit, name='category_edit'),
path('categories/<int:pk>/delete/', views.category_delete, name='category_delete'),

View File

@ -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
},
)