diff --git a/backend/bookings/models.py b/backend/bookings/models.py index da0ceb2..0854e6b 100644 --- a/backend/bookings/models.py +++ b/backend/bookings/models.py @@ -44,7 +44,9 @@ class Reservation(TimeStampedModel): ] def __str__(self): - return f"{self.name} ({self.party_size}) for {self.performance}" + if self.party_size > 1: + return f"{self.name} ({self.party_size})" + return self.name @property def is_confirmed(self): diff --git a/backend/bookings/test_admin.py b/backend/bookings/test_admin.py index 4b2eddb..75c0b3d 100644 --- a/backend/bookings/test_admin.py +++ b/backend/bookings/test_admin.py @@ -160,3 +160,20 @@ class ReservationAdminTests(TestCase): check_in = CheckIn.objects.get(reservation=reservation) self.assertEqual(check_in.checked_in_by, self.admin_user) self.assertEqual(check_in.source, CheckIn.Source.MANUAL) + + def test_reservation_string_is_concise_without_performance_details(self): + single_guest_reservation = Reservation.objects.create( + performance=self.performance, + name="Maria Rossi", + email="maria@example.com", + party_size=1, + ) + group_reservation = Reservation.objects.create( + performance=self.performance, + name="Luca Bianchi", + email="luca@example.com", + party_size=3, + ) + + self.assertEqual(str(single_guest_reservation), "Maria Rossi") + self.assertEqual(str(group_reservation), "Luca Bianchi (3)") diff --git a/backend/checkins/admin.py b/backend/checkins/admin.py index dba97cc..5d52d3d 100644 --- a/backend/checkins/admin.py +++ b/backend/checkins/admin.py @@ -6,7 +6,7 @@ from .models import CheckIn @admin.register(CheckIn) class CheckInAdmin(admin.ModelAdmin): list_display = ( - "reservation", + "reservation_guest_name", "performance", "checked_in_at", "checked_in_by", @@ -25,6 +25,10 @@ class CheckInAdmin(admin.ModelAdmin): list_select_related = ("reservation", "reservation__performance", "checked_in_by") autocomplete_fields = ("reservation", "checked_in_by") + @admin.display(description="Reservation", ordering="reservation__name") + def reservation_guest_name(self, obj): + return obj.reservation.name + @admin.display(description="Performance") def performance(self, obj): return obj.reservation.performance diff --git a/backend/checkins/test_admin.py b/backend/checkins/test_admin.py new file mode 100644 index 0000000..d61d1f3 --- /dev/null +++ b/backend/checkins/test_admin.py @@ -0,0 +1,56 @@ +from datetime import timedelta + +from django.contrib import admin +from django.contrib.auth import get_user_model +from django.test import TestCase +from django.utils import timezone + +from bookings.models import Reservation +from checkins.admin import CheckInAdmin +from checkins.models import CheckIn +from shows.models import Performance, Show, Venue + + +class CheckInAdminTests(TestCase): + def setUp(self): + user_model = get_user_model() + self.admin_user = user_model.objects.create_superuser( + username="admin-checkins", + email="admin-checkins@example.com", + password="password123", + ) + self.show = Show.objects.create( + title="Open Stage", + slug="open-stage-checkins-admin", + is_published=True, + ) + self.venue = Venue.objects.create( + name="AzioneLab Theatre", + slug="azionelab-theatre-checkins-admin", + address="Via Example 1", + city="Rome", + ) + self.performance = Performance.objects.create( + show=self.show, + venue=self.venue, + starts_at=timezone.now() + timedelta(days=7), + room_capacity=20, + ) + self.reservation = Reservation.objects.create( + performance=self.performance, + name="Maria Rossi", + email="maria@example.com", + party_size=3, + status=Reservation.Status.CONFIRMED, + confirmed_at=timezone.now(), + ) + self.check_in = CheckIn.objects.create( + reservation=self.reservation, + checked_in_at=timezone.now(), + checked_in_by=self.admin_user, + source=CheckIn.Source.MANUAL, + ) + self.model_admin = CheckInAdmin(CheckIn, admin.site) + + def test_reservation_column_shows_guest_name_only(self): + self.assertEqual(self.model_admin.reservation_guest_name(self.check_in), "Maria Rossi")