Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions partner_programs/management_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,28 @@ def get(self, request, pk, link_id):
return Response(team_data(managed_project(program, link_id)))


class ManagementProjectActionPreviewView(ManagementBase):
def post(self, request, pk):
from partner_programs.serializers.management import ManagementProjectActionWrite
from partner_programs.services.management_project_actions import preview_action

managed_program(pk, request.user)
body = ManagementProjectActionWrite(data=request.data)
body.is_valid(raise_exception=True)
return Response(preview_action(pk, request.user, body.validated_data))


class ManagementProjectActionApplyView(ManagementBase):
def post(self, request, pk):
from partner_programs.serializers.management import ManagementProjectActionApply
from partner_programs.services.management_project_actions import apply_action

managed_program(pk, request.user)
body = ManagementProjectActionApply(data=request.data)
body.is_valid(raise_exception=True)
return Response(apply_action(pk, request.user, body.validated_data))


class ManagementEvaluationView(ManagementBase):
def get(self, request, pk, link_id):
program = managed_program(pk, request.user)
Expand Down
31 changes: 31 additions & 0 deletions partner_programs/serializers/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,37 @@ def validate(self, attrs):
return attrs


class ManagementProjectActionWrite(ManagementIdsWrite):
action = serializers.ChoiceField(choices=("change_case", "detach", "submit"))
case_name = serializers.CharField(
required=False, max_length=1000, trim_whitespace=False
)

def to_internal_value(self, data):
from collections.abc import Mapping

if not isinstance(data, Mapping):
raise serializers.ValidationError(
{"detail": "Ожидается объект с параметрами действия."}
)
return super().to_internal_value(data)

def validate(self, attrs):
if attrs["action"] != "submit" and len(attrs["ids"]) != 1:
raise serializers.ValidationError({"ids": "Выберите один проект."})
if attrs["action"] == "change_case" and not attrs.get("case_name"):
raise serializers.ValidationError({"case_name": "Выберите кейс."})
if attrs["action"] != "change_case" and "case_name" in attrs:
raise serializers.ValidationError(
{"case_name": "Кейс не используется в этом действии."}
)
return attrs


class ManagementProjectActionApply(ManagementProjectActionWrite):
preview_token = serializers.CharField(max_length=200000)


BASIC_FIELDS = (
"name",
"city",
Expand Down
Loading
Loading