diff --git a/recruitment/__pycache__/views.cpython-312.pyc b/recruitment/__pycache__/views.cpython-312.pyc index aff3e19..d268e6b 100644 Binary files a/recruitment/__pycache__/views.cpython-312.pyc and b/recruitment/__pycache__/views.cpython-312.pyc differ diff --git a/recruitment/__pycache__/views_frontend.cpython-312.pyc b/recruitment/__pycache__/views_frontend.cpython-312.pyc index ea6f614..a6f5a1f 100644 Binary files a/recruitment/__pycache__/views_frontend.cpython-312.pyc and b/recruitment/__pycache__/views_frontend.cpython-312.pyc differ diff --git a/recruitment/views.py b/recruitment/views.py index 1564c97..5748009 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -1011,6 +1011,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, @@ -1019,6 +1020,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
    +
    +
  • +
+
+
+