Fixed bug. Now it is posible to edit the fuel expense with its form

This commit is contained in:
JKuijperM 2026-04-29 15:20:59 +02:00
parent 13638e74a0
commit ae53ac507e
5 changed files with 107 additions and 28 deletions

View File

@ -74,13 +74,15 @@ class FuelEntryForm(forms.Form):
odometer = forms.DecimalField(label='Current kilometers')
liters = forms.DecimalField(max_digits=8, decimal_places=2)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super().__init__(*args, **kwargs)
self.fields['account'].queryset = (
user.accounts.filter(active=True)
)
if user:
self.fields['account'].queryset = (
user.accounts.filter(active=True)
)
class CategoryForm(forms.ModelForm):
class Meta:

View File

@ -128,7 +128,11 @@
{% endfor %}
</td>
<td class="table-actions">
<a href="{% url 'expense_edit' expense.id %}">Editar</a>
{% if expense.category.slug == 'gasolina' %}
<a href="{% url 'fuel_edit' expense.id %}">Editar</a>
{% else %}
<a href="{% url 'expense_edit' expense.id %}">Editar</a>
{% endif %}
<a href="{% url 'expense_delete' expense.id %}" class="danger">Eliminar</a>
</td>
</tr>

View File

@ -1,21 +1,37 @@
{% extends "expenses/base.html" %}
{% block title %}
Nuevo repostaje
{% if editing %}
Editar repostaje
{% else %}
Nuevo repostaje
{% endif %}
{% endblock %}
{% block content %}
<h1>
Nuevo repostaje
{% if editing %}
Editar repostaje
{% else %}
Nuevo repostaje
{% endif %}
</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">
Crear repostaje
{% if editing %}
Guardar repostaje
{% else %}
Crear repostaje
{% endif %}
</button>
</form>
<a href="{% url 'fuel_list' %}">Volver</a>
{% if editing %}
<a href="{% url 'expense_list' %}">Volver</a>
{% else %}
<a href="{% url 'fuel_list' %}">Volver</a>
{% endif %}
{% endblock %}

View File

@ -22,5 +22,6 @@ urlpatterns = [
path('incomes/<int:pk>/delete/', views.income_delete, name='income_delete'),
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('categories/', views.category_list, name='category_list'),
]

View File

@ -237,24 +237,32 @@ def expense_create(request):
@login_required
def expense_edit(request, pk):
# sourcery skip: assign-if-exp, merge-else-if-into-elif
expense = get_object_or_404(
Expense,
pk=pk,
owner=request.user,
)
if request.method == "POST":
form = ExpenseForm(request.POST or None, instance=expense, user=request.user)
form = ExpenseForm(
request.POST or None,
instance=expense,
user=request.user)
if form.is_valid():
expense = form.save()
messages.success(request, 'Gasto actualizado')
return redirect('expense_list')
else:
form = ExpenseForm(instance=expense, user=request.user)
form = ExpenseForm(instance=expense, user=request.user)
return render(
request,
'expenses/expense_form.html',
{'active_menu': 'expenses','form': form}
'expenses/expense_form.html', {
'active_menu': 'expenses',
'form': form,
}
)
@ -787,33 +795,29 @@ def fuel_create(request):
@login_required
def fuel_list(request):
selected_year = request.GET.get('year')
current_year = datetime.now().year
if selected_year:
selected_year = int(selected_year)
else:
selected_year = current_year
selected_year = int(selected_year) if selected_year else current_year
fuels = FuelEntry.objects.filter(
expense__owner=request.user,
expense__date__year=selected_year
).select_related('expense').order_by('expense__date')
monthly_expenses = (
fuels
.annotate(month=ExtractMonth('expense__date'))
.values('month')
.annotate(total=Sum('expense__amount'))
)
month_map = {m['month']: float(m['total']) for m in monthly_expenses}
monthly_data = [
month_map.get(month, 0)
for month in range(1, 13)
]
year_list = (
FuelEntry.objects.filter(
expense__owner=request.user,)
@ -822,16 +826,16 @@ def fuel_list(request):
.distinct()
.order_by('year')
)
km_data = []
dates = []
for fuel in fuels:
km = fuel.km_since_previous()
if km:
km_data.append(km)
dates.append(fuel.expense.date.strftime('%Y-%m-%d'))
return render( request, 'fuel/list.html',
{
'active_menu': 'fuel',
@ -844,6 +848,58 @@ def fuel_list(request):
}
)
@login_required
def fuel_edit(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":
form = FuelEntryForm(
request.POST,
user=request.user
)
if form.is_valid():
# Update expense
expense.date = form.cleaned_data['date']
expense.amount = form.cleaned_data['amount']
expense.account = form.cleaned_data['account']
expense.description = 'Repostaje'
expense.save()
# Update FuelEntry
fuel.odometer = form.cleaned_data['odometer']
fuel.liters = form.cleaned_data['liters']
fuel.save()
return redirect('expense_list')
else:
fuel = expense.fuel_data
# Initialize manually
form = FuelEntryForm(
initial={
'date': expense.date,
'amount': expense.amount,
'account': expense.account,
'odometer': fuel.odometer,
'liters': fuel.liters
},
user=request.user
)
return render(
request, 'fuel/create.html', {
'active_menu': 'expenses',
'form': form,
'editing': True,
}
)
@login_required
def category_list(request):
categories = Category.objects.filter(