WIP Income

This commit is contained in:
JKuijperM 2026-02-02 20:06:15 +01:00
parent 5f5dd87859
commit 5fbf3cfc54
5 changed files with 157 additions and 2 deletions

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title>Borrar ingreso</title>
</head>
<body>
<h1>Borrar ingreso</h1>
<p>
¿Seguro que quieres borrar este ingreso?
</p>
<ul>
<li>Fecha: {{ income.date }}</li>
<li>Importe: {{ income.amount }}</li>
<li>Categoría: {{ income.category.name }}</li>
</ul>
<form method="post">
{% csrf_token %}
<button type="submit">Sí, borrar</button>
</form>
<a href="{% url 'income_list' %}">Cancelar</a>
</body>
</html>

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<title>
{% if form.instance.pk %}
Editar ingreso
{% else %}
Nuevo ingreso
{% endif %}
</title>
</head>
<body>
<h1>
{% if form.instance.pk %}
Editar ingreso
{% else %}
Nuevo ingreso
{% endif %}
</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">
{% if form.instance.pk %}
Guardar ingreso
{% else %}
Crear ingreso
{% endif %}
</button>
</form>
<a href="{% url 'income_list' %}">Volver</a>
</body>
</html>

View File

@ -0,0 +1,44 @@
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>Ingresos</title>
<link rel="stylesheet" href="{% static 'expenses/css/base.css' %}">
</head>
<body>
<h1>Mis ingresos</h1>
<a href="{% url 'income_create' %}"> Nuevo ingreso</a>
<table>
<thead>
<tr>
<th>Nombre</th>
<th>Cuenta</th>
<th>Cantidad</th>
<th>Fecha ingreso</th>
<th></th>
</tr>
</thead>
<tbody>
{% for income in incomes %}
<tr>
<td>{{ income.name }}</td>
<td>{{ income.account }}</td>
<td>{{ income.amount|floatformat:2 }}</td>
<td>{{ income.date }}</td>
<td>
<a href="{% url 'income_edit' income.id %}">Editar</a>
<a href="{% url 'income_delete' income.id %}">Eliminar</a>
</td>
</tr>
{% empty %}
<tr>
<td colspan="5">No hay ingresos</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>

View File

@ -16,4 +16,8 @@ urlpatterns = [
path('accounts/new/', views.account_create, name='account_create'),
path('accounts/<int:pk>/edit/', views.account_edit, name='account_edit'),
path('accounts/<int:pk>/delete/', views.account_delete, name='account_delete'),
path('incomes/', views.income_list, name='income_list'),
path('incomes/new/', views.income_create, name='income_create'),
path('incomes/<int:pk>/edit/', views.income_edit, name='income_edit'),
path('incomes/<int:pk>/delete/', views.income_delete, name='income_delete'),
]

View File

@ -1,6 +1,6 @@
from datetime import date
from operator import truediv
from .models import Account, Category, Expense, Tag
from .models import Account, Category, Expense, Tag, Income
from .forms import ExpenseForm, IncomeForm, TagForm, AccountForm
# from dateutli.relativedelta import relativedelta
@ -654,7 +654,7 @@ def income_create(request):
income = form.save(commit=False)
income.owner = request.user
income.save()
return redirect('home')
return redirect('income_list')
else:
form = IncomeForm(user=request.user)
@ -664,5 +664,49 @@ def income_create(request):
{'form': form}
)
@login_required
def income_list(request):
incomes = Income.objects.filter(owner=request.user)
return render(
request,
'expenses/income_list.html',
{'incomes': incomes}
)
@login_required
def income_edit(request, pk):
income = get_object_or_404(
Income,
pk=pk,
owner=request.user
)
if request.method == 'POST':
form = IncomeForm(request.POST, instance=income, user=request.user)
if form.is_valid():
form.save()
return redirect('income_list')
else:
form = IncomeForm(instance=income, user=request.user)
return render(
request,
'expenses/income_form.html',
{'form': form}
)
@login_required
def income_delete(request, pk):
income = get_object_or_404(Income, pk=pk, owner=request.user)
if request.method == 'POST':
income.delete()
return redirect('income_list')
return render(
request,
'expenses/income_confirm_delete.html',
{'income':income}
)