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