from rest_framework import viewsets, permissions from rest_framework.decorators import action from rest_framework.response import Response from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters from ..models import AppointmentRequest from .serializers import AppointmentRequestListSerializer class AppointmentRequestViewSet(viewsets.ModelViewSet): """ViewSet for appointment requests""" queryset = AppointmentRequest.objects.all() serializer_class = AppointmentRequestListSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['status', 'priority', 'appointment_type', 'provider'] search_fields = ['patient__first_name', 'patient__last_name', 'chief_complaint'] ordering_fields = ['scheduled_datetime', 'preferred_date', 'created_at'] ordering = ['-created_at'] def get_queryset(self): """Filter by tenant""" return AppointmentRequest.objects.filter(tenant=self.request.user.tenant) def perform_create(self, serializer): """Set tenant when creating""" serializer.save(tenant=self.request.user.tenant) @action(detail=True, methods=['post']) def approve(self, request, pk=None): """Approve an appointment request""" appointment = self.get_object() appointment.status = 'CONFIRMED' appointment.save() return Response({'status': 'approved'}) @action(detail=True, methods=['post']) def reject(self, request, pk=None): """Reject an appointment request""" appointment = self.get_object() appointment.status = 'CANCELLED' appointment.save() return Response({'status': 'rejected'})