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, )