2025-08-12 13:33:25 +03:00

127 lines
5.5 KiB
Python

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)