Añadidas tandas: 4, 4b y 7 #33

Merged
jkuijperm merged 13 commits from dev into main 2026-09-09 14:29:29 +00:00
5 changed files with 61 additions and 8 deletions
Showing only changes of commit f135797d31 - Show all commits

View File

@ -0,0 +1,17 @@
# Generated by Django 5.2.10 on 2026-09-09 11:54
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('expenses', '0010_goal_account_goal_include_subcategories_goal_kind_and_more'),
]
operations = [
migrations.AlterModelOptions(
name='tag',
options={'ordering': ('name',)},
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 5.2.10 on 2026-09-09 12:59
import django.db.models.functions.text
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('expenses', '0011_alter_tag_options'),
]
operations = [
migrations.AlterModelOptions(
name='account',
options={'ordering': [django.db.models.functions.text.Lower('name')]},
),
migrations.AlterModelOptions(
name='category',
options={'ordering': [django.db.models.functions.text.Lower('name')], 'verbose_name_plural': 'categories'},
),
migrations.AlterModelOptions(
name='tag',
options={'ordering': [django.db.models.functions.text.Lower('name')]},
),
]

View File

@ -5,7 +5,7 @@ from django.conf import settings
from django.db.models import Sum from django.db.models import Sum
from functools import cached_property from functools import cached_property
from django.utils.text import slugify from django.utils.text import slugify
from django.db.models.functions import ExtractMonth from django.db.models.functions import ExtractMonth, Lower
class Category(models.Model): class Category(models.Model):
@ -29,7 +29,7 @@ class Category(models.Model):
class Meta: class Meta:
unique_together = ("name", "parent", "owner", "slug") unique_together = ("name", "parent", "owner", "slug")
verbose_name_plural = "categories" verbose_name_plural = "categories"
ordering = ["name"] ordering = [Lower("name")]
def __str__(self): def __str__(self):
return self.name return self.name
@ -71,7 +71,7 @@ class Account(models.Model):
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
class Meta: class Meta:
ordering = ["name"] ordering = [Lower("name")]
def current_balance(self): def current_balance(self):
expenses_total = self.expenses.aggregate(total=Sum("amount"))[ expenses_total = self.expenses.aggregate(total=Sum("amount"))[
@ -193,6 +193,7 @@ class Tag(models.Model):
class Meta: class Meta:
unique_together = ("name", "owner") unique_together = ("name", "owner")
ordering = [Lower("name")]
def __str__(self): def __str__(self):
return self.name return self.name

View File

@ -21,3 +21,12 @@ def test_tag_list_annotates_expense_usage_count(auth_client, user, account, cate
counts = {tag.name: tag.expense_count for tag in response.context["tags"]} counts = {tag.name: tag.expense_count for tag in response.context["tags"]}
assert counts == {"Usada": 2, "Sin usar": 0} assert counts == {"Usada": 2, "Sin usar": 0}
def test_tag_ordering_ignores_case(user):
for name in ["ZZ", "AA", "mk"]:
Tag.objects.create(owner=user, name=name)
names = list(Tag.objects.filter(owner=user).values_list("name", flat=True))
assert names == ["AA", "mk", "ZZ"]

View File

@ -16,7 +16,7 @@ from .forms import (
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db.models import Sum, Count, ProtectedError from django.db.models import Sum, Count, ProtectedError
from django.db.models.functions import ExtractMonth, ExtractYear, ExtractDay from django.db.models.functions import ExtractMonth, ExtractYear, ExtractDay, Lower
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.utils.http import url_has_allowed_host_and_scheme from django.utils.http import url_has_allowed_host_and_scheme
@ -64,7 +64,7 @@ def _category_tree(categories):
for category in categories: for category in categories:
by_parent.setdefault(category.parent_id, []).append(category) by_parent.setdefault(category.parent_id, []).append(category)
for children in by_parent.values(): for children in by_parent.values():
children.sort(key=lambda c: c.name) children.sort(key=lambda c: c.name.lower())
rows = [] rows = []
@ -638,7 +638,7 @@ def tag_list(request):
tags = ( tags = (
Tag.objects.filter(owner=request.user) Tag.objects.filter(owner=request.user)
.annotate(expense_count=Count("expenses")) .annotate(expense_count=Count("expenses"))
.order_by("name") .order_by(Lower("name"))
) )
return render( return render(
@ -700,7 +700,7 @@ def tag_delete(request, pk):
@login_required @login_required
def account_list(request): def account_list(request):
accounts = list(Account.objects.filter(owner=request.user).order_by("name")) accounts = list(Account.objects.filter(owner=request.user).order_by(Lower("name")))
account_rows, _, _ = _account_balances(accounts) account_rows, _, _ = _account_balances(accounts)
return render( return render(
request, request,
@ -1077,7 +1077,7 @@ def goal_list(request):
else: else:
selected_kind = "" selected_kind = ""
goals = goals.order_by("name") goals = goals.order_by(Lower("name"))
return render( return render(
request, request,