54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
from rest_framework import serializers
|
|
|
|
from apps.reservations.models import Facility, FacilitySchedule, Reservation, Slot
|
|
|
|
|
|
class FacilitySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Facility
|
|
fields = ["id", "name"]
|
|
|
|
|
|
class SlotSerializer(serializers.ModelSerializer):
|
|
facility_name = serializers.CharField(source="facility.name", read_only=True)
|
|
available = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Slot
|
|
fields = [
|
|
"id", "facility", "facility_name", "line", "date", "start_time",
|
|
"end_time", "capacity", "max_weight_kg", "booked_count", "blocked", "available",
|
|
]
|
|
|
|
def get_available(self, obj):
|
|
return obj.is_available()
|
|
|
|
|
|
class FacilityScheduleSerializer(serializers.ModelSerializer):
|
|
facility_name = serializers.CharField(source="facility.name", read_only=True)
|
|
|
|
class Meta:
|
|
model = FacilitySchedule
|
|
fields = [
|
|
"id", "facility", "facility_name", "date", "is_open",
|
|
"capacity", "start_time", "end_time", "note",
|
|
]
|
|
|
|
|
|
class ReservationSerializer(serializers.ModelSerializer):
|
|
slot = SlotSerializer(read_only=True)
|
|
customer_id = serializers.UUIDField(source="customer.id", read_only=True)
|
|
customer_name = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Reservation
|
|
fields = [
|
|
"id", "title", "customer", "customer_id", "customer_name", "slot",
|
|
"status", "notes", "approved_at", "created_at",
|
|
]
|
|
read_only_fields = ["customer", "status", "approved_at", "created_at"]
|
|
|
|
def get_customer_name(self, obj):
|
|
user = obj.customer.user
|
|
return obj.customer.company_name or user.get_full_name() or user.username
|