58 lines
1.8 KiB
Python
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,
|
|
)
|