From f56466b59c8963f20e89913629c448160e2b8eac Mon Sep 17 00:00:00 2001 From: Ewen Corre Date: Tue, 7 Jan 2025 16:31:11 +0100 Subject: [PATCH] wip --- .../apply/submit/application/base.html | 2 +- .../check_job_seeker_info_for_hire.html | 2 +- itou/www/apply/views/submit_views.py | 25 ++++--- itou/www/job_seekers_views/urls.py | 10 +-- itou/www/job_seekers_views/views.py | 66 ++++++++++++------- tests/www/apply/test_submit.py | 13 +++- 6 files changed, 74 insertions(+), 44 deletions(-) diff --git a/itou/templates/apply/submit/application/base.html b/itou/templates/apply/submit/application/base.html index 9da30caaea4..0b1197a25c2 100644 --- a/itou/templates/apply/submit/application/base.html +++ b/itou/templates/apply/submit/application/base.html @@ -38,7 +38,7 @@

{% include 'apply/includes/_submit_title.html' %}

Dernière actualisation du profil : {{ job_seeker.last_checked_at|date }} à {{ job_seeker.last_checked_at|time }} {% if can_view_personal_information and not request.user.is_job_seeker %} - Vérifier le profil + Vérifier le profil {% endif %} {% if new_check_needed %}{% endif %}

diff --git a/itou/templates/job_seekers_views/check_job_seeker_info_for_hire.html b/itou/templates/job_seekers_views/check_job_seeker_info_for_hire.html index 4b283d55df2..3714aaf330c 100644 --- a/itou/templates/job_seekers_views/check_job_seeker_info_for_hire.html +++ b/itou/templates/job_seekers_views/check_job_seeker_info_for_hire.html @@ -15,7 +15,7 @@

Informations personnelles Mettre à jour + href="{% url "job_seekers_views:start" %}{% querystring tunnel="job-seeker-update" job_seeker=job_seeker.public_id company=siae.pk from_url=request.get_full_path|urlencode %}">Mettre à jour

