generated from bisco/codex-bootstrap
67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
from django.contrib import admin
|
|
from django.urls import reverse
|
|
from django.utils.html import format_html
|
|
|
|
from .models import Performance, Show, Venue
|
|
|
|
|
|
@admin.register(Show)
|
|
class ShowAdmin(admin.ModelAdmin):
|
|
list_display = ("title", "slug", "is_published", "created_at", "updated_at")
|
|
list_filter = ("is_published",)
|
|
search_fields = ("title", "slug", "summary", "description")
|
|
prepopulated_fields = {"slug": ("title",)}
|
|
readonly_fields = ("created_at", "updated_at")
|
|
|
|
|
|
@admin.register(Venue)
|
|
class VenueAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "slug", "city", "address", "created_at", "updated_at")
|
|
list_filter = ("city",)
|
|
search_fields = ("name", "slug", "address", "city", "notes")
|
|
prepopulated_fields = {"slug": ("name",)}
|
|
readonly_fields = ("created_at", "updated_at")
|
|
|
|
|
|
@admin.register(Performance)
|
|
class PerformanceAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"show",
|
|
"venue",
|
|
"starts_at",
|
|
"room_capacity",
|
|
"additional_seats",
|
|
"manually_occupied_seats",
|
|
"available_seats_display",
|
|
"is_booking_enabled",
|
|
"create_reservation_link",
|
|
)
|
|
list_filter = ("is_booking_enabled", "starts_at", "show", "venue")
|
|
search_fields = ("show__title", "venue__name", "venue__city")
|
|
list_select_related = ("show", "venue")
|
|
readonly_fields = ("created_at", "updated_at", "available_seats_display")
|
|
autocomplete_fields = ("show", "venue")
|
|
|
|
@admin.display(description="Available seats")
|
|
def available_seats_display(self, obj):
|
|
if (
|
|
not getattr(obj, "pk", None)
|
|
or obj.room_capacity is None
|
|
or obj.additional_seats is None
|
|
or obj.manually_occupied_seats is None
|
|
):
|
|
return "-"
|
|
return obj.available_seats()
|
|
|
|
@admin.display(description="Manual reservation")
|
|
def create_reservation_link(self, obj):
|
|
if not getattr(obj, "pk", None):
|
|
return "-"
|
|
|
|
url = reverse("admin:bookings_reservation_add")
|
|
return format_html(
|
|
'<a href="{}?performance={}">Create reservation</a>',
|
|
url,
|
|
obj.pk,
|
|
)
|