diff --git a/recruitment/forms.py b/recruitment/forms.py index 4585992..7a87421 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -2821,4 +2821,17 @@ class ScheduledInterviewForm(forms.Form): start_time = self.cleaned_data.get('start_time') if start_time and start_time < timezone.now(): raise forms.ValidationError(_('Start time cannot be in the past.')) - return start_time \ No newline at end of file + return start_time + +class ScheduledInterviewUpdateStatusForm(forms.Form): + status = forms.ChoiceField( + choices=ScheduledInterview.InterviewStatus.choices, + widget=forms.Select(attrs={ + 'class': 'form-control', + 'required': True + }), + label=_('Interview Status') + ) + class Meta: + model = ScheduledInterview + fields = ['status'] \ No newline at end of file diff --git a/recruitment/urls.py b/recruitment/urls.py index 19780ba..83a877d 100644 --- a/recruitment/urls.py +++ b/recruitment/urls.py @@ -571,6 +571,7 @@ urlpatterns = [ # Interview URLs path('interviews/', views.interview_list, name='interview_list'), path('interviews//', views.interview_detail, name='interview_detail'), + path('interviews//update_interview_status', views.update_interview_status, name='update_interview_status'), # Interview Creation URLs path('interviews/create//', views.interview_create_type_selection, name='interview_create_type_selection'), diff --git a/recruitment/views.py b/recruitment/views.py index c6798f9..f53a2c6 100644 --- a/recruitment/views.py +++ b/recruitment/views.py @@ -5331,10 +5331,24 @@ def interview_create_onsite(request, candidate_slug): def get_interview_list(request, job_slug): + from .forms import ScheduledInterviewUpdateStatusForm application = Application.objects.get(slug=job_slug) interviews = ScheduledInterview.objects.filter(application=application).order_by("interview_date","interview_time").select_related('interview') - print(interviews) - return render(request, 'interviews/partials/interview_list.html', {'interviews': interviews, 'application': application}) + interview_status_form = ScheduledInterviewUpdateStatusForm() + return render(request, 'interviews/partials/interview_list.html', {'interviews': interviews, 'application': application,'interview_status_form':interview_status_form}) + +@require_POST +def update_interview_status(request,slug): + from .forms import ScheduledInterviewUpdateStatusForm + + if request.method == 'POST': + form = ScheduledInterviewUpdateStatusForm(request.POST) + if form.is_valid(): + scheduled_interview = get_object_or_404(ScheduledInterview, slug=slug) + scheduled_interview.status = form.cleaned_data['status'] + scheduled_interview.save(update_fields=['status']) + messages.success(request, "Interview status updated successfully.") + return redirect('interview_detail', slug=slug) @login_required def agency_access_link_deactivate(request, slug): @@ -5861,13 +5875,16 @@ def interview_list(request): @staff_user_required def interview_detail(request, slug): """View details of a specific interview""" + from .forms import ScheduledInterviewUpdateStatusForm + interview = get_object_or_404(ScheduledInterview, slug=slug) reschedule_form = ScheduledInterviewForm() reschedule_form.initial['topic'] = interview.interview.topic context = { 'interview': interview, - 'reschedule_form':reschedule_form + 'reschedule_form':reschedule_form, + 'interview_status_form':ScheduledInterviewUpdateStatusForm() } return render(request, 'interviews/interview_detail.html', context) diff --git a/templates/interviews/interview_detail.html b/templates/interviews/interview_detail.html index 855de95..6fb2b44 100644 --- a/templates/interviews/interview_detail.html +++ b/templates/interviews/interview_detail.html @@ -224,6 +224,11 @@ {% trans "View Job" %} + @@ -323,6 +328,13 @@ {% trans "Duration:" %} {{ interview.interview.duration }} {% trans "minutes" %} +
+ {% trans "Status:" %} + + + {{ interview.status }} + +
@@ -739,6 +751,34 @@
+ + + {% endblock %} {% block customJS %} diff --git a/templates/interviews/interview_list.html b/templates/interviews/interview_list.html index e329ffa..2d8b9cc 100644 --- a/templates/interviews/interview_list.html +++ b/templates/interviews/interview_list.html @@ -230,9 +230,8 @@ - {{meetings}} {# Using 'meetings' based on the context_object_name provided #} - {% if meetings %} + {% if interviews %}
{# View Switcher (kept the name for simplicity) #} {% include "includes/_list_view_switcher.html" with list_id="meetings-list" %}