Bases: SubmissionNestedMixin
, ListModelMixin
, CreateModelMixin
, GenericViewSet
permission_classes
class-attribute
instance-attribute
serializer_class
class-attribute
instance-attribute
get_submission_object
Source code in hypha/apply/api/v1/mixin.py
| def get_submission_object(self):
return get_object_or_404(ApplicationSubmission, id=self.kwargs["submission_pk"])
|
get_queryset
Source code in hypha/apply/api/v1/screening/views.py
| def get_queryset(self):
submission = self.get_submission_object()
return submission.screening_statuses.all()
|
create
create(request, *args, **kwargs)
Source code in hypha/apply/api/v1/screening/views.py
| def create(self, request, *args, **kwargs):
ser = ScreeningStatusSerializer(data=request.data)
ser.is_valid(raise_exception=True)
submission = self.get_submission_object()
screening_status = get_object_or_404(
ScreeningStatus, id=ser.validated_data["id"]
)
if not submission.screening_statuses.filter(default=True).exists():
raise ValidationError(
{"detail": "Can't set screening decision without default being set"}
)
if (
submission.screening_statuses.exists()
and submission.screening_statuses.first().yes != screening_status.yes
):
raise ValidationError(
{"detail": "Can't set screening decision for both yes and no"}
)
submission.screening_statuses.add(screening_status)
ser = self.get_serializer(submission.screening_statuses.all(), many=True)
return Response(ser.data, status=status.HTTP_201_CREATED)
|
default
default(request, *args, **kwargs)
Source code in hypha/apply/api/v1/screening/views.py
| @action(detail=False, methods=["post"])
def default(self, request, *args, **kwargs):
ser = ScreeningStatusDefaultSerializer(data=request.data)
ser.is_valid(raise_exception=True)
yes = ser.validated_data["yes"]
submission = self.get_submission_object()
if submission.screening_statuses.filter(default=False).exists():
submission.screening_statuses.remove(
*submission.screening_statuses.filter(default=False)
)
screening_status = ScreeningStatus.objects.get(default=True, yes=yes)
if submission.has_default_screening_status_set:
default_status = submission.screening_statuses.get()
submission.screening_statuses.remove(default_status)
submission.screening_statuses.add(screening_status)
ser = self.get_serializer(submission.screening_statuses.get(default=True))
return Response(ser.data, status=status.HTTP_201_CREATED)
|
destroy
destroy(request, *args, **kwargs)
Source code in hypha/apply/api/v1/screening/views.py
| def destroy(self, request, *args, **kwargs):
screening_status = self.get_object()
if screening_status.default:
raise ValidationError(
{"detail": "Can't delete default screening decision."}
)
submission = self.get_submission_object()
submission.screening_statuses.remove(screening_status)
ser = self.get_serializer(submission.screening_statuses.all(), many=True)
return Response(ser.data)
|