from rest_framework import viewsets, permissions, status 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 django.db.models import Count, Avg from django.utils import timezone from datetime import timedelta from ..models import ( QualityIndicator, QualityMeasurement, IncidentReport, RiskAssessment, AuditPlan, AuditFinding, ImprovementProject ) from .serializers import ( QualityIndicatorSerializer, QualityMeasurementSerializer, IncidentReportSerializer, RiskAssessmentSerializer, AuditPlanSerializer, AuditFindingSerializer, ImprovementProjectSerializer ) class QualityIndicatorViewSet(viewsets.ModelViewSet): """ViewSet for quality indicators""" queryset = QualityIndicator.objects.all() serializer_class = QualityIndicatorSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['category', 'type', 'frequency', 'is_active', 'regulatory_requirement'] search_fields = ['name', 'description', 'data_source'] ordering_fields = ['name', 'category', 'created_at'] ordering = ['name'] def get_queryset(self): return QualityIndicator.objects.filter(tenant=self.request.user.tenant) def perform_create(self, serializer): serializer.save(tenant=self.request.user.tenant) class QualityMeasurementViewSet(viewsets.ModelViewSet): """ViewSet for quality measurements""" queryset = QualityMeasurement.objects.all() serializer_class = QualityMeasurementSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['indicator', 'status', 'verified_by'] search_fields = ['notes', 'data_source_reference'] ordering_fields = ['measurement_date', 'value', 'created_at'] ordering = ['-measurement_date'] def get_queryset(self): return QualityMeasurement.objects.filter(tenant=self.request.user.tenant) class IncidentReportViewSet(viewsets.ModelViewSet): """ViewSet for incident reports""" queryset = IncidentReport.objects.all() serializer_class = IncidentReportSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['incident_type', 'severity', 'category', 'status', 'priority'] search_fields = ['incident_number', 'title', 'description', 'location'] ordering_fields = ['incident_date', 'severity', 'created_at'] ordering = ['-incident_date'] def get_queryset(self): return IncidentReport.objects.filter(tenant=self.request.user.tenant) class RiskAssessmentViewSet(viewsets.ModelViewSet): """ViewSet for risk assessments""" queryset = RiskAssessment.objects.all() serializer_class = RiskAssessmentSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['risk_category', 'risk_type', 'risk_level', 'status'] search_fields = ['title', 'description', 'current_controls'] ordering_fields = ['risk_score', 'review_date', 'created_at'] ordering = ['-risk_score'] def get_queryset(self): return RiskAssessment.objects.filter(tenant=self.request.user.tenant) class AuditPlanViewSet(viewsets.ModelViewSet): """ViewSet for audit plans""" queryset = AuditPlan.objects.all() serializer_class = AuditPlanSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['audit_type', 'status', 'priority', 'regulatory_requirement'] search_fields = ['title', 'description', 'scope'] ordering_fields = ['planned_start_date', 'created_at'] ordering = ['planned_start_date'] def get_queryset(self): return AuditPlan.objects.filter(tenant=self.request.user.tenant) class AuditFindingViewSet(viewsets.ModelViewSet): """ViewSet for audit findings""" queryset = AuditFinding.objects.all() serializer_class = AuditFindingSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['audit_plan', 'finding_type', 'severity', 'category', 'status'] search_fields = ['finding_number', 'title', 'description', 'evidence'] ordering_fields = ['severity', 'target_completion_date', 'created_at'] ordering = ['-severity', 'target_completion_date'] def get_queryset(self): return AuditFinding.objects.filter(tenant=self.request.user.tenant) class ImprovementProjectViewSet(viewsets.ModelViewSet): """ViewSet for improvement projects""" queryset = ImprovementProject.objects.all() serializer_class = ImprovementProjectSerializer permission_classes = [permissions.IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['project_type', 'methodology', 'status', 'phase'] search_fields = ['project_number', 'title', 'description', 'problem_statement'] ordering_fields = ['planned_start_date', 'created_at'] ordering = ['planned_start_date'] def get_queryset(self): return ImprovementProject.objects.filter(tenant=self.request.user.tenant)