127 lines
5.5 KiB
Python
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)
|
|
|