Esempio n. 1
0
    def post(self, request, organization):
        try:
            task_id = OrganizationOnboardingTask.TASK_LOOKUP_BY_KEY[
                request.data["task"]]
        except KeyError:
            return Response({"detail": "Invalid task key"}, status=422)

        status = OrganizationOnboardingTask.STATUS_LOOKUP_BY_KEY.get(
            request.data["status"])
        if status is None:
            return Response({"detail": "Invalid status key"}, status=422)

        # Cannot skip unskippable tasks
        if (status == OnboardingTaskStatus.SKIPPED
                and task_id not in OrganizationOnboardingTask.SKIPPABLE_TASKS):
            return Response(status=422)

        rows_affected, created = OrganizationOnboardingTask.objects.create_or_update(
            organization=organization,
            user=request.user,
            task=task_id,
            values={
                "status": status,
                "date_completed": timezone.now()
            },
        )

        if rows_affected or created:
            try_mark_onboarding_complete(organization.id)

        return Response(status=204)
Esempio n. 2
0
    def post(self, request, organization):
        try:
            task_id = int(request.data["task"])
        except (TypeError, ValueError):
            return Response(status=500)

        if request.data["status"] == "skipped" and task_id in (
                OnboardingTask.INVITE_MEMBER,
                OnboardingTask.SECOND_PLATFORM,
                OnboardingTask.USER_CONTEXT,
                OnboardingTask.RELEASE_TRACKING,
                OnboardingTask.SOURCEMAPS,
                OnboardingTask.USER_REPORTS,
                OnboardingTask.ISSUE_TRACKER,
                OnboardingTask.NOTIFICATION_SERVICE,
        ):
            rows_affected, created = OrganizationOnboardingTask.objects.create_or_update(
                organization=organization,
                user=request.user,
                task=request.data["task"],
                values={
                    "status": OnboardingTaskStatus.SKIPPED,
                    "date_completed": timezone.now()
                },
            )
            if rows_affected or created:
                try_mark_onboarding_complete(organization.id)
            return Response(status=204)

        return Response(status=404)
Esempio n. 3
0
    def post(self, request, organization):
        try:
            task_id = OrganizationOnboardingTask.TASK_LOOKUP_BY_KEY[
                request.data["task"]]
        except KeyError:
            return Response({"detail": "Invalid task key"}, status=422)

        status_value = request.data.get("status")
        completion_seen = request.data.get("completionSeen")

        if status_value is None and completion_seen is None:
            return Response(
                {"detail": "completionSeen or status must be provided"},
                status=422)

        status = OrganizationOnboardingTask.STATUS_LOOKUP_BY_KEY.get(
            status_value)

        if status_value and status is None:
            return Response({"detail": "Invalid status key"}, status=422)

        # Cannot skip unskippable tasks
        if (status == OnboardingTaskStatus.SKIPPED
                and task_id not in OrganizationOnboardingTask.SKIPPABLE_TASKS):
            return Response(status=422)

        values = {}

        if status:
            values["status"] = status
            values["date_completed"] = timezone.now()
        if completion_seen:
            values["completion_seen"] = timezone.now()

        rows_affected, created = OrganizationOnboardingTask.objects.create_or_update(
            organization=organization,
            task=task_id,
            values=values,
            defaults={"user": request.user})

        if rows_affected or created:
            try_mark_onboarding_complete(organization.id)

        return Response(status=204)