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/new/', views.account_create, name='account_create'),
path('accounts/<int:pk>/edit/', views.account_edit, name='account_edit'), path('accounts/<int:pk>/edit/', views.account_edit, name='account_edit'),
path('accounts/<int:pk>/delete/', views.account_delete, name='account_delete'), 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 datetime import date
from operator import truediv 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 .forms import ExpenseForm, IncomeForm, TagForm, AccountForm
# from dateutli.relativedelta import relativedelta # from dateutli.relativedelta import relativedelta
@ -654,7 +654,7 @@ def income_create(request):
income = form.save(commit=False) income = form.save(commit=False)
income.owner = request.user income.owner = request.user
income.save() income.save()
return redirect('home') return redirect('income_list')
else: else:
form = IncomeForm(user=request.user) form = IncomeForm(user=request.user)
@ -664,5 +664,49 @@ def income_create(request):
{'form': form} {'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}
)