From c13450ae831debf1e124abe0b4d2b1bfc507ebd6 Mon Sep 17 00:00:00 2001 From: ismail Date: Sun, 12 Oct 2025 19:17:05 +0300 Subject: [PATCH] update for job and candidtes stage --- db.sqlite3 | Bin 663552 -> 761856 bytes recruitment/__pycache__/forms.cpython-313.pyc | Bin 22538 -> 23067 bytes .../__pycache__/models.cpython-313.pyc | Bin 45475 -> 45601 bytes recruitment/__pycache__/urls.cpython-313.pyc | Bin 6491 -> 7218 bytes recruitment/__pycache__/views.cpython-313.pyc | Bin 45573 -> 44975 bytes recruitment/forms.py | 16 +- ...ndidate_is_potential_candidate_and_more.py | 23 + .../0003_alter_candidate_exam_date.py | 18 + .../0004_alter_candidate_interview_date.py | 18 + recruitment/models.py | 7 +- recruitment/urls.py | 7 + recruitment/views.py | 261 ++++---- templates/base.html | 21 +- .../includes/candidate_exam_status_form.html | 7 + templates/includes/candidate_modal_body.html | 6 +- .../recruitment/candidate_exam_view.html | 363 ++++++++++++ .../candidate_tier_management.html | 560 +++--------------- 17 files changed, 723 insertions(+), 584 deletions(-) create mode 100644 recruitment/migrations/0002_candidate_is_potential_candidate_and_more.py create mode 100644 recruitment/migrations/0003_alter_candidate_exam_date.py create mode 100644 recruitment/migrations/0004_alter_candidate_interview_date.py create mode 100644 templates/includes/candidate_exam_status_form.html create mode 100644 templates/recruitment/candidate_exam_view.html diff --git a/db.sqlite3 b/db.sqlite3 index 68bc01ef33e46515ba464390c249bd199e9185ae..5a07bdf7ca11bb3ed43965422b6b82e885d3bf41 100644 GIT binary patch literal 761856 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 delta 1388 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 S!^Qlc{Z=S`Y%+sek9-P7Xh@L& diff --git a/recruitment/__pycache__/models.cpython-313.pyc b/recruitment/__pycache__/models.cpython-313.pyc index 3c548915f02847e1d87087313093351a3b9281c4..8a2f7c56bd7f6b75ec9befc49953811a8efe82c9 100644 GIT binary patch delta 2888 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 diff --git a/recruitment/__pycache__/urls.cpython-313.pyc b/recruitment/__pycache__/urls.cpython-313.pyc index 08329cb3946205c7585502a1a76891b8deea6956..2f2412a779bcf0edc65e57de55544e99acfae0b4 100644 GIT binary patch delta 1319 zcmaiyNlX(_7{_OZ0b7+N8OpR!H0+?Hl`aSr5QPZH0n(vESW8QXmQ9ehY$^>mj+pVN z5l?zVIf#jg-n^N47bn&bu0}l!@#I0{d*8&eL~zpn^S$@`y>;fZ<7HjekIc-o6n-u# z-y&I-2U%vuYJ5>SZb%H##gs5Q#Ck^wKKcj&!BC&pLxU5f9r z_GHn29eE?WJy8{j%`6?+>cJkPQcOP-*}FZ-pFmcMU=CRCK$)3cko>V(n82PaIDxX{ zD&>#aU+CKHw>i^H-h3^70rOW$)RCws(I8iHgZ2Hmr13vGnL$xn8cox?lofv5E_G33 zMLL`L#2VJE8>=esLcD9ogV=U0O_bko#k45zaTc6Exq^IR?q^ZyM#WgN>3cTvbY!QR zsM(@y%gx79XKq0uNO>UD@3>V@FY@#%gL83c z^i3mnMyn9z{oE34n@puR8zB9r(hOL^Azw3D&cn1$=x~vaGtl7{z$F3|W6`EtEonj}O-kDUVh6Qlo!--F^>azJd6CVl z^v4hz*Y4|dRi|)IUC7a;c*BT|XbGLRFjRs}4VONQJi{7ANpvf-Pf_V@jCP%Y^=~k+ ze)GF@wIz&N!dRN6y&wsU)~ZW4b*W~{tvY?k=~ISQ5PMf^*J+1NU0ae`E1+6I8Hge_ zrgbvnb@F}O(lMN&8`-)Q5pb72*sD{|j!$hGKurTm0Hzjn+AHT+EC!$65ak+6VP+pR L*3QlM;ZOJvH@l9j delta 680 zcmXYvPiWIn9LJk1E$wPMCNzJV{!v@o6zaOw4lK2(bp11Nq?FFhPCEbvYB%##&7bneot7q7l|dJMgI5>zn7n;`h|i-CN}%jfg`aW;y2hiXZ{A&J9gdxM zKHAX-pHI=b5&lqcb^^~IQYk~EOg~42vN5EiU%nHnNe9C=yQ>r0^-(23ltk|c5%Pvx zM@doj1NSnHU6H-nH_g}0e$uRu=%^+7IUVhYY8E6Bq-=kZ=ISI@#|!I3xNS(lLcmUS zH)*O!Qbl~JNrXistRpO{Y{pMf4T2W~Z@hPsrmG}f#dB*!Xd7`IMWqPyDpHhX8}g+T zbwDSLzDgnfw2r>OeNHwf1|hSu={MyV%cqd<7l_1+n>@1AF z%)x$QT|3nZL@VHn4I(TUa~#mCChY`w?Nru?tl`u-BAhp_u`!<%^UHi!;>SQ-{yzq5 zS*pztZ3fqG5Mjw!VbX*@#Ig!`%O7CZ&miCW0|hAGv&zT!CTS#3B6&Ood$@1yVauY) z?h+lVk+B-Sa+e63#(A1BgX9~ywMB$&qsYT^N)}D`iZnA% fGV^%x(ZFW2U*L_hB~*|z5cEvL;<0<9#(uGXefZIX diff --git a/recruitment/__pycache__/views.cpython-313.pyc b/recruitment/__pycache__/views.cpython-313.pyc index 2f50f817ed3d4345e2c243c340e9aafd0845b212..254399cdcd923ebc9c96e9c9e3075072b3de55c0 100644 GIT binary patch delta 10570 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 delta 11300 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/', views.form_builder, name='form_builder'), path('forms/', views.form_templates_list, name='form_templates_list'), path('forms/create-template/', views.create_form_template, name='create_form_template'), + path('jobs//candidate-tiers/', views.candidate_tier_management_view, name='candidate_tier_management'), + path('jobs//candidate_exam_view/', views.candidate_exam_view, name='candidate_exam_view'), + path('jobs//update_candidate_exam_status/', views.update_candidate_exam_status, name='update_candidate_exam_status'), + path('jobs//bulk_update_candidate_exam_status/', views.bulk_update_candidate_exam_status, name='bulk_update_candidate_exam_status'), + path('htmx//candidate_criteria_view/', views.candidate_criteria_view_htmx, name='candidate_criteria_view_htmx'), + path('htmx//candidate_set_exam_date/', views.candidate_set_exam_date, name='candidate_set_exam_date'), + path('htmx/bulk_candidate_move_to_exam/', views.bulk_candidate_move_to_exam, name='bulk_candidate_move_to_exam'), # path('forms/form//submit/', views.submit_form, name='submit_form'), # path('forms/form//', views.form_wizard_view, name='form_wizard'), diff --git a/recruitment/views.py b/recruitment/views.py index a4da922..c740262 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -12,6 +12,7 @@ from django.urls import reverse from django.conf import settings from django.utils import timezone from .forms import ( + CandidateExamDateForm, ZoomMeetingForm, JobPostingForm, FormTemplateForm, @@ -216,7 +217,7 @@ def create_job(request): job.created_by = request.POST.get("created_by", "").strip() if not job.created_by: job.created_by = "University Administrator" - + job.save() job_apply_url_relative=reverse('job_detail_candidate',kwargs={'slug':job.slug}) job_apply_url_absolute=request.build_absolute_uri(job_apply_url_relative) @@ -273,7 +274,7 @@ def edit_job(request, slug): def job_detail(request, slug): """View details of a specific job""" job = get_object_or_404(JobPosting, slug=slug) - + # Get all candidates for this job, ordered by most recent candidates = job.candidates.all().order_by("-created_at") @@ -289,22 +290,22 @@ def job_detail(request, slug): # 2. Check for POST request (Status Update Submission) if request.method == 'POST': - + status_form = JobPostingStatusForm(request.POST, instance=job) - + if status_form.is_valid(): status_form.save() - + # Add a success message messages.success(request, f"Status for '{job.title}' updated to '{job.get_status_display()}' successfully!") - - + + return redirect('job_detail', slug=slug) else: - + messages.error(request, "Failed to update status due to validation errors.") - - + + context = { "job": job, @@ -325,15 +326,15 @@ def job_image_upload(request, slug): image_upload_form=JobPostingImageForm(request.POST,request.FILES) if image_upload_form.is_valid(): image_upload_form = image_upload_form.save(commit=False) - + image_upload_form.job = job image_upload_form.save() messages.success(request, f"Image uploaded successfully for {job.title}.") return redirect('job_detail', slug=job.slug) else: - + messages.error(request, "Image upload failed: Please ensure a valid image file was selected.") - + return redirect('job_detail', slug=job.slug) return redirect('job_detail', slug=job.slug) @@ -1226,102 +1227,102 @@ def candidate_tier_management_view(request, slug): job = get_object_or_404(JobPosting, slug=slug) # Get all candidates for this job, ordered by match score (descending) - candidates = job.candidates.all().order_by("-match_score") + candidates = job.candidates.filter(stage="Applied").order_by("-match_score") # Get tier categorization parameters - tier1_count = int(request.GET.get("tier1_count", 100)) + # tier1_count = int(request.GET.get("tier1_count", 100)) - # Categorize candidates into tiers - tier1_candidates = candidates[:tier1_count] if tier1_count > 0 else [] - remaining_candidates = candidates[tier1_count:] if tier1_count > 0 else [] + # # Categorize candidates into tiers + # tier1_candidates = candidates[:tier1_count] if tier1_count > 0 else [] + # remaining_candidates = candidates[tier1_count:] if tier1_count > 0 else [] - if len(remaining_candidates) > 0: - # Tier 2: Next 50% of remaining candidates - tier2_count = max(1, len(remaining_candidates) // 2) - tier2_candidates = remaining_candidates[:tier2_count] - tier3_candidates = remaining_candidates[tier2_count:] - else: - tier2_candidates = [] - tier3_candidates = [] + # if len(remaining_candidates) > 0: + # # Tier 2: Next 50% of remaining candidates + # tier2_count = max(1, len(remaining_candidates) // 2) + # tier2_candidates = remaining_candidates[:tier2_count] + # tier3_candidates = remaining_candidates[tier2_count:] + # else: + # tier2_candidates = [] + # tier3_candidates = [] - # Handle form submissions - if request.method == "POST": - # Update tier categorization - if "update_tiers" in request.POST: - tier1_count = int(request.POST.get("tier1_count", 100)) - messages.success(request, f"Tier categorization updated. Tier 1: {tier1_count} candidates") - return redirect("candidate_tier_management", slug=slug) + # # Handle form submissions + # if request.method == "POST": + # # Update tier categorization + # if "update_tiers" in request.POST: + # tier1_count = int(request.POST.get("tier1_count", 100)) + # messages.success(request, f"Tier categorization updated. Tier 1: {tier1_count} candidates") + # return redirect("candidate_tier_management", slug=slug) - # Update individual candidate stages - elif "update_stage" in request.POST: - candidate_id = request.POST.get("candidate_id") - new_stage = request.POST.get("new_stage") - candidate = get_object_or_404(Candidate, id=candidate_id, job=job) + # # Update individual candidate stages + # elif "update_stage" in request.POST: + # candidate_id = request.POST.get("candidate_id") + # new_stage = request.POST.get("new_stage") + # candidate = get_object_or_404(Candidate, id=candidate_id, job=job) - if candidate.can_transition_to(new_stage): - old_stage = candidate.stage - candidate.stage = new_stage - candidate.save() - messages.success(request, f"Updated {candidate.name} from {old_stage} to {new_stage}") - else: - messages.error(request, f"Cannot transition {candidate.name} from {candidate.stage} to {new_stage}") + # if candidate.can_transition_to(new_stage): + # old_stage = candidate.stage + # candidate.stage = new_stage + # candidate.save() + # messages.success(request, f"Updated {candidate.name} from {old_stage} to {new_stage}") + # else: + # messages.error(request, f"Cannot transition {candidate.name} from {candidate.stage} to {new_stage}") - # Update exam status - elif "update_exam_status" in request.POST: - candidate_id = request.POST.get("candidate_id") - exam_status = request.POST.get("exam_status") - exam_date = request.POST.get("exam_date") - candidate = get_object_or_404(Candidate, id=candidate_id, job=job) + # # Update exam status + # elif "update_exam_status" in request.POST: + # candidate_id = request.POST.get("candidate_id") + # exam_status = request.POST.get("exam_status") + # exam_date = request.POST.get("exam_date") + # candidate = get_object_or_404(Candidate, id=candidate_id, job=job) - if candidate.stage == "Exam": - candidate.exam_status = exam_status - if exam_date: - candidate.exam_date = exam_date - candidate.save() - messages.success(request, f"Updated exam status for {candidate.name}") - else: - messages.error(request, f"Can only update exam status for candidates in Exam stage") + # if candidate.stage == "Exam": + # candidate.exam_status = exam_status + # if exam_date: + # candidate.exam_date = exam_date + # candidate.save() + # messages.success(request, f"Updated exam status for {candidate.name}") + # else: + # messages.error(request, f"Can only update exam status for candidates in Exam stage") - # Bulk stage update - elif "bulk_update_stage" in request.POST: - selected_candidates = request.POST.getlist("selected_candidates") - new_stage = request.POST.get("bulk_new_stage") - updated_count = 0 + # # Bulk stage update + # elif "bulk_update_stage" in request.POST: + # selected_candidates = request.POST.getlist("selected_candidates") + # new_stage = request.POST.get("bulk_new_stage") + # updated_count = 0 - for candidate_id in selected_candidates: - candidate = get_object_or_404(Candidate, id=candidate_id, job=job) - if candidate.can_transition_to(new_stage): - candidate.stage = new_stage - candidate.save() - updated_count += 1 + # for candidate_id in selected_candidates: + # candidate = get_object_or_404(Candidate, id=candidate_id, job=job) + # if candidate.can_transition_to(new_stage): + # candidate.stage = new_stage + # candidate.save() + # updated_count += 1 - messages.success(request, f"Updated {updated_count} candidates to {new_stage} stage") + # messages.success(request, f"Updated {updated_count} candidates to {new_stage} stage") - # Mark individual candidate as Candidate - elif "mark_as_candidate" in request.POST: - candidate_id = request.POST.get("candidate_id") - candidate = get_object_or_404(Candidate, id=candidate_id, job=job) + # # Mark individual candidate as Candidate + # elif "mark_as_candidate" in request.POST: + # candidate_id = request.POST.get("candidate_id") + # candidate = get_object_or_404(Candidate, id=candidate_id, job=job) - if candidate.applicant_status == "Applicant": - candidate.applicant_status = "Candidate" - candidate.save() - messages.success(request, f"Marked {candidate.name} as Candidate") - else: - messages.info(request, f"{candidate.name} is already marked as Candidate") + # if candidate.applicant_status == "Applicant": + # candidate.applicant_status = "Candidate" + # candidate.save() + # messages.success(request, f"Marked {candidate.name} as Candidate") + # else: + # messages.info(request, f"{candidate.name} is already marked as Candidate") - # Mark all Tier 1 candidates as Candidates - elif "mark_as_candidates" in request.POST: - updated_count = 0 - for candidate in tier1_candidates: - if candidate.applicant_status == "Applicant": - candidate.applicant_status = "Candidate" - candidate.save() - updated_count += 1 + # # Mark all Tier 1 candidates as Candidates + # elif "mark_as_candidates" in request.POST: + # updated_count = 0 + # for candidate in tier1_candidates: + # if candidate.applicant_status == "Applicant": + # candidate.applicant_status = "Candidate" + # candidate.save() + # updated_count += 1 - if updated_count > 0: - messages.success(request, f"Marked {updated_count} Tier 1 candidates as Candidates") - else: - messages.info(request, "All Tier 1 candidates are already marked as Candidates") + # if updated_count > 0: + # messages.success(request, f"Marked {updated_count} Tier 1 candidates as Candidates") + # else: + # messages.info(request, "All Tier 1 candidates are already marked as Candidates") # Group candidates by current stage for display stage_groups = { @@ -1333,17 +1334,75 @@ def candidate_tier_management_view(request, slug): context = { "job": job, - "tier1_candidates": tier1_candidates, - "tier2_candidates": tier2_candidates, - "tier3_candidates": tier3_candidates, - "stage_groups": stage_groups, - "tier1_count": tier1_count, - "total_candidates": candidates.count(), + "candidates": candidates, + # "stage_groups": stage_groups, + # "tier1_count": tier1_count, + # "total_candidates": candidates.count(), } return render(request, "recruitment/candidate_tier_management.html", context) + +def candidate_exam_view(request, slug): + """ + Manage candidate tiers and stage transitions + """ + job = get_object_or_404(JobPosting, slug=slug) + candidates = job.candidates.filter(stage="Exam").order_by("-match_score") + + return render(request, "recruitment/candidate_exam_view.html", {"job": job, "candidates": candidates}) + +def update_candidate_exam_status(request, slug): + candidate = get_object_or_404(Candidate, slug=slug) + if request.method == "POST": + form = CandidateExamDateForm(request.POST, instance=candidate) + if form.is_valid(): + form.save() + return redirect("candidate_exam_view", slug=candidate.job.slug) + else: + form = CandidateExamDateForm(request.POST, instance=candidate) + return render(request, "includes/candidate_exam_status_form.html", {"candidate": candidate,"form": form}) +def bulk_update_candidate_exam_status(request,slug): + job = get_object_or_404(JobPosting, slug=slug) + print(request.headers) + status = request.headers.get('status') + print(status) + if status: + for c in request.POST.items(): + try: + candidate = Candidate.objects.get(pk=c[0]) + candidate.exam_status = "Passed" if status == "pass" else "Failed" + candidate.stage = "Interview" + candidate.save() + except Exception as e: + print(e) + messages.success(request, f"Updated exam status selected candidates") + return redirect("candidate_exam_view", slug=job.slug) + def candidate_criteria_view_htmx(request, pk): candidate = get_object_or_404(Candidate, pk=pk) - print(candidate) - return render(request, "includes/candidate_modal_body.html", {"candidate": candidate}) \ No newline at end of file + return render(request, "includes/candidate_modal_body.html", {"candidate": candidate}) + + +def candidate_set_exam_date(request, slug): + candidate = get_object_or_404(Candidate, slug=slug) + candidate.exam_date = timezone.now() + candidate.save() + messages.success(request, f"Set exam date for {candidate.name} to {candidate.exam_date}") + return redirect("candidate_tier_management", slug=candidate.job.slug) +def bulk_candidate_move_to_exam(request): + for c in request.POST.items(): + try: + candidate = Candidate.objects.get(pk=c[0]) + candidate.stage = "Exam" + candidate.applicant_status = "Candidate" + candidate.exam_date = timezone.now() + candidate.save() + except Exception as e: + print(e) + messages.success(request, f"Moved {candidate.name} to Exam stage") + return redirect("candidate_tier_management", slug=candidate.job.slug) + # def response(): + # yield SSE.patch_elements("","") + # yield SSE.execute_script("console.log('hello world');") + # return DatastarResponse(response()) \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 010b2ab..7053ff1 100644 --- a/templates/base.html +++ b/templates/base.html @@ -21,7 +21,7 @@ --kaauh-light-bg: #f9fbfd; --kaauh-border: #eaeff3; } - + /* === Top Bar === */ .top-bar { @@ -232,7 +232,7 @@ {% block customCSS %}{% endblock %} - + -{% endif %} -{% endfor %} + -{% endblock %} - -{% block customJS %} - - -{% endblock customJS %} +{% endblock %} \ No newline at end of file
@@ -327,7 +327,7 @@ {% trans "Form Templates" %} - + - + +
  • @@ -543,7 +543,8 @@ }); }); - + + {% block customJS %}{% endblock %} diff --git a/templates/includes/candidate_exam_status_form.html b/templates/includes/candidate_exam_status_form.html new file mode 100644 index 0000000..0a4fdf1 --- /dev/null +++ b/templates/includes/candidate_exam_status_form.html @@ -0,0 +1,7 @@ +{% load i18n %} +{% url 'update_candidate_exam_status' slug=candidate.slug as url %} + + {% csrf_token %} + {{ form.as_p }} + + \ No newline at end of file diff --git a/templates/includes/candidate_modal_body.html b/templates/includes/candidate_modal_body.html index 6b32d24..139555b 100644 --- a/templates/includes/candidate_modal_body.html +++ b/templates/includes/candidate_modal_body.html @@ -14,7 +14,11 @@ {% for key, value in candidate.criteria_checklist.items %}
  • {{ key }} - {{ value|yesno:"Yes,No" }} + {% if value == 'Met' %} + Yes + {% else %} + Not Mentioned + {% endif %}
  • {% endfor %} diff --git a/templates/recruitment/candidate_exam_view.html b/templates/recruitment/candidate_exam_view.html new file mode 100644 index 0000000..048b73b --- /dev/null +++ b/templates/recruitment/candidate_exam_view.html @@ -0,0 +1,363 @@ +{% extends 'base.html' %} +{% load static i18n %} + +{% block title %}Candidate Tier Management - {{ job.title }} - ATS{% endblock %} + +{% block customCSS %} + +{% endblock %} + +{% block content %} +
    +
    +
    +

    + + {% trans "Exam" %} - {{ job.title }} +

    +

    + Total Candidates: {{ total_candidates }} +

    +
    + + {% trans "Back to Job" %} + +
    + + +
    +
    + {% csrf_token %} +
    +
    + + +
    +
    + +
    +
    +
    +
    + + +

    {% trans "Candidate Tiers" %}

    +
    + {% url "bulk_update_candidate_exam_status" job.slug as bulk_update_candidate_exam_status_url %} + {% if candidates %} + + + {% endif %} +
    + + + + + + + + + + + + + + {% for candidate in candidates %} + + + + + + + + + + {% endfor %} + +
    + {% if candidates %} +
    + +
    + {% endif %} +
    {% trans "Name" %}{% trans "Contact" %}{% trans "AI Score" %}{% trans "Exam Status" %}{% trans "Exam Date" %}{% trans "Actions" %}
    +
    + +
    +
    +
    {{ candidate.name }}
    +
    +
    + Email: {{ candidate.email }}
    + Phone: {{ candidate.phone }}
    +
    +
    + {{ candidate.match_score|default:"0" }} + + {% if candidate.exam_status == "Passed" %} + {{ candidate.exam_status }} + {% elif candidate.exam_status == "Failed" %} + {{ candidate.exam_status }} + {% endif %} + {{candidate.exam_date|date:"M d, Y h:i A"}} + + + {% if candidate.stage != "Exam" %} + + {% endif %} +
    +
    +
    + + + +{% endblock %} \ No newline at end of file diff --git a/templates/recruitment/candidate_tier_management.html b/templates/recruitment/candidate_tier_management.html index 42d10f5..9ec3196 100644 --- a/templates/recruitment/candidate_tier_management.html +++ b/templates/recruitment/candidate_tier_management.html @@ -232,466 +232,106 @@
    - -
    -

    {% trans "Bulk Stage Update" %}

    -
    - {% csrf_token %} -
    -
    - - -
    -
    - -
    -
    -
    -
    - - - {% comment %}
    - {% for stage_name, stage_candidates in stage_groups.items %} -
    -
    - {{ stage_name }} - {{ stage_candidates.count }} -
    -
    - {% for candidate in stage_candidates %} -
    -
    - - -
    -
    - {% empty %} -

    {% trans "No candidates in this stage" %}

    - {% endfor %} -
    -
    - {% endfor %} -
    {% endcomment %} - -

    {% trans "Candidate Tiers" %}

    - - - - - -
    - -
    - {% if tier1_candidates %} -
    - -
    -
    - - - - - - - - - - - - - {% for candidate in tier1_candidates %} - - - - - - - - - {% endfor %} - -
    {% trans "Name" %}{% trans "Contact" %}{% trans "AI Score" %}{% trans "Status" %}{% trans "Stage" %}{% trans "Actions" %}
    -
    {{ candidate.name }}
    -
    -
    - Email: {{ candidate.email }}
    - Phone: {{ candidate.phone }}
    -
    -
    - {{ candidate.match_score|default:"0" }} - - - {{ candidate.get_applicant_status_display }} - - - - {{ candidate.get_stage_display }} - - {% if candidate.stage == "Exam" and candidate.exam_status %} -
    - {{ candidate.get_exam_status_display }} - {% endif %} -
    - -
    -
    - {% else %} -

    {% trans "No candidates in Tier 1" %}

    +

    {% trans "Candidate Tiers" %}

    +
    + {% url "bulk_candidate_move_to_exam" as move_to_exam_url %} + {% if candidates %} + {% endif %} -
    +
    + + + + + + + + + + + + + + {% for candidate in candidates %} + + + + {% endfor %} + +
    + {% if candidates %} +
    + +
    + {% endif %} +
    {% trans "Name" %}{% trans "Contact" %}{% trans "AI Score" %}{% trans "Status" %}{% trans "Stage" %}{% trans "Actions" %}
    +
    + -
    - {% if tier2_candidates %} -
    - - - - - - - - - - - - - {% for candidate in tier2_candidates %} - - - - - - - + + + + + + - - {% endfor %} - -
    {% trans "Name" %}{% trans "Contact" %}{% trans "AI Score" %}{% trans "Status" %}{% trans "Stage" %}{% trans "Actions" %}
    -
    {{ candidate.name }}
    -
    -
    - Email: {{ candidate.email }}
    - Phone: {{ candidate.phone }}
    -
    -
    - {{ candidate.match_score|default:"0" }} - - - {{ candidate.get_applicant_status_display }} - - - - {{ candidate.get_stage_display }} - - {% if candidate.stage == "Exam" and candidate.exam_status %} -
    - {{ candidate.get_exam_status_display }} - {% endif %} -
    - -
    - {% if candidate.applicant_status == 'Applicant' %} - + type="checkbox" class="form-check-input" id="candidate-{{ candidate.id }}"> +
    +
    +
    {{ candidate.name }}
    +
    +
    + Email: {{ candidate.email }}
    + Phone: {{ candidate.phone }}
    +
    +
    + {{ candidate.match_score|default:"0" }} + + + {{ candidate.get_applicant_status_display }} + + + + {{ candidate.get_stage_display }} + + {% if candidate.stage == "Exam" and candidate.exam_status %} +
    + {{ candidate.get_exam_status_display }} {% endif %} - {% for next_stage in candidate.get_available_stages %} - - {% endfor %} - {% if candidate.stage == "Exam" %} - - {% endif %} - - -
    + + {% if candidate.stage != "Exam" %} + {% endif %} - - -
    -
    - {% else %} -

    {% trans "No candidates in Tier 2" %}

    - {% endif %} -
    - - -
    - {% if tier3_candidates %} -
    - - - - - - - - - - - - - {% for candidate in tier3_candidates %} - - - - - - - - - {% endfor %} - -
    {% trans "Name" %}{% trans "Contact" %}{% trans "AI Score" %}{% trans "Status" %}{% trans "Stage" %}{% trans "Actions" %}
    -
    {{ candidate.name }}
    -
    -
    - Email: {{ candidate.email }}
    - Phone: {{ candidate.phone }}
    -
    -
    - {{ candidate.match_score|default:"0" }} - - - {{ candidate.get_applicant_status_display }} - - - - {{ candidate.get_stage_display }} - - {% if candidate.stage == "Exam" and candidate.exam_status %} -
    - {{ candidate.get_exam_status_display }} - {% endif %} -
    - -
    - {% if candidate.applicant_status == 'Applicant' %} - - {% endif %} - {% for next_stage in candidate.get_available_stages %} - - {% endfor %} - {% if candidate.stage == "Exam" %} - - {% endif %} -
    - - -
    -
    - {% else %} -

    {% trans "No candidates in Tier 3" %}

    - {% endif %} -
    -
    - - - -{% for candidate in tier1_candidates|add:tier2_candidates|add:tier3_candidates %} -{% if candidate.stage == "Exam" %} -
    -
    -
    -