diff --git a/recruitment/filters.py b/recruitment/filters.py index e5d6167e0..ea1d8e662 100644 --- a/recruitment/filters.py +++ b/recruitment/filters.py @@ -10,6 +10,7 @@ import django_filters from django import forms from recruitment.models import ( Candidate, + InterviewSchedule, Recruitment, SkillZone, SkillZoneCandidate, @@ -135,6 +136,7 @@ class CandidateFilter(FilterSet): "rejected_candidate__reject_reason_id", "offer_letter_status", "candidate_rating__rating", + "candidate_interview__employee_id", ] def __init__(self, *args, **kwargs): @@ -536,3 +538,73 @@ class SkillZoneCandFilter(FilterSet): queryset.filter(candidate_id__name__icontains=value) | queryset.filter(skill_zone_id__title__icontains=value) ).distinct() + + +class InterviewFilter(FilterSet): + """ + Filter set class for Candidate model + + Args: + FilterSet (class): custom filter set class to apply styling + """ + + search = django_filters.CharFilter(field_name="candidate_id__name", lookup_expr="icontains") + + scheduled_from = django_filters.DateFilter( + field_name="interview_date", + lookup_expr="gte", + widget=forms.DateInput(attrs={"type": "date"}), + ) + # schedule_date = django_filters.DateFilter( + # field_name="interview_date", + # widget=forms.DateInput(attrs={"type": "date"}), + # ) + scheduled_till = django_filters.DateFilter( + field_name="interview_date", + lookup_expr="lte", + widget=forms.DateInput(attrs={"type": "date"}), + ) + + class Meta: + """ + Meta class to add the additional info + """ + + model = InterviewSchedule + fields = [ + "candidate_id", + "employee_id", + "interview_date", + # "recruitment", + # "recruitment_id", + # "stage_id", + # "schedule_date", + # "email", + # "mobile", + # "country", + # "state", + # "city", + # "zip", + # "gender", + # "start_onboard", + # "hired", + # "canceled", + # "is_active", + # "recruitment_id__company_id", + # "job_position_id", + # "recruitment_id__closed", + # "recruitment_id__is_active", + # "job_position_id__department_id", + # "recruitment_id__recruitment_managers", + # "stage_id__stage_managers", + # "stage_id__stage_type", + # "joining_date", + # "skillzonecandidate_set__skill_zone_id", + # "skillzonecandidate_set__candidate_id", + # "portal_sent", + # "joining_set", + # "rejected_candidate__reject_reason_id", + # "offer_letter_status", + # "candidate_rating__rating", + # "candidate_interview__employee_id", + ] diff --git a/recruitment/forms.py b/recruitment/forms.py index 8e70f9cf2..d6088076a 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -1026,16 +1026,17 @@ class ScheduleInterviewForm(ModelForm): def clean(self): + instance = self.instance cleaned_data = super().clean() interview_date = cleaned_data.get('interview_date') interview_time = cleaned_data.get('interview_time') - if interview_date and interview_date < date.today(): + if not instance.pk and interview_date and interview_date < date.today(): self.add_error('interview_date', _("Interview date cannot be in the past.")) - if interview_time: + if not instance.pk and interview_time: now = datetime.now().time() - if interview_date == date.today() and interview_time < now: + if not instance.pk and interview_date == date.today() and interview_time < now: self.add_error('interview_time', _("Interview time cannot be in the past.")) return cleaned_data diff --git a/recruitment/models.py b/recruitment/models.py index 4587eacd4..72fdd09fd 100644 --- a/recruitment/models.py +++ b/recruitment/models.py @@ -801,6 +801,7 @@ class InterviewSchedule(HorillaModel): employee_id = models.ManyToManyField(Employee, verbose_name=_("interviewer")) interview_date = models.DateField(verbose_name=_("Interview Date")) interview_time = models.TimeField(verbose_name=_("Interview Time")) + completed = models.BooleanField(default=False, verbose_name=_("Is Interview Completed")) def __str__(self) -> str: return f"{self.candidate_id} -Interview." diff --git a/recruitment/templates/candidate/candidate_card.html b/recruitment/templates/candidate/candidate_card.html index 1c106669e..ba60b23ca 100644 --- a/recruitment/templates/candidate/candidate_card.html +++ b/recruitment/templates/candidate/candidate_card.html @@ -48,40 +48,56 @@
\ No newline at end of file diff --git a/recruitment/templates/candidate/interview_list.html b/recruitment/templates/candidate/interview_list.html new file mode 100644 index 000000000..aa28d90b0 --- /dev/null +++ b/recruitment/templates/candidate/interview_list.html @@ -0,0 +1,216 @@ +{% load i18n static %} +{% include 'filter_tags.html' %} + {% if data %} +