This commit is contained in:
ismail 2025-11-02 19:21:33 +03:00
parent 7bbca7d746
commit c369b8bedc
8 changed files with 222 additions and 86 deletions

View File

@ -15,6 +15,7 @@
--kaauh-info: #17a2b8;
--kaauh-danger: #dc3545;
--kaauh-warning: #ffc107;
--kaauh-gray-light: #f8f9fa;
}
/* Primary Color Overrides */
@ -53,6 +54,17 @@
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
}
/* Secondary Button Style */
.btn-outline-secondary {
color: var(--kaauh-teal-dark);
border-color: var(--kaauh-teal);
}
.btn-outline-secondary:hover {
background-color: var(--kaauh-teal-dark);
color: white;
border-color: var(--kaauh-teal-dark);
}
/* Search Form Styling */
.search-form {
background-color: #f8f9fa;
@ -71,6 +83,41 @@
font-size: 0.875rem;
font-weight: 600;
}
/* Table View Styling */
.table-view .table thead th {
background-color: var(--kaauh-teal-dark);
color: white;
font-weight: 600;
border-color: var(--kaauh-border);
text-transform: uppercase;
font-size: 0.8rem;
letter-spacing: 0.5px;
padding: 1rem;
}
.table-view .table tbody td {
vertical-align: middle;
padding: 1rem;
border-color: var(--kaauh-border);
}
.table-view .table tbody tr:hover {
background-color: var(--kaauh-gray-light);
}
/* Card View Specific Styles */
.card-view .card {
height: 100%;
}
.card-view .card-title {
color: var(--kaauh-teal-dark);
font-weight: 700;
}
.card-view .card-body {
display: flex;
flex-direction: column;
justify-content: space-between;
flex-grow: 1;
}
</style>
{% endblock %}
@ -115,7 +162,7 @@
value="{{ search_query }}">
</div>
</div>
<div class="col-md-2">
<div class="col-md-1">
<button type="submit" class="btn btn-main-action w-100">
<i class="fas fa-search me-1"></i> {% trans "Search" %}
</button>
@ -125,78 +172,168 @@
<!-- Agencies List -->
{% if page_obj %}
<div class="row">
{% for agency in page_obj %}
<div class="col-lg-4 col-md-6 mb-4">
<div class="card kaauh-card agency-card h-100">
<div class="card-body">
<!-- Agency Header -->
<div class="d-flex justify-content-between align-items-start mb-3">
<h5 class="card-title mb-0" style="color: var(--kaauh-teal-dark);">
{{ agency.name }}
</h5>
{% if agency.email %}
<a href="mailto:{{ agency.email }}" class="text-muted" title="{{ agency.email }}">
<i class="fas fa-envelope"></i>
</a>
{% endif %}
</div>
<div id="agency-list">
{% include "includes/_list_view_switcher.html" with list_id="agency-list" %}
<!-- Contact Information -->
{% if agency.contact_person %}
<p class="card-text mb-2">
<i class="fas fa-user text-muted me-2"></i>
<strong>{% trans "Contact:" %}</strong> {{ agency.contact_person }}
</p>
{% endif %}
<!-- Table View -->
<div class="table-view">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead>
<tr>
<th scope="col">{% trans "Agency Name" %}</th>
<th scope="col">{% trans "Contact Person" %}</th>
<th scope="col">{% trans "Email" %}</th>
<th scope="col">{% trans "Phone" %}</th>
<th scope="col">{% trans "Country" %}</th>
<th scope="col">{% trans "Website" %}</th>
<th scope="col">{% trans "Created" %}</th>
<th scope="col" class="text-end">{% trans "Actions" %}</th>
</tr>
</thead>
<tbody>
{% for agency in page_obj %}
<tr>
<td class="fw-medium">
<a href="{% url 'agency_detail' agency.slug %}"
class="text-decoration-none text-primary-theme">
{{ agency.name }}
</a>
</td>
<td>{{ agency.contact_person|default:"-" }}</td>
<td>
{% if agency.email %}
<a href="mailto:{{ agency.email }}"
class="text-decoration-none"
title="{{ agency.email }}">
<i class="fas fa-envelope me-1"></i>
{{ agency.email|truncatechars:20 }}
</a>
{% else %}
-
{% endif %}
</td>
<td>{{ agency.phone|default:"-" }}</td>
<td>
{% if agency.country %}
<i class="fas fa-globe text-muted me-1"></i>
{{ agency.get_country_display }}
{% else %}
-
{% endif %}
</td>
<td>
{% if agency.website %}
<a href="{{ agency.website }}"
target="_blank"
class="text-decoration-none text-secondary">
{{ agency.website|truncatechars:25 }}
<i class="fas fa-external-link-alt ms-1 small"></i>
</a>
{% else %}
-
{% endif %}
</td>
<td>
<span class="stats-badge">
{{ agency.created_at|date:"M d, Y" }}
</span>
</td>
<td class="text-end">
<div class="btn-group btn-group-sm" role="group">
<a href="{% url 'agency_detail' agency.slug %}"
class="btn btn-outline-secondary"
title="{% trans 'View' %}">
<i class="fas fa-eye"></i>
</a>
<a href="{% url 'agency_update' agency.slug %}"
class="btn btn-outline-secondary"
title="{% trans 'Edit' %}">
<i class="fas fa-edit"></i>
</a>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if agency.phone %}
<p class="card-text mb-2">
<i class="fas fa-phone text-muted me-2"></i>
{{ agency.phone }}
</p>
{% endif %}
{% if agency.country %}
<p class="card-text mb-2">
<i class="fas fa-globe text-muted me-2"></i>
{{ agency.get_country_display }}
</p>
{% endif %}
<!-- Website Link -->
{% if agency.website %}
<p class="card-text mb-3">
<i class="fas fa-link text-muted me-2"></i>
<a href="{{ agency.website }}" target="_blank" class="text-decoration-none text-secondary">
{{ agency.website|truncatechars:30 }}
<i class="fas fa-external-link-alt ms-1 small"></i>
</a>
</p>
{% endif %}
<!-- Action Buttons -->
<div class="d-flex justify-content-between align-items-center mt-auto">
<div>
<a href="{% url 'agency_detail' agency.slug %}"
class="btn btn-main-action btn-sm me-2">
<i class="fas fa-eye me-1"></i> {% trans "View" %}
</a>
<a href="{% url 'agency_update' agency.slug %}"
class="btn btn-outline-secondary btn-sm">
<i class="fas fa-edit me-1"></i> {% trans "Edit" %}
<!-- Card View -->
<div class="card-view row g-4">
{% for agency in page_obj %}
<div class="col-lg-4 col-md-6 mb-4">
<div class="card kaauh-card agency-card h-100">
<div class="card-body">
<!-- Agency Header -->
<div class="d-flex justify-content-between align-items-start mb-3">
<h5 class="card-title mb-0" style="color: var(--kaauh-teal-dark);">
{{ agency.name }}
</h5>
{% if agency.email %}
<a href="mailto:{{ agency.email }}" class="text-muted" title="{{ agency.email }}">
<i class="fas fa-envelope"></i>
</a>
{% endif %}
</div>
<div>
<span class="stats-badge">
{% trans "Created" %} {{ agency.created_at|date:"M d, Y" }}
</span>
<!-- Contact Information -->
{% if agency.contact_person %}
<p class="card-text mb-2">
<i class="fas fa-user text-muted me-2"></i>
<strong>{% trans "Contact:" %}</strong> {{ agency.contact_person }}
</p>
{% endif %}
{% if agency.phone %}
<p class="card-text mb-2">
<i class="fas fa-phone text-muted me-2"></i>
{{ agency.phone }}
</p>
{% endif %}
{% if agency.country %}
<p class="card-text mb-2">
<i class="fas fa-globe text-muted me-2"></i>
{{ agency.get_country_display }}
</p>
{% endif %}
<!-- Website Link -->
{% if agency.website %}
<p class="card-text mb-3">
<i class="fas fa-link text-muted me-2"></i>
<a href="{{ agency.website }}" target="_blank" class="text-decoration-none text-secondary">
{{ agency.website|truncatechars:30 }}
<i class="fas fa-external-link-alt ms-1 small"></i>
</a>
</p>
{% endif %}
<!-- Action Buttons -->
<div class="d-flex justify-content-between align-items-center mt-auto">
<div>
<a href="{% url 'agency_detail' agency.slug %}"
class="btn btn-main-action btn-sm me-2">
<i class="fas fa-eye me-1"></i> {% trans "View" %}
</a>
<a href="{% url 'agency_update' agency.slug %}"
class="btn btn-outline-secondary btn-sm">
<i class="fas fa-edit me-1"></i> {% trans "Edit" %}
</a>
</div>
<div>
<span class="stats-badge">
{% trans "Created" %} {{ agency.created_at|date:"M d, Y" }}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
<!-- Pagination -->

