Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
EwenKorr committed Jan 8, 2025
1 parent 6840f5f commit f56466b
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 44 deletions.
2 changes: 1 addition & 1 deletion itou/templates/apply/submit/application/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ <h1 class="flex-grow-1">{% include 'apply/includes/_submit_title.html' %}</h1>
<p>
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 %}
<a class="btn btn-link" href="{% url "job_seekers_views:update_job_seeker_start" %}{% querystring job_seeker=job_seeker.public_id company=siae.pk from_url=request.get_full_path|urlencode %}">Vérifier le profil</a>
<a class="btn btn-link" 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 %}">Vérifier le profil</a>
{% endif %}
{% if new_check_needed %}<i class="ri-information-line ri-xl text-warning"></i>{% endif %}
</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ <h1>
<h2>
Informations personnelles
<a class="btn btn-outline-primary float-end"
href="{% url "job_seekers_views:update_job_seeker_start" %}{% querystring job_seeker=job_seeker.public_id company=siae.pk from_url=request.get_full_path|urlencode %}">Mettre à jour</a>
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</a>
</h2>

{% include "apply/includes/profile_infos.html" %}
Expand Down
25 changes: 12 additions & 13 deletions itou/www/apply/views/submit_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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__)
Expand Down Expand Up @@ -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):
Expand Down
10 changes: 5 additions & 5 deletions itou/www/job_seekers_views/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
urlpatterns = [
path("details/<uuid:public_id>", 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("<uuid:session_uuid>/sender/check-nir", views.CheckNIRForSenderView.as_view(), name="check_nir_for_sender"),
path(
Expand Down Expand Up @@ -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/<uuid:session_uuid>/1",
views.UpdateJobSeekerStep1View.as_view(),
Expand Down
66 changes: 44 additions & 22 deletions itou/www/job_seekers_views/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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) | {
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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 "")
)


Expand Down
13 changes: 11 additions & 2 deletions tests/www/apply/test_submit.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit f56466b

Please sign in to comment.