diff --git a/expenses_manager/expenses/templates/expenses/tag_list.html b/expenses_manager/expenses/templates/expenses/tag_list.html index 1291ade..163870f 100644 --- a/expenses_manager/expenses/templates/expenses/tag_list.html +++ b/expenses_manager/expenses/templates/expenses/tag_list.html @@ -5,15 +5,34 @@ ➕ Nueva etiqueta - -{% endblock %} \ No newline at end of file +
+ + + + + + + + + + {% for tag in tags %} + + + + + + {% empty %} + + + + {% endfor %} + +
NombreGastos
{{ tag.name }}{{ tag.expense_count }} + Editar + Eliminar +
+

No hay etiquetas

+ Añade la primera +
+
+{% endblock %} diff --git a/expenses_manager/expenses/tests/test_tags.py b/expenses_manager/expenses/tests/test_tags.py new file mode 100644 index 0000000..f915286 --- /dev/null +++ b/expenses_manager/expenses/tests/test_tags.py @@ -0,0 +1,23 @@ +import pytest +from datetime import date +from decimal import Decimal +from django.urls import reverse +from expenses.models import Expense, Tag + +pytestmark = pytest.mark.django_db + + +def test_tag_list_annotates_expense_usage_count(auth_client, user, account, category): + used = Tag.objects.create(owner=user, name="Usada") + unused = Tag.objects.create(owner=user, name="Sin usar") + + for _ in range(2): + expense = Expense.objects.create( + owner=user, account=account, category=category, amount=Decimal("10"), date=date.today() + ) + expense.tags.add(used) + + response = auth_client.get(reverse('tag_list')) + + counts = {tag.name: tag.expense_count for tag in response.context["tags"]} + assert counts == {"Usada": 2, "Sin usar": 0} diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index f297875..a24ffc9 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -15,7 +15,7 @@ from .forms import ( ) from django.core.paginator import Paginator -from django.db.models import Sum, ProtectedError +from django.db.models import Sum, Count, ProtectedError from django.db.models.functions import ExtractMonth, ExtractYear, ExtractDay from django.contrib.auth.decorators import login_required @@ -635,7 +635,11 @@ def dashboard(request): @login_required def tag_list(request): - tags = Tag.objects.filter(owner=request.user) + tags = ( + Tag.objects.filter(owner=request.user) + .annotate(expense_count=Count("expenses")) + .order_by("name") + ) return render( request, "expenses/tag_list.html", {"active_menu": "settings", "tags": tags}