View File

@ -179,7 +179,7 @@
.timeline-bg-offer { background-color: #28a745 !important; }
.timeline-bg-rejected { background-color: #dc3545 !important; }
/* ------------------------------------------- */
/* 1. Base Spinner Styling */
@ -272,7 +272,7 @@
<li class="breadcrumb-item"><a href="{% url 'job_detail' candidate.job.slug %}" class="text-secondary">Job:({{candidate.job.title}})</a></li>
<li class="breadcrumb-item active" aria-current="page" class="text-secondary" style="
color: #F43B5E; /* Rosy Accent Color */
font-weight: 600;
font-weight: 600;
">Applicant Detail</li>
</ol>
</nav>
@ -313,14 +313,14 @@
<i class="fas fa-id-card me-1"></i> {% trans "Contact & Job" %}
</button>
</li>
<li class="nav-item" role="presentation">
{# NEW TAB ADDED HERE #}
<button class="nav-link" id="timeline-tab" data-bs-toggle="tab" data-bs-target="#timeline-pane" type="button" role="tab" aria-controls="timeline-pane" aria-selected="false">
<i class="fas fa-route me-1"></i> {% trans "Journey Timeline" %}
</button>
</li>
</ul>
<div class="card-body">
@ -367,7 +367,7 @@
</div>
{# TAB 2 CONTENT: RESUME #}
{# NEW TAB 3 CONTENT: CANDIDATE JOURNEY TIMELINE #}
<div class="tab-pane fade" id="timeline-pane" role="tabpanel" aria-labelledby="timeline-tab">
@ -615,9 +615,9 @@
{# RIGHT COLUMN: ACTIONS AND CANDIDATE TIMELINE #}
<div class="col-lg-4">
{# ACTIONS CARD #}
<div class="card shadow-sm mb-2 p-2">
<h5 class="text-muted mb-3"><i class="fas fa-cog me-2"></i>{% trans "Management Actions" %}</h5>
<div class="d-grid gap-2">
@ -631,7 +631,7 @@
<i class="fas fa-arrow-left"></i> {% trans "Back to List" %}
</a>
{% if candidate.resume %}
<a href="{{ candidate.resume.url }}" target="_blank" class="btn btn-outline-primary">
<i class="fas fa-eye me-1"></i>
{% trans "View Actual Resume" %}
@ -640,22 +640,22 @@
<i class="fas fa-download me-1"></i>
{% trans "Download Resume" %}
</a>
<a href="{% url 'candidate_resume_template' candidate.slug %}" class="btn btn-outline-info">
<i class="fas fa-file-alt me-1"></i>
{% trans "View Resume AI Overview" %}
</a>
{% endif %}
</div>
</div>
<div class="card shadow-sm mb-4 p-2">
<h5 class="text-muted mb-3"><i class="fas fa-clock me-2"></i>{% trans "Time to Hire: " %}{{candidate.time_to_hire|default:100}}&nbsp;days</h5>
</div>
</div>
</div>
@ -668,17 +668,18 @@
{% if candidate.scoring_timeout %}
<div style="display: flex; justify-content: center; align-items: center; height: 100%;" class="mb-2">
<div class="ai-loading-container">
<i class="fas fa-robot ai-robot-icon"></i>
<i class="fas fa-robot ai-robot-icon"></i>
<span>Resume is been Scoring...</span>
</div>
</div>
</div>
{% else %}
<div style="display: flex; justify-content: center; align-items: center; height: 100%;">
<button type="submit" class="btn btn-sm btn-main-action" hx-get="{% url 'candidate_retry_scoring' candidate.slug %}" hx-select=".resume-parsed-section" hx-target=".resume-parsed-section" hx-swap="outerHTML" hx-on:click="this.disabled=true;this.innerHTML=`Scoring Resume , Please Wait.. <i class='fa-solid fa-spinner fa-spin'></i>`">
{% trans "Retry AI Scoring" %}
</button>
<i class="fas fa-redo-alt me-1"></i>
{% trans "Unable to Parse Resume , click to retry" %}
</button>
</div>
{% endif %}
{% endif %}
{% endif %}
</div>

View File

@ -295,11 +295,9 @@
<a href="{% url 'candidate_list' %}" class="text-decoration-none d-flex align-items-center gap-2">
<svg class="kaats-spinner" viewBox="0 0 50 50" style="width: 25px; height: 25px;">
<circle cx="25" cy="25" r="20"></circle>
<circle class="path" cx="25" cy="25" r="20" fill="none" stroke-width="5"
<circle class="path" cx="25" cy="25" r="20" fill="none" stroke-width="5"
style="animation: kaats-spinner-dash 1.5s ease-in-out infinite;"></circle>
</svg>
{# CRITICAL: Remove the DIV and the text-nowrap class #}
<span class="text-teal-primary">{% trans "AI Scoring..." %}</span>
</a>
{% endif %}
</td>