Exemple #1
0
def eligibility(request,
                job_application_id,
                template_name="apply/process_eligibility.html"):
    """
    Check eligibility.
    """

    queryset = JobApplication.objects.siae_member_required(request.user)
    job_application = get_object_or_404(
        queryset,
        id=job_application_id,
        state=JobApplicationWorkflow.STATE_PROCESSING)

    if not job_application.to_siae.is_subject_to_eligibility_rules:
        raise Http404()

    if request.method == "POST":
        if not request.POST.get("confirm-eligibility") == "1":
            messages.error(
                request, _("Vous devez confirmer l'éligibilité du candidat."))
        else:
            user_info = get_user_info(request)
            EligibilityDiagnosis.create_diagnosis(job_application.job_seeker,
                                                  user_info)
            messages.success(request, _("Éligibilité confirmée !"))
            next_url = reverse(
                "apply:details_for_siae",
                kwargs={"job_application_id": job_application.id},
            )
            return HttpResponseRedirect(next_url)

    context = {"job_application": job_application}
    return render(request, template_name, context)
Exemple #2
0
def step_eligibility(request,
                     siae_pk,
                     template_name="apply/submit_step_eligibility.html"):
    """
    Check eligibility.
    """
    session_data = request.session[settings.ITOU_SESSION_JOB_APPLICATION_KEY]
    siae = get_object_or_404(Siae.active_objects,
                             pk=session_data["to_siae_pk"])
    user_info = get_user_info(request)
    next_url = reverse("apply:step_application", kwargs={"siae_pk": siae_pk})

    step_required = (user_info.is_authorized_prescriber
                     and siae.is_subject_to_eligibility_rules)
    if not step_required:
        return HttpResponseRedirect(next_url)

    job_seeker = get_user_model().objects.get(pk=session_data["job_seeker_pk"])

    # This step is only required if the job seeker hasn't already
    # an eligibility diagnosis.
    if job_seeker.has_eligibility_diagnosis:
        return HttpResponseRedirect(next_url)

    if request.method == "POST":
        EligibilityDiagnosis.create_diagnosis(job_seeker, user_info)
        messages.success(request, _("Éligibilité confirmée !"))
        return HttpResponseRedirect(next_url)

    context = {"siae": siae, "job_seeker": job_seeker}
    return render(request, template_name, context)
Exemple #3
0
def get_approvals_wrapper(request, job_seeker, siae):
    """
    Returns an `ApprovalsWrapper` if possible or stop
    the job application submit process.
    This works only when the `job_seeker` is known.
    """
    user_info = get_user_info(request)
    approvals_wrapper = job_seeker.approvals_wrapper

    if approvals_wrapper.cannot_bypass_waiting_period(
            siae=siae,
            sender_prescriber_organization=user_info.prescriber_organization):
        error = approvals_wrapper.ERROR_CANNOT_OBTAIN_NEW_FOR_PROXY
        if user_info.user == job_seeker:
            error = approvals_wrapper.ERROR_CANNOT_OBTAIN_NEW_FOR_USER
        raise PermissionDenied(error)

    if approvals_wrapper.has_valid and approvals_wrapper.latest_approval.is_pass_iae:

        latest_approval = approvals_wrapper.latest_approval
        # Ensure that an existing approval can be unsuspended.
        if latest_approval.is_suspended and not latest_approval.can_be_unsuspended:
            error = Approval.ERROR_PASS_IAE_SUSPENDED_FOR_PROXY
            if user_info.user == job_seeker:
                error = Approval.ERROR_PASS_IAE_SUSPENDED_FOR_USER
            raise PermissionDenied(error)

    return approvals_wrapper
Exemple #4
0
    def test_get_user_info_for_job_seeker(self):
        user = JobSeekerFactory()

        factory = RequestFactory()
        request = factory.get("/")
        request.user = user
        middleware = SessionMiddleware()
        middleware.process_request(request)
        request.session.save()

        user_info = get_user_info(request)
        self.assertEqual(user_info.user, user)
        self.assertEqual(user_info.kind, KIND_JOB_SEEKER)
        self.assertEqual(user_info.prescriber_organization, None)
        self.assertEqual(user_info.is_authorized_prescriber, False)
        self.assertEqual(user_info.siae, None)
