"""Read-only APIs for external data registries.""" from apps.core.viewsets import ClassicReadOnlyViewSet from apps.external_data.models import ( ArbitrationCase, IndustrialProduct, ProsecutorCheck, PublicProcurement, InformationSecurityRegistryEntry, ) from apps.external_data.serializers import ( ArbitrationCaseSerializer, IndustrialProductSerializer, ProsecutorCheckSerializer, PublicProcurementSerializer, InformationSecurityRegistryEntrySerializer, ) from django_filters import rest_framework as filters from rest_framework.permissions import IsAuthenticated class IndustrialProductFilter(filters.FilterSet): organization = filters.UUIDFilter(field_name="organization_id") product_class = filters.CharFilter(lookup_expr="exact") class Meta: model = IndustrialProduct fields = ["organization", "product_class"] class ProsecutorCheckFilter(filters.FilterSet): organization = filters.UUIDFilter(field_name="organization_id") law_type = filters.CharFilter(lookup_expr="exact") start_date_from = filters.DateFilter(field_name="start_date", lookup_expr="gte") start_date_to = filters.DateFilter(field_name="start_date", lookup_expr="lte") class Meta: model = ProsecutorCheck fields = ["organization", "law_type", "start_date_from", "start_date_to"] class PublicProcurementFilter(filters.FilterSet): organization = filters.UUIDFilter(field_name="organization_id") law_type = filters.CharFilter(lookup_expr="exact") contract_date_from = filters.DateFilter( field_name="contract_date", lookup_expr="gte" ) contract_date_to = filters.DateFilter(field_name="contract_date", lookup_expr="lte") class Meta: model = PublicProcurement fields = ["organization", "law_type", "contract_date_from", "contract_date_to"] class ArbitrationCaseFilter(filters.FilterSet): organization = filters.UUIDFilter(field_name="organization_id") party_role = filters.CharFilter(lookup_expr="exact") decision_date_from = filters.DateFilter( field_name="decision_date", lookup_expr="gte" ) decision_date_to = filters.DateFilter(field_name="decision_date", lookup_expr="lte") class Meta: model = ArbitrationCase fields = [ "organization", "party_role", "decision_date_from", "decision_date_to", ] class InformationSecurityRegistryEntryFilter(filters.FilterSet): organization = filters.UUIDFilter(field_name="organization_id") presence_status = filters.CharFilter(lookup_expr="exact") class Meta: model = InformationSecurityRegistryEntry fields = ["organization", "presence_status"] class IndustrialProductViewSet(ClassicReadOnlyViewSet[IndustrialProduct]): queryset = IndustrialProduct.objects.select_related("organization").all() serializer_class = IndustrialProductSerializer permission_classes = [IsAuthenticated] filterset_class = IndustrialProductFilter search_fields = ["product_name", "okpd2_code", "tnved_code", "registry_number"] ordering_fields = ["product_name", "created_at"] ordering = ["product_name"] class ProsecutorCheckViewSet(ClassicReadOnlyViewSet[ProsecutorCheck]): queryset = ProsecutorCheck.objects.select_related("organization").all() serializer_class = ProsecutorCheckSerializer permission_classes = [IsAuthenticated] filterset_class = ProsecutorCheckFilter search_fields = ["registration_number", "control_authority", "prosecutor_office"] ordering_fields = ["start_date", "created_at"] ordering = ["-start_date"] class PublicProcurementViewSet(ClassicReadOnlyViewSet[PublicProcurement]): queryset = PublicProcurement.objects.select_related("organization").all() serializer_class = PublicProcurementSerializer permission_classes = [IsAuthenticated] filterset_class = PublicProcurementFilter search_fields = ["purchase_number", "purchase_name"] ordering_fields = ["contract_date", "created_at", "contract_amount"] ordering = ["-contract_date"] class ArbitrationCaseViewSet(ClassicReadOnlyViewSet[ArbitrationCase]): queryset = ArbitrationCase.objects.select_related("organization").all() serializer_class = ArbitrationCaseSerializer permission_classes = [IsAuthenticated] filterset_class = ArbitrationCaseFilter search_fields = ["case_number", "court_name"] ordering_fields = ["decision_date", "created_at"] ordering = ["-decision_date"] class InformationSecurityRegistryEntryViewSet( ClassicReadOnlyViewSet[InformationSecurityRegistryEntry] ): queryset = InformationSecurityRegistryEntry.objects.select_related("organization").all() serializer_class = InformationSecurityRegistryEntrySerializer permission_classes = [IsAuthenticated] filterset_class = InformationSecurityRegistryEntryFilter search_fields = ["registry_name", "entry_number"] ordering_fields = ["issued_at", "expires_at", "created_at"] ordering = ["-issued_at"]