Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@
<div class="text-5xl font-bold mb-6">{{ team.name }}</div>
{% endif %}

<div class="text-3xl">{{ team.contestants_names }}</div>
<div class="text-3xl">
{% if team.venue.abbreviate_names %}
{{ team.abbreviated_names }}
{% else %}
{{ team.contestants_names }}
{% endif %}
</div>
<div class="flex justify-center">{% squares result_row big=True %}</div>
<div class="text-4xl mt-4">{{ result_row.solved_count }}</div>
{% endif %}
Expand Down
2 changes: 1 addition & 1 deletion bullet/competitions/factories/venues.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ class Meta:
"random_elements", elements=[x[0] for x in settings.LANGUAGES]
)
results_announced = factory.Faker("boolean")
participants_hidden = factory.Faker("boolean")
abbreviate_names = factory.Faker("boolean")
email = factory.Faker("email")
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 5.2.7 on 2025-10-14 19:13

from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("competitions", "0035_auto_20250123_1932"),
]

operations = [
migrations.RenameField(
model_name="venue",
old_name="participants_hidden",
new_name="abbreviate_names",
),
]
2 changes: 1 addition & 1 deletion bullet/competitions/models/venues.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ class RegistrationFlowType(models.IntegerChoices):
accepted_languages = ChoiceArrayField(LanguageField())
local_start = models.DateTimeField(null=True, blank=True)
results_announced = models.BooleanField(default=False) # unused
participants_hidden = models.BooleanField(default=False) # unused
abbreviate_names = models.BooleanField(default=False)

is_online = models.BooleanField(default=False)
is_isolated = models.BooleanField(default=False)
Expand Down
8 changes: 7 additions & 1 deletion bullet/competitions/templates/teams/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,13 @@ <h2 class="font-bold text-2xl" id="{{ v.venue.shortcode }}">
{% for team in v.teams %}
<div>
{% inline_team_name team %}
<div class="text-xs mt-0.5 text-gray-500">{{ team.contestants.all|join:", " }}</div>
<div class="text-xs mt-0.5 text-gray-500">
{% if v.venue.abbreviate_names %}
{{ team.abbreviated_names }}
{% else %}
{{ team.contestants_names }}
{% endif %}
</div>
</div>
{% endfor %}
</div>
Expand Down
8 changes: 7 additions & 1 deletion bullet/problems/templates/problems/results/table.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,13 @@
{% endif %}

{% if not hide_contestants %}
<div class="mt-0.5 text-xs leading-4 text-gray-500">{{ row.team.contestants.all|join:", " }}</div>
<div class="mt-0.5 text-xs leading-4 text-gray-500">
{% if row.team.venue.abbreviate_names %}
{{ row.team.abbreviated_names }}
{% else %}
{{ row.team.contestants_names }}
{% endif %}
</div>
{% endif %}
</td>
<td class="p-2 hidden md:table-cell text-lg">
Expand Down
15 changes: 15 additions & 0 deletions bullet/users/models/contestants.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,10 @@ def contact_phone_pretty(self):
def contestants_names(self):
return ", ".join([c.full_name for c in self.contestants.all()])

@property
def abbreviated_names(self):
return ", ".join([c.abbreviated_name for c in self.contestants.all()])

@property
def id_display(self):
return f"#{self.id:06d}"
Expand Down Expand Up @@ -248,6 +252,7 @@ def to_export(self, str_only: bool = False):
"contestants": self.contestants_names
if str_only
else [c.full_name for c in self.contestants.all()],
"abbreviated_contestants": self.abbreviated_names,
"online_password": self.online_password,
"rank_venue": self.rank_venue or "",
"rank_country": self.rank_country or "",
Expand Down Expand Up @@ -280,6 +285,16 @@ def __str__(self):
name += f" ({self.grade.name})"
return name

@property
def abbreviated_name(self):
parts = self.full_name.split()
if not parts:
return ""
if len(parts) == 1:
return parts[0]

return f"{parts[0]} {parts[-1][0]}."


def get_spanish_upload(instance, filename):
name, ext = os.path.splitext(filename)
Expand Down