From 92013dd4f93388c20ae2bd6a348d8f07eeb2e136 Mon Sep 17 00:00:00 2001 From: Faheed Date: Tue, 14 Oct 2025 15:55:49 +0300 Subject: [PATCH] candidate history timeline --- recruitment/__pycache__/views.cpython-312.pyc | Bin 52134 -> 52201 bytes .../views_frontend.cpython-312.pyc | Bin 18647 -> 18647 bytes recruitment/views.py | 2 + templates/jobs/job_detail.html | 183 ++++- templates/jobs/job_list.html | 4 +- templates/meetings/meeting_details.html | 678 +++++++++++------- templates/recruitment/candidate_detail.html | 51 +- templates/recruitment/candidate_list.html | 15 +- 8 files changed, 665 insertions(+), 268 deletions(-) diff --git a/recruitment/__pycache__/views.cpython-312.pyc b/recruitment/__pycache__/views.cpython-312.pyc index aff3e195cb3ab6f8ed72b7e755c62a5848d927a3..d268e6b103e9fce510023a14f9328d1900456ffd 100644 GIT binary patch delta 738 zcmY+8KTK0m6vpqlmq%Ml`(9fp|JpzV0u7Ct6c7zWibCjMi|IrHM3N4|08$>5(3YZu zQ76e67zic~A_he9#wfBWe-eo;k-?DQYIM*TG%gH!ANZo&;oRT%-S3=p=cd`0X=d57 zSaOIsuTFitnqIbi9fXVgV6Xz<11}ru%Yqt|t6kWUYs^Z@>Pfu+(uD)jd|Vy5R&ZMD zJAR_M2`gT1%`*-_#F}9JwK!DiI8%Q-q^ZTC1;ddGL_Mp&M~WBVh{Htnc5@80gbf zzup^hMcm@QE!qTp5>u-F-%>8N{7aUqt$J5N!B4SLvzQ(JyMrrZEfmTzJpM3S7P06R z{52i`8#c$gWs_#~i85>xr3~ldUf9E(_-zRD?nD!S3ultMIr;ACuBk5UxtoQ<6TOnj zX8)OoyAvKd0_aW^qAOJd4OpLwr+nm1ojv3uYev7}QUhI=eL`$7&DwDKSMHr zt~PVfOWrj&g0hr0GhwBzps{?&c1O@7r7I7)8Z`DCvey(UVClNTkey{LlIY6VCE;WW zN;LL4O&z5y(^%M1%(nAD@OH5zDo!mqdDo<$LO#ED;}HW7Z@;<5-~zYYaXTQwYi4)M z@R9$XZ)R|vH!mIl+~SQ(2?|qu<*Adw4BzGt03P$v=Ozlz_~eTKg%$pG#YSP1@2&P_ h!+YNL+Q`7bL+hU%RxJlr|M9ff@!0B52db5*Zi@HB1Z&F&(T!3AMJ>KKhIr z5@aCph{PD;q=rBY=4yz<$x;|d{}>VzV`Ac_gGSU12j8PMdWLg<=ey^8-Jo=!6LxntVlGt=$8oP+ z!u$6mTuq6Gdo>rWqRthl(kMv=u#y^rC3L2HI(%u8VPhl>Z6tZJx8Nxuy5Ewie4$~7m9sMm5Qf9WB&mMrQs%_WYxIT2pTsXu){FISgF-9 z9Au?ag7zB}RHe*XR4#k$hKP}sI~@@ns}NARq7&4Pk+_{dx)Guv@lQ9G8FcWunN0>E z9=YR|;3AJN?Hb_&A6P!aK;gGm_W@?O@=T^M&wsDk89d<9i^l*f{MAbXg*BdEAEL0% q#SJTk0{6U*>7c@A-{=_#{BGg1U>yf&_{j)0eWx1!IE!;T7ybZIK(g2X diff --git a/recruitment/__pycache__/views_frontend.cpython-312.pyc b/recruitment/__pycache__/views_frontend.cpython-312.pyc index ea6f6149293ad725e321cb6d1653d54c86d4f871..a6f5a1fda7956c3cf6ad5ece65a7eab77a4a0819 100644 GIT binary patch delta 22 ccmcaUk@5OOM()$Ryj%=Guu=crM(#5n09J_yYXATM delta 22 ccmcaUk@5OOM()$Ryj%=GAjb7}Blj5(08wcMssI20 diff --git a/recruitment/views.py b/recruitment/views.py index a297a59..c0ac8e6 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -1009,6 +1009,7 @@ def submit_form(request, template_id): ) submission.applicant_email = email.display_value submission.save() + time=timezone.now() Candidate.objects.create( first_name=first_name.display_value, last_name=last_name.display_value, @@ -1017,6 +1018,7 @@ def submit_form(request, template_id): address=address.display_value, resume=resume.get_file if resume.is_file else None, job=submission.template.job, + ) return redirect('application_success') diff --git a/templates/jobs/job_detail.html b/templates/jobs/job_detail.html index 2103fcc..19f5b5d 100644 --- a/templates/jobs/job_detail.html +++ b/templates/jobs/job_detail.html @@ -22,7 +22,18 @@ --stage-interview: #ffc107; /* Warning Yellow */ --stage-offer: #28a745; /* Success Green */ --stage-inactive: #6c757d; /* Secondary Gray */ - } + + --kaauh-teal: #00636e; /* Primary Theme / Active Stage */ + --kaauh-teal-light: #4bb3be; /* For active glow */ + --color-created: #6c757d; /* Muted Initial State */ + --color-active: #00636e; /* Teal for Active Flow */ + --color-posted: #17a2b8; /* Info Blue for External Posting */ + --color-closed: #ffc107; /* Warning Yellow for Soft End/Review */ + --color-archived: #343a40; /* Darkest for Final Storage */ + --color-canceled: #dc3545; /* Red for Negative/Canceled */ + --color-line-default: #e9ecef; /* Light Gray for all inactive markers */ +} + /* Primary Color Overrides */ .text-primary { color: var(--kaauh-teal) !important; } @@ -160,6 +171,132 @@ border: 1px solid; } + + + + + .job-timeline-container { + padding: 10px 0; + overflow-x: auto; + margin: 10px 0; + background-color: #f8f9fa; + border-radius: 0.5rem; +} + +.job-timeline { + display: flex; + justify-content: space-between; + list-style: none; + padding: 0 10px; + margin: 0; + position: relative; + min-width: 1000px; +} + +/* 🛑 NO CONNECTING LINE: Removed .job-timeline::before and .timeline-stage.is-complete + .timeline-stage::before */ + +/* ------------------ Stage & Marker Basics ------------------ */ + +.timeline-stage { + flex: 1 1 auto; + text-align: center; + position: relative; + z-index: 2; + padding-top: 50px; +} + +.status-marker { + position: absolute; + top: 10px; + left: 50%; + transform: translateX(-50%); + width: 40px; + height: 40px; + border-radius: 50%; + + /* DEFAULT (Inactive/Not Current Status) */ + background-color: white; + border: 3px solid var(--color-line-default); + color: var(--color-line-default); + + font-size: 18px; + line-height: 34px; + z-index: 3; + transition: all 0.3s ease, box-shadow 0.3s ease; + box-shadow: 0 0 0 2px white; +} + +/* ------------------ ACTIVE/CURRENT Status Indicator ------------------ */ + +/* The 'is-active' class now completely defines the current status color and highlight */ + +.timeline-stage.is-active .status-marker { + transform: translateX(-50%) scale(1.15); /* Keep the pop effect */ + color: white; /* Default text color for all active markers */ +} + +/* 1. CREATED (Active) */ +.timeline-stage[data-stage="created"].is-active .status-marker { + background-color: var(--color-created); + border-color: var(--color-created); + box-shadow: 0 0 0 4px rgba(108, 117, 125, 0.5); +} + +/* 2. MADE ACTIVE (Active) */ +.timeline-stage[data-stage="active"].is-active .status-marker { + background-color: var(--color-active); + border-color: var(--color-active); + box-shadow: 0 0 0 4px var(--kaauh-teal-light); +} + +/* 3. POSTED TO LINKEDIN (Active) */ +.timeline-stage[data-stage="posted"].is-active .status-marker { + background-color: var(--color-posted); + border-color: var(--color-posted); + box-shadow: 0 0 0 4px rgba(23, 162, 184, 0.5); +} + +/* 4. CANCELED (Active/Terminal) */ +.timeline-stage[data-stage="canceled"].is-active .status-marker { + background-color: var(--color-canceled); + border-color: var(--color-canceled); + box-shadow: 0 0 0 4px rgba(220, 53, 69, 0.5); +} + +/* 5. CLOSED (Active/Terminal) */ +.timeline-stage[data-stage="closed"].is-active .status-marker { + background-color: var(--color-closed); + border-color: var(--color-closed); + color: #343a40; /* Dark icon for contrast on yellow */ + box-shadow: 0 0 0 4px rgba(255, 193, 7, 0.5); +} + +/* 6. ARCHIVED (Active/Terminal) */ +.timeline-stage[data-stage="archived"].is-active .status-marker { + background-color: var(--color-archived); + border-color: var(--color-archived); + box-shadow: 0 0 0 4px rgba(52, 58, 64, 0.5); +} + + +/* ------------------ Text Labels ------------------ */ + +.status-label { + font-size: 0.85rem; + font-weight: 600; + color: #343a40; + margin-top: 5px; +} + +/* Highlight text label for the active status */ +.timeline-stage.is-active .status-label { + color: var(--kaauh-teal); +} + +.status-date { + font-size: 0.75rem; + color: #6c757d; +} {% endblock %} @@ -168,8 +305,50 @@ -
+
+
+
    + +
  • +
    +
    Created
    +
    Jan 1
    +
  • + +
  • +
    +
    Made Active
    +
    Jan 5
    +
  • + +
  • +
    +
    Posted to LinkedIn
    +
    Jan 6
    +
  • + +
  • +
    +
    Canceled
    +
    Jan 15
    +
  • + +
  • +
    +
    Closed
    +
    +
  • + +
  • +
    +
    Archived
    +
    +
  • +
+
+
+