245 lines
10 KiB
HTML
245 lines
10 KiB
HTML
{% extends "base.html" %}
|
|
{% load static i18n %}
|
|
|
|
{% block title %}Candidates - {{ block.super }}{% endblock %}
|
|
|
|
{% block customCSS %}
|
|
<style>
|
|
/* UI Variables for the KAAT-S Theme */
|
|
:root {
|
|
--kaauh-teal: #00636e;
|
|
--kaauh-teal-dark: #004a53;
|
|
--kaauh-border: #eaeff3;
|
|
--kaauh-primary-text: #343a40;
|
|
}
|
|
|
|
/* Enhanced Card Styling */
|
|
.card {
|
|
border: 1px solid var(--kaauh-border);
|
|
border-radius: 0.75rem;
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.06);
|
|
transition: transform 0.2s, box-shadow 0.2s;
|
|
background-color: white;
|
|
}
|
|
.card:hover {
|
|
/* Remove hover effect from the main list card to avoid visual noise */
|
|
transform: none;
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.06);
|
|
}
|
|
|
|
.card-header {
|
|
font-weight: 600;
|
|
padding: 1.25rem;
|
|
border-bottom: 1px solid var(--kaauh-border);
|
|
background-color: #f8f9fa; /* Light header background */
|
|
}
|
|
|
|
/* Main Action Button Style (Teal Theme) */
|
|
.btn-main-action {
|
|
background-color: var(--kaauh-teal);
|
|
border-color: var(--kaauh-teal);
|
|
color: white;
|
|
font-weight: 600;
|
|
transition: all 0.2s ease;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.4rem;
|
|
padding: 0.5rem 1rem;
|
|
}
|
|
|
|
.btn-main-action:hover {
|
|
background-color: var(--kaauh-teal-dark);
|
|
border-color: var(--kaauh-teal-dark);
|
|
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
|
|
}
|
|
|
|
/* Secondary Action Buttons (used in table) */
|
|
.btn-group .btn-outline-primary {
|
|
color: var(--kaauh-teal);
|
|
border-color: var(--kaauh-border);
|
|
background-color: white;
|
|
}
|
|
.btn-group .btn-outline-primary:hover {
|
|
background-color: var(--kaauh-teal);
|
|
color: white;
|
|
border-color: var(--kaauh-teal);
|
|
}
|
|
|
|
/* Table Styling */
|
|
.table thead th {
|
|
color: var(--kaauh-teal-dark);
|
|
font-weight: 600;
|
|
border-bottom: 2px solid var(--kaauh-teal); /* Highlight bottom border */
|
|
vertical-align: middle;
|
|
padding: 0.75rem 1rem;
|
|
font-size: 0.95rem;
|
|
}
|
|
|
|
.table tbody tr:hover {
|
|
background-color: #f3f9f9; /* Light teal hover for rows */
|
|
}
|
|
|
|
.table tbody td {
|
|
vertical-align: middle;
|
|
padding: 0.75rem 1rem;
|
|
}
|
|
|
|
/* Badge Styling */
|
|
.badge {
|
|
font-weight: 600;
|
|
padding: 0.4em 0.7em;
|
|
border-radius: 0.3rem;
|
|
}
|
|
|
|
/* Status Badge Mapping */
|
|
.table .bg-primary { background-color: var(--kaauh-teal) !important; color: white !important;} /* Job Title Badge */
|
|
.table .bg-success { background-color: #28a745 !important; } /* Applied: Yes */
|
|
.table .bg-warning { background-color: #ffc107 !important; } /* Applied: No */
|
|
|
|
/* Pagination Link Styling */
|
|
.pagination .page-item .page-link {
|
|
color: var(--kaauh-teal-dark);
|
|
border-color: var(--kaauh-border);
|
|
}
|
|
.pagination .page-item.active .page-link {
|
|
background-color: var(--kaauh-teal);
|
|
border-color: var(--kaauh-teal);
|
|
color: white;
|
|
}
|
|
.pagination .page-item:hover .page-link:not(.active) {
|
|
background-color: #e9ecef;
|
|
}
|
|
|
|
/* Icon Sizing in Buttons */
|
|
.btn-group .btn-sm svg {
|
|
width: 1rem;
|
|
height: 1rem;
|
|
}
|
|
|
|
</style>
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid py-4">
|
|
<div class="card shadow-sm">
|
|
<div class="card-header">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<h1 class="h3 mb-0" style="color: var(--kaauh-teal-dark); font-weight: 700;">
|
|
<i class="fas fa-users me-2"></i>
|
|
{% trans "Candidate Profiles" %}
|
|
</h1>
|
|
<div class="d-flex gap-3 align-items-center">
|
|
{# The search form structure should be updated to align with the job_list style if possible #}
|
|
{% include "includes/search_form.html" with search_query=search_query %}
|
|
|
|
{% if user.is_staff %}
|
|
<a href="{% url 'candidate_create' %}" class="btn btn-main-action">
|
|
<i class="fas fa-plus"></i>
|
|
{% trans "Add New Candidate" %}
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% if candidates %}
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" style="width: 20%;">{% trans "Name" %}</th>
|
|
<th scope="col" style="width: 20%;">{% trans "Email" %}</th>
|
|
<th scope="col" style="width: 15%;">{% trans "Phone" %}</th>
|
|
<th scope="col" style="width: 15%;">{% trans "Job" %}</th>
|
|
<th scope="col" style="width: 10%;">{% trans "Stage" %}</th>
|
|
<th scope="col" style="width: 10%;">{% trans "Created" %}</th>
|
|
<th scope="col" style="width: 10%;" class="text-center">{% trans "Actions" %}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for candidate in candidates %}
|
|
<tr>
|
|
<td><strong>{{ candidate.name }}</strong></td>
|
|
<td>{{ candidate.email }}</td>
|
|
<td>{{ candidate.phone }}</td>
|
|
<td> <span class="badge bg-primary">{{ candidate.job.title }}</span></td>
|
|
<td>
|
|
<span class="badge bg-primary">
|
|
{{ candidate.stage }}
|
|
</span>
|
|
</td>
|
|
<td>{{ candidate.created_at|date:"M d, Y" }}</td>
|
|
<td class="text-center">
|
|
<div class="btn-group btn-group-sm" role="group">
|
|
<a href="{% url 'candidate_detail' candidate.slug %}" class="btn btn-outline-primary" title="{% trans 'View' %}">
|
|
<i class="fas fa-eye"></i>
|
|
</a>
|
|
{% if user.is_staff %}
|
|
<a href="{% url 'candidate_update' candidate.slug %}" class="btn btn-outline-primary" title="{% trans 'Edit' %}">
|
|
<i class="fas fa-edit"></i>
|
|
</a>
|
|
<button type="button" class="btn btn-outline-danger" title="{% trans 'Delete' %}"
|
|
data-bs-toggle="deleteModal"
|
|
data-delete-url="{% url 'candidate_delete' candidate.slug %}"
|
|
data-item-name="{{ candidate.name }}">
|
|
<i class="fas fa-trash-alt"></i>
|
|
</button>
|
|
{% endif %}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
{% if is_paginated %}
|
|
<div class="card-footer bg-white border-top">
|
|
<nav aria-label="Page navigation">
|
|
<ul class="pagination justify-content-center mb-0">
|
|
{% if page_obj.has_previous %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="?page={{ page_obj.previous_page_number }}{% if search_query %}&q={{ search_query }}{% endif %}" aria-label="Previous">
|
|
<span aria-hidden="true">«</span>
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
|
|
{# Simplified pagination logic for theme consistency #}
|
|
{% for num in page_obj.paginator.page_range %}
|
|
{% if page_obj.number == num %}
|
|
<li class="page-item active"><span class="page-link">{{ num }}</span></li>
|
|
{% elif num > page_obj.number|add:'-2' and num < page_obj.number|add:'2' %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="?page={{ num }}{% if search_query %}&q={{ search_query }}{% endif %}">{{ num }}</a>
|
|
</li>
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
{% if page_obj.has_next %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="?page={{ page_obj.next_page_number }}{% if search_query %}&q={{ search_query }}{% endif %}" aria-label="Next">
|
|
<span aria-hidden="true">»</span>
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
{% endif %}
|
|
{% else %}
|
|
<div class="text-center py-5">
|
|
<i class="fas fa-users fa-3x mb-3" style="color: var(--kaauh-teal-dark);"></i>
|
|
<h4 class="text-muted">{% trans "No candidates found." %}</h4>
|
|
<p class="text-muted">{% trans "Start by adding a new profile or adjusting your search filters." %}</p>
|
|
{% if user.is_staff %}
|
|
<a href="{% url 'candidate_create' %}" class="btn btn-main-action mt-3">
|
|
<i class="fas fa-plus me-1"></i>
|
|
{% trans "Add Your First Candidate" %}
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %} |