inital commit
This commit is contained in:
79
booking/admin.py
Normal file
79
booking/admin.py
Normal file
@@ -0,0 +1,79 @@
|
||||
from django.contrib import admin
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from .models import AvailabilitySlot, Booking, BookingEventLog
|
||||
from .services import transition_booking_status
|
||||
|
||||
|
||||
@admin.action(description="Mark selected bookings as approved")
|
||||
def mark_approved(modeladmin, request, queryset):
|
||||
for booking in queryset:
|
||||
if booking.status == Booking.Status.REQUESTED:
|
||||
try:
|
||||
transition_booking_status(
|
||||
booking=booking,
|
||||
to_status=Booking.Status.APPROVED,
|
||||
actor=request.user,
|
||||
note="Booking approved via admin action.",
|
||||
vendor_notes=booking.vendor_notes,
|
||||
)
|
||||
except ValidationError:
|
||||
continue
|
||||
|
||||
|
||||
@admin.action(description="Mark selected bookings as declined")
|
||||
def mark_declined(modeladmin, request, queryset):
|
||||
for booking in queryset:
|
||||
if booking.status == Booking.Status.REQUESTED:
|
||||
try:
|
||||
transition_booking_status(
|
||||
booking=booking,
|
||||
to_status=Booking.Status.DECLINED,
|
||||
actor=request.user,
|
||||
note="Booking declined via admin action.",
|
||||
vendor_notes=booking.vendor_notes,
|
||||
)
|
||||
except ValidationError:
|
||||
continue
|
||||
|
||||
|
||||
@admin.action(description="Mark selected bookings as confirmed")
|
||||
def mark_confirmed(modeladmin, request, queryset):
|
||||
for booking in queryset:
|
||||
if booking.status == Booking.Status.APPROVED:
|
||||
try:
|
||||
transition_booking_status(
|
||||
booking=booking,
|
||||
to_status=Booking.Status.CONFIRMED,
|
||||
actor=request.user,
|
||||
note="Booking confirmed via admin action.",
|
||||
vendor_notes=booking.vendor_notes,
|
||||
)
|
||||
except ValidationError:
|
||||
continue
|
||||
|
||||
|
||||
@admin.register(AvailabilitySlot)
|
||||
class AvailabilitySlotAdmin(admin.ModelAdmin):
|
||||
list_display = ("id", "equipment_item", "adventure_offering", "starts_at", "ends_at", "is_available")
|
||||
list_filter = ("is_available",)
|
||||
search_fields = ("equipment_item__public_id", "adventure_offering__public_id")
|
||||
readonly_fields = ("created_at", "updated_at")
|
||||
|
||||
|
||||
@admin.register(Booking)
|
||||
class BookingAdmin(admin.ModelAdmin):
|
||||
list_display = ("id", "status", "vendor", "customer", "starts_at", "ends_at", "total_price", "created_at")
|
||||
list_filter = ("status", "vendor")
|
||||
search_fields = ("id", "customer__email", "vendor__business_name")
|
||||
readonly_fields = ("created_at", "updated_at", "total_price")
|
||||
actions = (mark_approved, mark_declined, mark_confirmed)
|
||||
|
||||
|
||||
@admin.register(BookingEventLog)
|
||||
class BookingEventLogAdmin(admin.ModelAdmin):
|
||||
list_display = ("booking", "from_status", "to_status", "actor", "created_at")
|
||||
list_filter = ("to_status",)
|
||||
search_fields = ("booking__id", "actor__email")
|
||||
readonly_fields = ("booking", "from_status", "to_status", "note", "actor", "created_at")
|
||||
|
||||
Reference in New Issue
Block a user