from rest_framework import viewsets, permissions from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters from ..models import MedicalBill, Payment, InsuranceClaim from .serializers import MedicalBillSerializer, PaymentSerializer, InsuranceClaimSerializer class BaseViewSet(viewsets.ModelViewSet): """Base ViewSet with common functionality""" permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] def get_queryset(self): # Filter by tenant if user has one if hasattr(self.request.user, 'tenant') and self.request.user.tenant: return self.queryset.filter(tenant=self.request.user.tenant) return self.queryset def perform_create(self, serializer): if hasattr(self.request.user, 'tenant'): serializer.save(tenant=self.request.user.tenant) else: serializer.save() class MedicalBillViewSet(BaseViewSet): """ViewSet for MedicalBill model""" queryset = MedicalBill.objects.all() serializer_class = MedicalBillSerializer filterset_fields = ['status', 'bill_type', 'patient'] search_fields = ['bill_number', 'patient__first_name', 'patient__last_name'] ordering_fields = ['bill_date', 'due_date', 'total_amount'] ordering = ['-bill_date'] class PaymentViewSet(BaseViewSet): """ViewSet for Payment model""" queryset = Payment.objects.all() serializer_class = PaymentSerializer filterset_fields = ['status', 'payment_method', 'payment_source'] search_fields = ['payment_number', 'medical_bill__bill_number'] ordering_fields = ['payment_date', 'payment_amount'] ordering = ['-payment_date'] class InsuranceClaimViewSet(BaseViewSet): """ViewSet for InsuranceClaim model""" queryset = InsuranceClaim.objects.all() serializer_class = InsuranceClaimSerializer filterset_fields = ['status', 'claim_type'] search_fields = ['claim_number', 'medical_bill__bill_number'] ordering_fields = ['submission_date', 'billed_amount'] ordering = ['-submission_date']