diff --git a/expenses_manager/expenses/forms.py b/expenses_manager/expenses/forms.py
index e2ee079..0af8c10 100644
--- a/expenses_manager/expenses/forms.py
+++ b/expenses_manager/expenses/forms.py
@@ -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:
diff --git a/expenses_manager/expenses/templates/expenses/expense_list.html b/expenses_manager/expenses/templates/expenses/expense_list.html
index 8860346..3a88c9e 100644
--- a/expenses_manager/expenses/templates/expenses/expense_list.html
+++ b/expenses_manager/expenses/templates/expenses/expense_list.html
@@ -128,7 +128,11 @@
{% endfor %}
- Editar
+ {% if expense.category.slug == 'gasolina' %}
+ Editar
+ {% else %}
+ Editar
+ {% endif %}
Eliminar
|
diff --git a/expenses_manager/expenses/templates/fuel/create.html b/expenses_manager/expenses/templates/fuel/create.html
index c440728..1f6985e 100644
--- a/expenses_manager/expenses/templates/fuel/create.html
+++ b/expenses_manager/expenses/templates/fuel/create.html
@@ -1,21 +1,37 @@
{% extends "expenses/base.html" %}
{% block title %}
- Nuevo repostaje
+ {% if editing %}
+ Editar repostaje
+ {% else %}
+ Nuevo repostaje
+ {% endif %}
{% endblock %}
{% block content %}
- Nuevo repostaje
+ {% if editing %}
+ Editar repostaje
+ {% else %}
+ Nuevo repostaje
+ {% endif %}
-
- Volver
+
+ {% if editing %}
+ Volver
+ {% else %}
+ Volver
+ {% endif %}
{% endblock %}
\ No newline at end of file
diff --git a/expenses_manager/expenses/urls.py b/expenses_manager/expenses/urls.py
index faf11be..7c85916 100644
--- a/expenses_manager/expenses/urls.py
+++ b/expenses_manager/expenses/urls.py
@@ -22,5 +22,6 @@ urlpatterns = [
path('incomes//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//edit/', views.fuel_edit, name='fuel_edit'),
path('categories/', views.category_list, name='category_list'),
]
\ No newline at end of file
diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py
index 7f43952..cd06ce7 100644
--- a/expenses_manager/expenses/views.py
+++ b/expenses_manager/expenses/views.py
@@ -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(