before update the meeting
This commit is contained in:
parent
61cd47ccc9
commit
d1a49717ee
@ -2490,12 +2490,11 @@ class StaffAssignmentForm(forms.ModelForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
# Filter users to only show staff members
|
# Filter users to only show staff members
|
||||||
self.fields['assigned_to'].queryset = User.objects.filter(
|
self.fields['assigned_to'].queryset = User.objects.filter(
|
||||||
user_type='staff'
|
user_type='staff',is_superuser=False
|
||||||
).order_by('first_name', 'last_name')
|
).order_by('first_name', 'last_name')
|
||||||
|
|
||||||
# Add empty choice for unassigning
|
# Add empty choice for unassigning
|
||||||
self.fields['assigned_to'].required = False
|
self.fields['assigned_to'].required = False
|
||||||
self.fields['assigned_to'].empty_label = _('-- Unassign Staff --')
|
|
||||||
|
|
||||||
self.helper = FormHelper()
|
self.helper = FormHelper()
|
||||||
self.helper.form_method = 'post'
|
self.helper.form_method = 'post'
|
||||||
@ -2516,3 +2515,4 @@ class StaffAssignmentForm(forms.ModelForm):
|
|||||||
if assigned_to and assigned_to.user_type != 'staff':
|
if assigned_to and assigned_to.user_type != 'staff':
|
||||||
raise forms.ValidationError(_('Only staff members can be assigned to jobs.'))
|
raise forms.ValidationError(_('Only staff members can be assigned to jobs.'))
|
||||||
return assigned_to
|
return assigned_to
|
||||||
|
|
||||||
|
|||||||
@ -129,7 +129,7 @@ class JobPosting(Base):
|
|||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
application_deadline = models.DateField(db_index=True) # Added index
|
application_deadline = models.DateField(db_index=True)
|
||||||
application_instructions = CKEditor5Field(
|
application_instructions = CKEditor5Field(
|
||||||
blank=True, null=True, config_name="extends"
|
blank=True, null=True, config_name="extends"
|
||||||
)
|
)
|
||||||
|
|||||||
@ -615,6 +615,7 @@ def job_detail(request, slug):
|
|||||||
"avg_t2i_days": avg_t2i_days,
|
"avg_t2i_days": avg_t2i_days,
|
||||||
"avg_t_in_exam_days": avg_t_in_exam_days,
|
"avg_t_in_exam_days": avg_t_in_exam_days,
|
||||||
"linkedin_content_form": linkedin_content_form,
|
"linkedin_content_form": linkedin_content_form,
|
||||||
|
"staff_form": StaffAssignmentForm(),
|
||||||
}
|
}
|
||||||
return render(request, "jobs/job_detail.html", context)
|
return render(request, "jobs/job_detail.html", context)
|
||||||
|
|
||||||
@ -2994,7 +2995,8 @@ def staff_assignment_view(request, slug):
|
|||||||
form = StaffAssignmentForm(request.POST, instance=job)
|
form = StaffAssignmentForm(request.POST, instance=job)
|
||||||
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
assignment = form.save()
|
job.assigned_to = form.cleaned_data["assigned_to"]
|
||||||
|
job.save(update_fields=["assigned_to"])
|
||||||
messages.success(request, f"Staff assigned to job '{job.title}' successfully!")
|
messages.success(request, f"Staff assigned to job '{job.title}' successfully!")
|
||||||
return redirect("job_detail", slug=job.slug)
|
return redirect("job_detail", slug=job.slug)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% load i18n static %}
|
{% load i18n static crispy_forms_tags %}
|
||||||
|
|
||||||
{% block title %}{{ job.title }} - University ATS{% endblock %}
|
{% block title %}{{ job.title }} - University ATS{% endblock %}
|
||||||
|
|
||||||
@ -303,7 +303,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="nav-item flex-fill" role="presentation">
|
<li class="nav-item flex-fill" role="presentation">
|
||||||
<button class="nav-link" id="staff-tab" data-bs-toggle="tab" data-bs-target="#staff-pane" type="button" role="tab" aria-controls="staff-pane" aria-selected="false">
|
<button class="nav-link" id="staff-tab" data-bs-toggle="tab" data-bs-target="#staff-pane" type="button" role="tab" aria-controls="staff-pane" aria-selected="false">
|
||||||
<i class="fas fa-user-tie me-1 text-primary"></i> {% trans "Staff" %}
|
<i class="fas fa-user-tie me-1 text-primary"></i> {% trans "Assigned Staff" %}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item flex-fill" role="presentation">
|
<li class="nav-item flex-fill" role="presentation">
|
||||||
@ -384,42 +384,47 @@
|
|||||||
<div class="tab-pane fade" id="staff-pane" role="tabpanel" aria-labelledby="staff-tab">
|
<div class="tab-pane fade" id="staff-pane" role="tabpanel" aria-labelledby="staff-tab">
|
||||||
<h5 class="mb-3"><i class="fas fa-user-tie me-2 text-primary"></i>{% trans "Staff Assignment" %}</h5>
|
<h5 class="mb-3"><i class="fas fa-user-tie me-2 text-primary"></i>{% trans "Staff Assignment" %}</h5>
|
||||||
<div class="d-grid gap-3">
|
<div class="d-grid gap-3">
|
||||||
<p class="text-muted small mb-3">
|
|
||||||
{% trans "Assign staff members to manage this job posting and track applications." %}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<a href="{% url 'staff_assignment_view' job.slug %}" class="btn btn-main-action">
|
|
||||||
<i class="fas fa-user-plus me-1"></i> {% trans "Assign Staff Member" %}
|
|
||||||
</a>
|
|
||||||
|
|
||||||
{% if job.assigned_to %}
|
{% if job.assigned_to %}
|
||||||
<div class="mt-3">
|
<p class="text-muted small mb-3">
|
||||||
<h6 class="text-muted">{% trans "Current Assignments" %}</h6>
|
<strong>{% trans "Assigned to:" %}</strong> {{ job.assigned_to }}
|
||||||
{% for assignment in job.staff_assignments.all %}
|
</p>
|
||||||
<div class="card mb-2">
|
|
||||||
<div class="card-body p-2">
|
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
|
||||||
<div>
|
|
||||||
<strong>{{ assignment.staff.get_full_name|default:assignment.staff.username }}</strong>
|
|
||||||
<br>
|
|
||||||
<small class="text-muted">{{ assignment.staff.email }}</small>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{% if assignment.staff.is_active %}
|
|
||||||
<span class="badge bg-success">Active</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="badge bg-danger">Inactive</span>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
{% if not job.assigned_to %}
|
||||||
</div>
|
<button type="button" class="btn btn-main-action" data-bs-toggle="modal" data-bs-target="#staffAssignmentModal">
|
||||||
{% if assignment.notes %}
|
<i class="fas fa-user-plus me-1"></i> {% trans "Assign Staff Member" %}
|
||||||
<small class="text-muted d-block mt-1">{{ assignment.notes }}</small>
|
</button>
|
||||||
|
{% elif job.assigned_to and job.assigned_to == request.user %}
|
||||||
|
<button type="button" class="btn btn-main-action" data-bs-toggle="modal" data-bs-target="#staffAssignmentModal">
|
||||||
|
<i class="fas fa-user-plus me-1"></i> {% trans "Assign Staff Member" %}
|
||||||
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- Modal for Staff Assignment -->
|
||||||
|
<div class="modal fade" id="staffAssignmentModal" tabindex="-1" aria-labelledby="staffAssignmentModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="staffAssignmentModalLabel">
|
||||||
|
<i class="fas fa-user-plus me-2"></i> {% trans "Assign Staff Member" %}
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form method="post" action="{% url 'staff_assignment_view' job.slug %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{staff_form|crispy}}
|
||||||
|
<div class="d-flex justify-content-end mt-3">
|
||||||
|
<button type="submit" class="btn btn-main-action">
|
||||||
|
<i class="fas fa-save me-1"></i> {% trans "Save Assignment" %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
</div>
|
||||||
|
|
||||||
|
{% if not job.assigned_to %}
|
||||||
<div class="alert alert-info p-2 small mb-0">
|
<div class="alert alert-info p-2 small mb-0">
|
||||||
<i class="fas fa-info-circle me-1"></i> {% trans "No staff members assigned to this job yet." %}
|
<i class="fas fa-info-circle me-1"></i> {% trans "No staff members assigned to this job yet." %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -291,7 +291,7 @@
|
|||||||
hx-get="{% url 'candidate_criteria_view_htmx' candidate.pk %}"
|
hx-get="{% url 'candidate_criteria_view_htmx' candidate.pk %}"
|
||||||
hx-target="#candidateviewModalBody"
|
hx-target="#candidateviewModalBody"
|
||||||
title="View Profile">
|
title="View Profile">
|
||||||
{{ candidate.name }}<i class="fas fa-eye ms-1"></i>
|
{{ candidate.name }} <i class="fas fa-eye ms-1"></i>
|
||||||
</button>
|
</button>
|
||||||
{% comment %} <div class="candidate-name">
|
{% comment %} <div class="candidate-name">
|
||||||
{{ candidate.name }}
|
{{ candidate.name }}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user