Fixed bug. Now it is posible to edit the fuel expense with its form
This commit is contained in:
parent
13638e74a0
commit
ae53ac507e
@ -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:
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 %}
|
||||
@ -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'),
|
||||
]
|
||||
@ -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(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user