Implement exchange imports and frontend reporting APIs
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 3m50s
CI/CD Pipeline / Run Tests (push) Successful in 3m57s
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-04-07 16:31:04 +02:00
parent 76a86d0b20
commit 697ecb7d1c
155 changed files with 5604 additions and 346 deletions

View File

@@ -2,13 +2,14 @@
Сериализаторы для организаций.
Содержит:
- OrganizationSerializer - полный сериализатор
- OrganizationListSerializer - краткий для списков
- legacy nested serializers for report forms;
- frontend-facing serializers for organization catalog endpoints.
"""
from rest_framework import serializers
from apps.organization.models import Organization
from apps.registers.models import Register
from rest_framework import serializers
class OrganizationRegisterSerializer(serializers.ModelSerializer):
@@ -21,7 +22,7 @@ class OrganizationRegisterSerializer(serializers.ModelSerializer):
class OrganizationSerializer(serializers.ModelSerializer):
"""Полный сериализатор организации."""
"""Полный nested-сериализатор организации для внутренних API."""
active_registry_names = serializers.SerializerMethodField()
active_registries = serializers.SerializerMethodField()
@@ -32,7 +33,9 @@ class OrganizationSerializer(serializers.ModelSerializer):
@staticmethod
def get_active_registries(obj: Organization) -> list[dict[str, str]]:
return OrganizationRegisterSerializer(obj.get_active_registries(), many=True).data
return OrganizationRegisterSerializer(
obj.get_active_registries(), many=True
).data
class Meta:
model = Organization
@@ -52,7 +55,7 @@ class OrganizationSerializer(serializers.ModelSerializer):
class OrganizationListSerializer(serializers.ModelSerializer):
"""Краткий сериализатор для списков."""
"""Краткий nested-сериализатор для списков."""
active_registry_names = serializers.SerializerMethodField()
@@ -69,3 +72,125 @@ class OrganizationListSerializer(serializers.ModelSerializer):
"ogrn",
"active_registry_names",
]
class GeneralDirectorSerializer(serializers.Serializer):
"""Сериализатор блока генерального директора."""
full_name = serializers.CharField()
inn = serializers.CharField()
appointment_date = serializers.DateField(allow_null=True)
class OrganizationCatalogSummarySerializer(serializers.Serializer):
"""Сериализатор summary блока организации."""
financial_reports_available = serializers.BooleanField()
tax_reports_available = serializers.BooleanField()
active_registry_names = serializers.ListField(child=serializers.CharField())
class OrganizationCatalogBaseSerializer(serializers.ModelSerializer):
"""Базовый сериализатор frontend-контракта организации."""
short_name = serializers.SerializerMethodField()
full_name = serializers.CharField(source="name", read_only=True)
corporation_scope = serializers.SerializerMethodField()
corporation_scope_label = serializers.SerializerMethodField()
organization_type_label = serializers.CharField(read_only=True)
active_registry_names = serializers.SerializerMethodField()
@staticmethod
def get_short_name(obj: Organization) -> str:
return obj.display_short_name
@staticmethod
def get_active_registry_names(obj: Organization) -> list[str]:
return obj.get_active_registry_names()
@staticmethod
def get_corporation_scope(obj: Organization) -> list[str]:
return obj.get_corporation_scopes()
@staticmethod
def get_corporation_scope_label(obj: Organization) -> list[str]:
return obj.get_corporation_scope_labels()
class OrganizationCatalogListSerializer(OrganizationCatalogBaseSerializer):
"""Сериализатор списка организаций для `/api/v1/organizations/`."""
class Meta:
model = Organization
fields = [
"id",
"short_name",
"full_name",
"corporation_scope",
"corporation_scope_label",
"organization_type",
"organization_type_label",
"inn",
"ogrn",
"kpp",
"okpo",
"active_registry_names",
]
class OrganizationCatalogDetailSerializer(OrganizationCatalogBaseSerializer):
"""Сериализатор детальной карточки организации."""
active_registries = serializers.SerializerMethodField()
general_director = serializers.SerializerMethodField()
summary = serializers.SerializerMethodField()
@staticmethod
def get_active_registries(obj: Organization) -> list[dict[str, str]]:
return OrganizationRegisterSerializer(
obj.get_active_registries(), many=True
).data
@staticmethod
def get_general_director(obj: Organization) -> dict[str, str | None]:
return {
"full_name": obj.general_director_name,
"inn": obj.general_director_inn,
"appointment_date": obj.general_director_appointment_date,
}
@staticmethod
def get_summary(obj: Organization) -> dict[str, object]:
return {
"financial_reports_available": obj.financial_reports_available,
"tax_reports_available": obj.tax_reports_available,
"active_registry_names": obj.get_active_registry_names(),
}
class Meta:
model = Organization
fields = [
"id",
"short_name",
"full_name",
"corporation_scope",
"corporation_scope_label",
"organization_type",
"organization_type_label",
"inn",
"ogrn",
"kpp",
"okpo",
"registration_date",
"legal_address",
"activity_type",
"founder_name",
"ownership_type",
"legal_form",
"charter_capital_amount",
"general_director",
"summary",
"active_registries",
"created_at",
"updated_at",
]