Add initial implementations for forms and organization apps with serializers, factories, and admin configurations
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 45s
CI/CD Pipeline / Code Quality Checks (push) Failing after 48s
CI/CD Pipeline / Build Docker Images (push) Has been skipped
CI/CD Pipeline / Push to Gitea Registry (push) Has been skipped
CI/CD Pipeline / Deploy to Server (push) Has been skipped

This commit is contained in:
2026-03-28 18:23:06 +01:00
parent 8ed3e1175c
commit 345b1d0cc8
201 changed files with 15097 additions and 6691 deletions

View File

@@ -3,12 +3,12 @@ API формы Ф-2.
Содержит:
- FormF2UploadView - загрузка файла
- FormF2RecordViewSet - CRUD записей
- FormF2RecordViewSet - просмотр записей
"""
import logging
from apps.core.viewsets import BaseViewSet
from apps.core.viewsets import ReadOnlyViewSet
from apps.form_2.models import FormF2Record
from apps.form_2.serializers import (
FormF2ParseResultSerializer,
@@ -16,10 +16,11 @@ from apps.form_2.serializers import (
FormF2RecordSerializer,
FormF2UploadSerializer,
)
from apps.form_2.services import FormF2Service, parse_form_f2_file
from apps.form_2.services import parse_form_f2_file
from apps.form_2.tasks import process_form_f2_file
from rest_framework import status
from rest_framework.parsers import MultiPartParser
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
@@ -44,11 +45,18 @@ class FormF2UploadView(APIView):
serializer.is_valid(raise_exception=True)
file = serializer.validated_data["file"]
report_year = serializer.validated_data["report_year"]
report_quarter = serializer.validated_data.get("report_quarter")
# Для больших файлов - фоновая обработка
if file.size > BACKGROUND_THRESHOLD:
file_content = file.read()
task = process_form_f2_file.delay(file_content, file.name)
task = process_form_f2_file.delay(
file_content,
file.name,
report_year,
report_quarter,
)
return Response(
{
@@ -61,7 +69,11 @@ class FormF2UploadView(APIView):
# Синхронная обработка
try:
result = parse_form_f2_file(file)
result = parse_form_f2_file(
file,
report_year=report_year,
report_quarter=report_quarter,
)
result_serializer = FormF2ParseResultSerializer(result)
return Response(
@@ -82,7 +94,7 @@ class FormF2UploadView(APIView):
)
class FormF2RecordViewSet(BaseViewSet):
class FormF2RecordViewSet(ReadOnlyViewSet[FormF2Record]):
"""
ViewSet для записей формы Ф-2.
@@ -90,9 +102,11 @@ class FormF2RecordViewSet(BaseViewSet):
GET /api/v1/forms/f2/records/{id}/ - детали записи
"""
queryset = FormF2Record.objects.select_related("organization").all()
queryset = FormF2Record.objects.select_related("organization").filter(
is_active_version=True
)
serializer_class = FormF2RecordSerializer
service_class = FormF2Service
permission_classes = [IsAuthenticated]
def get_serializer_class(self):
"""Выбор сериализатора в зависимости от действия."""
@@ -104,6 +118,12 @@ class FormF2RecordViewSet(BaseViewSet):
"""Фильтрация по batch_id."""
queryset = super().get_queryset()
batch_id = self.request.query_params.get("batch_id")
report_year = self.request.query_params.get("report_year")
report_quarter = self.request.query_params.get("report_quarter")
if batch_id:
queryset = queryset.filter(load_batch=batch_id)
if report_year:
queryset = queryset.filter(report_year=report_year)
if report_quarter:
queryset = queryset.filter(report_quarter=report_quarter)
return queryset