Files
FlightGrid/simulator/admin.py
2025-10-01 00:10:52 -05:00

58 lines
1.8 KiB
Python

from django.contrib import admin
from django.contrib import messages
from .models import Carrier, AircraftBase, Equipment, Aerodrome, Flight
from .services import cancel_flight_cascade
# Register your models here.
admin.site.register(Carrier)
admin.site.register(AircraftBase)
admin.site.register(Equipment)
admin.site.register(Aerodrome)
@admin.register(Flight)
class FlightAdmin(admin.ModelAdmin): # type: ignore[type-arg]
list_display = (
"carrier",
"flight_number_display",
"origin",
"destination",
"departure_time",
"arrival_time_display",
"status_display",
)
actions = ["cancel_selected_flights"]
@admin.display(description="Flight")
def flight_number_display(self, obj):
return f"{obj.carrier.icao}{obj.flight_number}"
@admin.display(description="Arrival", ordering="departure_time")
def arrival_time_display(self, obj):
return obj.arrival_time
@admin.display(description="Status")
def status_display(self, obj):
return obj.status
@admin.action(description="Cancel selected flights (and dependent flights)")
def cancel_selected_flights(self, request, queryset):
total_canceled = []
for flight in queryset:
if not flight.canceled:
canceled_flights = cancel_flight_cascade(flight)
total_canceled.extend(canceled_flights)
if total_canceled:
self.message_user(
request,
f"Canceled {len(total_canceled)} flight(s) including dependent flights.",
messages.SUCCESS,
)
else:
self.message_user(
request,
"No flights were canceled (already canceled).",
messages.WARNING,
)