{% include "apply/includes/profile_infos.html" %} diff --git a/itou/www/apply/views/submit_views.py b/itou/www/apply/views/submit_views.py index 6ff1f98b991..7b44f996365 100644 --- a/itou/www/apply/views/submit_views.py +++ b/itou/www/apply/views/submit_views.py @@ -9,6 +9,7 @@ from django.shortcuts import get_object_or_404, render from django.urls import reverse from django.utils import timezone +from django.utils.http import urlencode from django.views.generic import TemplateView from itou.approvals.models import Approval @@ -23,16 +24,11 @@ from itou.users.models import User from itou.utils.session import SessionNamespace from itou.utils.urls import add_url_params -from itou.www.apply.forms import ( - ApplicationJobsForm, - SubmitJobApplicationForm, -) +from itou.www.apply.forms import ApplicationJobsForm, SubmitJobApplicationForm from itou.www.apply.views import common as common_views, constants as apply_view_constants from itou.www.eligibility_views.forms import AdministrativeCriteriaForm from itou.www.geiq_eligibility_views.forms import GEIQAdministrativeCriteriaForm -from itou.www.job_seekers_views.forms import ( - CreateOrUpdateJobSeekerStep2Form, -) +from itou.www.job_seekers_views.forms import CreateOrUpdateJobSeekerStep2Form logger = logging.getLogger(__name__) @@ -301,13 +297,16 @@ def get(self, request, *args, **kwargs): reverse("apply:pending_authorization_for_sender", kwargs={"company_pk": self.company.pk}) ) - # Init a job_seeker_session needed for job_seekers_views - job_seeker_session = self.init_job_seeker_session(request) + params = { + "tunnel": f"job-seeker-check-nir-{tunnel}", + "apply_tunnel": tunnel, + "company": self.company.pk, + "from_url": self.get_reset_url(), + "target_url": "toto", + } | ({"gps": "true"} if self.is_gps else {}) - return HttpResponseRedirect( - reverse(f"job_seekers_views:check_nir_for_{tunnel}", kwargs={"session_uuid": job_seeker_session.name}) - + ("?gps=true" if self.is_gps else "") - ) + next_url = f'{reverse("job_seekers_views:start")}?{urlencode(params)}' + return HttpResponseRedirect(next_url) class PendingAuthorizationForSender(ApplyStepForSenderBaseView): diff --git a/itou/www/job_seekers_views/urls.py b/itou/www/job_seekers_views/urls.py index 30d6f506bb6..2ea0c94911f 100644 --- a/itou/www/job_seekers_views/urls.py +++ b/itou/www/job_seekers_views/urls.py @@ -8,6 +8,11 @@ urlpatterns = [ path("details/", views.JobSeekerDetailView.as_view(), name="details"), path("list", views.JobSeekerListView.as_view(), name="list"), + path( + "start", + views.JobSeekerStartView.as_view(), + name="start", + ), # For sender path("/sender/check-nir", views.CheckNIRForSenderView.as_view(), name="check_nir_for_sender"), path( @@ -110,11 +115,6 @@ name="check_nir_for_job_seeker", ), # Job seeker check/updates - path( - "update/start", - views.UpdateJobSeekerStartView.as_view(), - name="update_job_seeker_start", - ), path( "update//1", views.UpdateJobSeekerStep1View.as_view(), diff --git a/itou/www/job_seekers_views/views.py b/itou/www/job_seekers_views/views.py index 3a8102132e5..48587ce2dc3 100644 --- a/itou/www/job_seekers_views/views.py +++ b/itou/www/job_seekers_views/views.py @@ -244,7 +244,7 @@ def get_back_url(self): return None def get_reset_url(self): - return self.job_seeker_session.get("config", {}).get("reset_url") or reverse("dashboard:index") + return self.job_seeker_session.get("config", {}).get("from_url") or reverse("dashboard:index") def get_context_data(self, **kwargs): return super().get_context_data(**kwargs) | { @@ -285,6 +285,8 @@ def __init__(self): def setup(self, request, *args, **kwargs): super().setup(request, *args, **kwargs) + if self.job_seeker_session.get("config").get("tunnel") != "job-seeker-check-nir-job-seeker": + raise Http404 self.job_seeker = request.user self.form = CheckJobSeekerNirForm(job_seeker=self.job_seeker, data=request.POST or None) @@ -344,6 +346,11 @@ def __init__(self): def setup(self, request, *args, **kwargs): super().setup(request, *args, **kwargs) + if self.job_seeker_session.get("config").get("tunnel") not in ( + "job-seeker-check-nir-sender", + "job-seeker-check-nir-hire", + ): + raise Http404 self.form = CheckJobSeekerNirForm(job_seeker=None, data=request.POST or None, is_gps=self.is_gps) def search_by_email_url(self, session_uuid): @@ -764,41 +771,56 @@ def get_context_data(self, **kwargs): return super().get_context_data(**kwargs) | {"profile": self.profile, "progress": "80"} -class UpdateJobSeekerStartView(View): +class JobSeekerStartView(View): def setup(self, request, *args, **kwargs): super().setup(request, *args, **kwargs) - try: - job_seeker = get_object_or_404( - User.objects.filter(kind=UserKind.JOB_SEEKER), public_id=request.GET.get("job_seeker") - ) - except ValidationError: - raise Http404("Aucun candidat n'a été trouvé") + job_seeker = None + if job_seeker_public_id := request.GET.get("job_seeker"): + try: + job_seeker = get_object_or_404( + User.objects.filter(kind=UserKind.JOB_SEEKER), public_id=job_seeker_public_id + ) + except ValidationError: + raise Http404("Aucun candidat n'a été trouvé") + if company_pk := request.GET.get("company"): + try: + company = get_object_or_404(Company.objects.with_has_active_members(), pk=company_pk) + except ValueError: + raise Http404("Aucune entreprise n'a été trouvée") - try: - company = get_object_or_404(Company.objects.with_has_active_members(), pk=request.GET.get("company")) - except ValueError: - raise Http404("Aucune entreprise n'a été trouvée") + self.tunnel = request.GET.get("tunnel") + self.is_gps = request.GET.get("is_gps") from_url = get_safe_url(request, "from_url", fallback_url=reverse("dashboard:index")) if request.user.is_job_seeker or not request.user.can_view_personal_information(job_seeker): raise PermissionDenied("Votre utilisateur n'est pas autorisé à vérifier les informations de ce candidat") - self.job_seeker_session = SessionNamespace.create_uuid_namespace( - request.session, - data={ - "config": {"from_url": from_url, "session_kind": "job-seeker-update"}, - "job_seeker_pk": job_seeker.pk, - "apply": {"company_pk": company.pk}, - }, + apply_data = ( + {} + | ({"company_pk": company.pk} if company else {}) + | ({"apply_tunnel": apply_tunnel} if apply_tunnel else {}) + + data = {"config": {"from_url": from_url, "tunnel": self.tunnel}, "apply": apply_data} | ( + {"job_seeker_pk": job_seeker.pk} if job_seeker else {} ) + self.job_seeker_session = SessionNamespace.create_uuid_namespace(request.session, data) + def get(self, request, *args, **kwargs): + if not self.tunnel or self.tunnel == "job-seeker-check-nir-job-seeker": + view_name = "job_seekers_views:check_nir_for_job_seeker" + elif self.tunnel == "job-seeker-check-nir-sender": + view_name = "job_seekers_views:check_nir_for_sender" + elif self.tunnel == "job-seeker-check-nir-hire": + view_name = "job_seekers_views:check_nir_for_hire" + elif self.tunnel == "job-seeker-update": + view_name = "job_seekers_views:update_job_seeker_step_1" + return HttpResponseRedirect( - reverse( - "job_seekers_views:update_job_seeker_step_1", kwargs={"session_uuid": self.job_seeker_session.name} - ) + reverse(view_name, kwargs={"session_uuid": self.job_seeker_session.name}) + + ("?gps=true" if self.is_gps else "") ) diff --git a/tests/www/apply/test_submit.py b/tests/www/apply/test_submit.py index 81bc5b8a3b9..7774964acda 100644 --- a/tests/www/apply/test_submit.py +++ b/tests/www/apply/test_submit.py @@ -329,8 +329,17 @@ def test_check_nir_job_seeker_with_lack_of_nir_reason(client): response = client.get(reverse("apply:start", kwargs={"company_pk": company.pk})) assert response.status_code == 302 - [job_seeker_session_name] = [k for k in client.session.keys() if k not in KNOWN_SESSION_KEYS] - next_url = reverse("job_seekers_views:check_nir_for_job_seeker", kwargs={"session_uuid": job_seeker_session_name}) + params = { + "tunnel": f"job-seeker-check-nir-{tunnel}", + "apply_tunnel": tunnel, + "company": self.company.pk, + "from_url": self.get_reset_url(), + "target_url": "toto", + } | ({"gps": "true"} if self.is_gps else {}) + + next_url = add_url_params( + reverse("job_seekers_views:start", kwargs={"session_uuid": job_seeker_session_name}), params + ) assert response.url == next_url # Step check job seeker NIR.