Exemple #5
0
    def test_get_user_info_for_prescriber_without_organisation(self):
        user = PrescriberFactory()

        factory = RequestFactory()
        request = factory.get("/")
        request.user = user
        middleware = SessionMiddleware()
        middleware.process_request(request)
        request.session.save()

        user_info = get_user_info(request)
        self.assertEqual(user_info.user, user)
        self.assertEqual(user_info.kind, KIND_PRESCRIBER)
        self.assertEqual(user_info.prescriber_organization, None)
        self.assertEqual(user_info.is_authorized_prescriber, False)
        self.assertEqual(user_info.siae, None)
Exemple #6
0
def get_approvals_wrapper(request, job_seeker):
    """
    Returns an `ApprovalsWrapper` if possible or stop
    the job application submit process.
    This works only when the `job_seeker` is known.
    """
    user_info = get_user_info(request)
    approvals_wrapper = job_seeker.approvals_wrapper
    # Ensure that an existing approval is not in waiting period.
    # Only "authorized prescribers" can bypass an approval in waiting period.
    if approvals_wrapper.has_in_waiting_period and not user_info.is_authorized_prescriber:
        error = approvals_wrapper.ERROR_CANNOT_OBTAIN_NEW_FOR_PROXY
        if user_info.user == job_seeker:
            error = approvals_wrapper.ERROR_CANNOT_OBTAIN_NEW_FOR_USER
        raise PermissionDenied(error)
    return approvals_wrapper
Exemple #7
0
def step_eligibility(request,
                     siae_pk,
                     template_name="apply/submit_step_eligibility.html"):
    """
    Check eligibility (as an authorized prescriber).
    """
    session_data = request.session[settings.ITOU_SESSION_JOB_APPLICATION_KEY]
    siae = get_object_or_404(Siae, pk=session_data["to_siae_pk"])
    next_url = reverse("apply:step_application", kwargs={"siae_pk": siae_pk})

    if not siae.is_subject_to_eligibility_rules:
        return HttpResponseRedirect(next_url)

    user_info = get_user_info(request)
    job_seeker = get_object_or_404(User, pk=session_data["job_seeker_pk"])
    approvals_wrapper = get_approvals_wrapper(request, job_seeker, siae)

    skip = (
        # Only "authorized prescribers" can perform an eligibility diagnosis.
        not user_info.is_authorized_prescriber
        # Eligibility diagnosis already performed.
        or job_seeker.has_valid_diagnosis())

    if skip:
        return HttpResponseRedirect(next_url)

    data = request.POST if request.method == "POST" else None
    form_administrative_criteria = AdministrativeCriteriaForm(request.user,
                                                              siae=None,
                                                              data=data)

    if request.method == "POST" and form_administrative_criteria.is_valid():
        EligibilityDiagnosis.create_diagnosis(
            job_seeker,
            user_info,
            administrative_criteria=form_administrative_criteria.cleaned_data)
        messages.success(request, "Éligibilité confirmée !")
        return HttpResponseRedirect(next_url)

    context = {
        "siae": siae,
        "job_seeker": job_seeker,
        "approvals_wrapper": approvals_wrapper,
        "form_administrative_criteria": form_administrative_criteria,
    }
    return render(request, template_name, context)
Exemple #8
0
def step_sender(request, siae_pk):
    """
    Determine info about the sender.
    """
    user_info = get_user_info(request)

    session_data = request.session[settings.ITOU_SESSION_JOB_APPLICATION_KEY]
    session_data["sender_pk"] = user_info.user.pk
    session_data["sender_kind"] = user_info.kind

    if user_info.prescriber_organization:
        session_data["sender_prescriber_organization_pk"] = user_info.prescriber_organization.pk

    if user_info.siae:
        session_data["sender_siae_pk"] = user_info.siae.pk

    next_url = reverse("apply:step_job_seeker", kwargs={"siae_pk": siae_pk})
    return HttpResponseRedirect(next_url)
Exemple #9
0
def eligibility(request,
                job_application_id,
                template_name="apply/process_eligibility.html"):
    """
    Check eligibility (as an SIAE).
    """

    queryset = JobApplication.objects.siae_member_required(request.user)
    job_application = get_object_or_404(
        queryset,
        id=job_application_id,
        state__in=[
            JobApplicationWorkflow.STATE_PROCESSING,
            JobApplicationWorkflow.STATE_POSTPONED
        ],
    )

    if not job_application.to_siae.is_subject_to_eligibility_rules:
        raise Http404()

    form_administrative_criteria = AdministrativeCriteriaForm(
        request.user, siae=job_application.to_siae, data=request.POST or None)
    form_confirm_eligibility = ConfirmEligibilityForm(
        data=request.POST or None)

    if request.method == "POST" and form_confirm_eligibility.is_valid(
    ) and form_administrative_criteria.is_valid():
        user_info = get_user_info(request)
        EligibilityDiagnosis.create_diagnosis(
            job_application.job_seeker,
            user_info,
            administrative_criteria=form_administrative_criteria.cleaned_data)
        messages.success(request, _("Éligibilité confirmée !"))
        next_url = reverse("apply:details_for_siae",
                           kwargs={"job_application_id": job_application.id})
        return HttpResponseRedirect(next_url)

    context = {
        "approvals_wrapper": job_application.job_seeker.approvals_wrapper,
        "job_application": job_application,
        "form_administrative_criteria": form_administrative_criteria,
        "form_confirm_eligibility": form_confirm_eligibility,
    }
    return render(request, template_name, context)
Exemple #10
0
    def test_get_user_info_for_siae_staff(self):
        siae = SiaeWithMembershipFactory()
        user = siae.members.first()

        factory = RequestFactory()
        request = factory.get("/")
        request.user = user
        middleware = SessionMiddleware()
        middleware.process_request(request)
        # Simulate ItouCurrentOrganizationMiddleware.
        request.session[settings.ITOU_SESSION_CURRENT_SIAE_KEY] = siae.pk
        request.session.save()

        user_info = get_user_info(request)
        self.assertEqual(user_info.user, user)
        self.assertEqual(user_info.kind, KIND_SIAE_STAFF)
        self.assertEqual(user_info.prescriber_organization, None)
        self.assertEqual(user_info.is_authorized_prescriber, False)
        self.assertEqual(user_info.siae, siae)
Exemple #11
0
    def test_get_user_info_for_authorized_prescriber(self):
        prescriber_organization = PrescriberOrganizationWithMembershipFactory(is_authorized=True)
        user = prescriber_organization.members.first()

        factory = RequestFactory()
        request = factory.get("/")
        request.user = user
        middleware = SessionMiddleware(get_response_for_middlewaremixin)
        middleware.process_request(request)
        # Simulate ItouCurrentOrganizationMiddleware.
        request.session[settings.ITOU_SESSION_CURRENT_PRESCRIBER_ORG_KEY] = prescriber_organization.pk
        request.session.save()

        user_info = get_user_info(request)
        self.assertEqual(user_info.user, user)
        self.assertEqual(user_info.kind, KIND_PRESCRIBER)
        self.assertEqual(user_info.prescriber_organization, prescriber_organization)
        self.assertEqual(user_info.is_authorized_prescriber, True)
        self.assertEqual(user_info.siae, None)
Exemple #12
0
def step_eligibility(request,
                     siae_pk,
                     template_name="apply/submit_step_eligibility.html"):
    """
    Check eligibility.
    """
    session_data = request.session[settings.ITOU_SESSION_JOB_APPLICATION_KEY]
    siae = get_object_or_404(Siae.active_objects,
                             pk=session_data["to_siae_pk"])
    next_url = reverse("apply:step_application", kwargs={"siae_pk": siae_pk})

    if not siae.is_subject_to_eligibility_rules:
        return HttpResponseRedirect(next_url)

    user_info = get_user_info(request)
    job_seeker = get_user_model().objects.get(pk=session_data["job_seeker_pk"])
    approvals_wrapper = get_approvals_wrapper(request, job_seeker)

    skip = (
        # Only "authorized prescribers" can perform an eligibility diagnosis.
        not user_info.is_authorized_prescriber
        # Eligibility diagnosis already performed.
        or job_seeker.has_eligibility_diagnosis)
    if skip:
        return HttpResponseRedirect(next_url)

    if request.method == "POST":
        EligibilityDiagnosis.create_diagnosis(job_seeker, user_info)
        messages.success(request, _("Éligibilité confirmée !"))
        return HttpResponseRedirect(next_url)

    context = {
        "siae": siae,
        "job_seeker": job_seeker,
        "approvals_wrapper": approvals_wrapper,
    }
    return render(request, template_name, context)