Visual improvements 2

This commit is contained in:
JKuijperM 2026-02-07 00:42:07 +01:00
parent a5414341fb
commit d37d0f95f1
12 changed files with 83 additions and 30 deletions

View File

@ -4,6 +4,10 @@ body {
background: #f7f7f7;
}
a.danger {
color: #b91c1c;
}
.topbar {
background: #1f2937;
padding: 12px 20px;
@ -175,4 +179,30 @@ tbody tr:hover {
.btn.secondary {
background: #6b7280;
}
.messages {
margin: 1rem 0;
}
.message {
padding: 0.6rem 0.8rem;
border-radius: 6px;
margin-bottom: 0.5rem;
font-size: 0.9rem;
}
.message.success {
background: #e6f4ea;
color: #166534;
}
.message.error {
background: #fee2e2;
color: #991b1b;
}
.message.warning {
background: #fef3c7;
color: #92400e;
}

View File

@ -11,8 +11,8 @@
<form method="post">
{% csrf_token %}
<button type="submit">Sí, eliminar</button>
<a href="{% url 'account_list' %}">Cancelar</a>
<button class="btn">Sí, eliminar</button>
<a class="btn secondary" href="{% url 'account_list' %}">Cancelar</a>
</form>
{% endblock %}

View File

@ -25,7 +25,7 @@
<td>{{ account.active }}</td>
<td class="table-actions">
<a href="{% url 'account_edit' account.id %}">Editar</a>
<a href="{% url 'account_delete' account.id %}">Eliminar</a>
<a href="{% url 'account_delete' account.id %}" class="danger">Eliminar</a>
</td>
</tr>
{% empty %}

View File

@ -33,6 +33,15 @@
</nav>
</header>
{% if messages %}
<div class="messages">
{% for message in messages %}
<div class="message {{ message.tags }}">
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
<main class="content">

View File

@ -1,24 +1,21 @@
{% extends "expenses/base.html" %}
{% block title %}Borrar gasto{% endblock %}
{% block title %}Eliminar gasto{% endblock %}
{% block content %}
<h1>Borrar gasto</h1>
<h1>Eliminar gasto</h1>
<p>
¿Seguro que quieres borrar este gasto?
¿Seguro que quieres eliminar el gasto de
<strong>{{ expense.amount }}€</strong>
del {{ expense.date }} perteneciente a
<strong>{{ expense.account }}</strong>?
</p>
<ul>
<li>Fecha: {{ expense.date }}</li>
<li>Importe: {{ expense.amount }}</li>
<li>Categoría: {{ expense.category.name }}</li>
</ul>
<form method="post">
{% csrf_token %}
<button type="submit">Sí, borrar</button>
<button class="btn">Sí, eliminar</button>
<a class="btn secondary" href="{% url 'expense_list' %}">Cancelar</a>
</form>
<a href="{% url 'expense_list' %}">Cancelar</a>
{% endblock %}

View File

@ -111,7 +111,7 @@
</td>
<td class="table-actions">
<a href="{% url 'expense_edit' expense.id %}">Editar</a>
<a href="{% url 'expense_delete' expense.id %}">Eliminar</a>
<a href="{% url 'expense_delete' expense.id %}" class="danger">Eliminar</a>
</td>
</tr>
{% empty %}

View File

@ -1,23 +1,20 @@
{% extends "expenses/base.html" %}
{% block title %}Borrar ingreso{% endblock %}
{% block title %}Eliminar ingreso{% endblock %}
{% block content %}
<h1>Borrar ingreso</h1>
<h1>Eliminar ingreso</h1>
<p>
¿Seguro que quieres borrar este ingreso?
¿Seguro que quieres eliminar el ingreso de
<strong>{{ income.amount }}€</strong>
del {{ expense.date }} perteneciente a
<strong>{{ income.account }}</strong>?
</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>
<button class="btn">Sí, eliminar</button>
<a class="btn secondary" href="{% url 'income_list' %}">Cancelar</a>
</form>
<a class="btn secondary" href="{% url 'income_list' %}">Cancelar</a>
{% endblock %}

View File

@ -24,7 +24,7 @@
<td>{{ income.date }}</td>
<td class="table-actions">
<a href="{% url 'income_edit' income.id %}">Editar</a>
<a href="{% url 'income_delete' income.id %}">Eliminar</a>
<a href="{% url 'income_delete' income.id %}" class="danger">Eliminar</a>
</td>
</tr>
{% empty %}

View File

@ -3,10 +3,15 @@
{% block content %}
<h1>Eliminar etiqueta</h1>
<p>
¿Seguro que quieres eliminar la etiqueta
<strong>{{ tag.name }}€</strong>?
</p>
<form method="post">
{% csrf_token %}
<button type="submit">Eliminar</button>
<button class="btn">Eliminar</button>
<a class="btn secondary" href="{% url 'tag_list' %}">Cancelar</a>
</form>
<a class="btn secondary" href="{% url 'tag_list' %}">Cancelar</a>
{% endblock %}

View File

@ -10,7 +10,7 @@
<li class="table-actions">
{{ tag.name }}
<a href="{% url 'tag_edit' tag.id %}">Editar</a>
<a href="{% url 'tag_delete' tag.id %}">Eliminar</a>
<a href="{% url 'tag_delete' tag.id %}" class="danger">Eliminar</a>
</li>
{% empty %}
<li>No hay etiquetas</li>

View File

@ -1,5 +1,6 @@
from datetime import date
from operator import truediv
from django.contrib import messages
from .models import Account, Category, Expense, Tag, Income
from .forms import ExpenseForm, IncomeForm, TagForm, AccountForm
# from dateutli.relativedelta import relativedelta
@ -211,6 +212,8 @@ def expense_create(request):
expense.owner = request.user
expense.save()
form.save_m2m()
messages.success(request, 'Gasto creado correctamente.')
return redirect('expense_list')
else:
form = ExpenseForm(user=request.user)
@ -233,6 +236,7 @@ def expense_edit(request, pk):
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)
@ -254,6 +258,7 @@ def expense_delete(request, pk):
if request.method == 'POST':
expense.delete()
messages.success(request, 'Gasto eliminado correctamente.')
return redirect('expense_list')
return render(
@ -547,6 +552,7 @@ def tag_create(request):
tag = form.save(commit=False)
tag.owner = request.user
tag.save()
messages.success(request, 'Etiqueta creada correctamente.')
return redirect('tag_list')
else:
form = TagForm()
@ -570,6 +576,7 @@ def tag_edit(request, pk):
form = TagForm(request.POST, instance=tag)
if form.is_valid():
form.save()
messages.success(request, 'Etiqueta actualizada.')
return redirect('tag_list')
else:
form = TagForm(instance=tag)
@ -591,6 +598,7 @@ def tag_delete(request, pk):
if request.method == 'POST':
tag.delete()
messages.success(request, 'Etiqueta eliminada.')
return redirect('tag_list')
return render(
@ -618,6 +626,7 @@ def account_create(request):
account = form.save(commit=False)
account.owner = request.user
account.save()
messages.success(request, 'Cuenta creada correctamente.')
return redirect('account_list')
else:
form = AccountForm()
@ -640,6 +649,7 @@ def account_edit(request, pk):
form = AccountForm(request.POST, instance=account)
if form.is_valid():
form.save()
messages.success(request, 'Cuenta actualizada.')
return redirect('account_list')
else:
form = AccountForm(instance=account)
@ -657,6 +667,7 @@ def account_delete(request, pk):
if request.method == 'POST':
account.active = False
account.save()
messages.success(request, 'Cuenta eliminada.')
return redirect('account_list')
return render(
@ -673,6 +684,7 @@ def income_create(request):
income = form.save(commit=False)
income.owner = request.user
income.save()
messages.success(request, 'Ingreso creado correctamente.')
return redirect('income_list')
else:
form = IncomeForm(user=request.user)
@ -705,6 +717,7 @@ def income_edit(request, pk):
form = IncomeForm(request.POST, instance=income, user=request.user)
if form.is_valid():
form.save()
messages.success(request, 'Ingreso actualizado.')
return redirect('income_list')
else:
form = IncomeForm(instance=income, user=request.user)
@ -721,6 +734,7 @@ def income_delete(request, pk):
if request.method == 'POST':
income.delete()
messages.success(request, 'Ingreso eliminado.')
return redirect('income_list')
return render(

View File

@ -13,6 +13,7 @@ https://docs.djangoproject.com/en/5.2/ref/settings/
import os
from pathlib import Path
from dotenv import load_dotenv
from django.contrib.messages import constants as messages
load_dotenv()