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)
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)
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
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)
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)
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
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)
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)
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)
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)
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)
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)