ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: трассировка source-target в карточке запроса

This commit is contained in:
DCCONSTRUCTIONS
2026-04-18 22:01:48 +03:00
parent fb33f093de
commit 2ee6d8559c
7 changed files with 192 additions and 0 deletions
@@ -78,6 +78,12 @@ class ExternalContourIssueSerializer(BaseSerializer):
class ExternalContourRequestSerializer(BaseSerializer):
issue = ExternalContourIssueSerializer(read_only=True)
source_project_id = serializers.SerializerMethodField()
source_project_name = serializers.SerializerMethodField()
target_project_id = serializers.SerializerMethodField()
target_project_name = serializers.SerializerMethodField()
requested_by_id = serializers.SerializerMethodField()
requested_by_name = serializers.SerializerMethodField()
requested_at = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
class Meta:
@@ -89,6 +95,12 @@ class ExternalContourRequestSerializer(BaseSerializer):
"created_by",
"issue",
"source_project_id",
"source_project_name",
"target_project_id",
"target_project_name",
"requested_by_id",
"requested_by_name",
"requested_at",
"status",
]
read_only_fields = fields
@@ -96,6 +108,44 @@ class ExternalContourRequestSerializer(BaseSerializer):
def get_source_project_id(self, obj):
return obj.extra.get("source_project_id")
def get_source_project_name(self, obj):
return obj.extra.get("source_project_name")
def get_target_project_id(self, obj):
target_project_id = obj.extra.get("target_project_id")
if target_project_id:
return target_project_id
if obj.issue and obj.issue.project_id:
return str(obj.issue.project_id)
return None
def get_target_project_name(self, obj):
target_project_name = obj.extra.get("target_project_name")
if target_project_name:
return target_project_name
if obj.issue and obj.issue.project:
return obj.issue.project.name
return None
def get_requested_by_id(self, obj):
requested_by_id = obj.extra.get("requested_by_id")
if requested_by_id:
return requested_by_id
if obj.created_by_id:
return str(obj.created_by_id)
return None
def get_requested_by_name(self, obj):
return obj.extra.get("requested_by_name")
def get_requested_at(self, obj):
requested_at = obj.extra.get("requested_at")
if requested_at:
return requested_at
if obj.created_at:
return obj.created_at.isoformat()
return None
def get_status(self, obj):
issue = obj.issue
if issue and issue.state and issue.state.group in ["completed", "cancelled"]: