[UPDT] RECRUITMENT: Highlight recruitment and stage view for manager view

This commit is contained in:
Horilla
2024-01-12 21:35:41 +05:30
parent 47c55cad78
commit 07d2bb4742
6 changed files with 101 additions and 25 deletions

View File

@@ -654,7 +654,7 @@ class OfferLetterForm(ModelForm):
}
class SkillZoneCreateForm(ModelForm):
class SkillZoneCreateForm(forms.ModelForm):
class Meta:
"""
Class Meta for additional options
@@ -684,6 +684,11 @@ class SkillZoneCandidateForm(ModelForm):
class ToSkillZoneForm(ModelForm):
skill_zone_ids = forms.ModelMultipleChoiceField(
queryset=SkillZone.objects.all(),
label=_("Skill Zones")
)
class Meta:
"""
Class Meta for additional options
@@ -691,10 +696,11 @@ class ToSkillZoneForm(ModelForm):
model = SkillZoneCandidate
fields = "__all__"
exclude = [
"added_on",
"skill_zone_id",
]
widgets = {
"candidate_id": forms.HiddenInput(),
# 'skill_zone_id':forms.MultiValueField()
}
error_messages = {
NON_FIELD_ERRORS: {
@@ -702,3 +708,21 @@ class ToSkillZoneForm(ModelForm):
}
}
def clean(self):
cleaned_data = super().clean()
candidate = cleaned_data.get('candidate_id')
skill_zones = cleaned_data.get('skill_zone_ids')
skill_zone_list=[]
for skill_zone in skill_zones:
print(skill_zone,candidate)
# Check for the unique together constraint manually
if SkillZoneCandidate.objects.filter(candidate_id=candidate, skill_zone_id=skill_zone).exists():
# Raise a ValidationError with a custom error message
skill_zone_list.append(skill_zone)
if len(skill_zone_list) > 0 :
skill_zones_str = ', '.join(str(skill_zone) for skill_zone in skill_zone_list)
raise ValidationError(f"{candidate} already exists in {skill_zones_str}.")
# cleaned_data['skill_zone_id'] =skill_zone
return cleaned_data

View File

@@ -541,7 +541,8 @@ class SkillZoneCandidate(models.Model):
SkillZone,
verbose_name=_("Skill Zone"),
related_name="skillzonecandidate_set",
on_delete=models.PROTECT
on_delete=models.PROTECT,
null=True
)
candidate_id = models.ForeignKey(
Candidate,
@@ -564,7 +565,8 @@ class SkillZoneCandidate(models.Model):
)
is_active = models.BooleanField(default=True, verbose_name=_("Is Active"))
added_on = models.DateField(
default=django.utils.timezone.now
default=django.utils.timezone.now,
editable=False,
)
objects = HorillaCompanyManager(related_company_field="skill_zone__company_id")

View File

@@ -93,7 +93,7 @@
<div class="oh-sticky-table__thead">
<div class="oh-sticky-table__tr">
<div class="oh-sticky-table__th">{% trans "Candidate" %}</div>
<div class="oh-sticky-table__th">{% trans "Reasom" %}</div>
<div class="oh-sticky-table__th">{% trans "Reason" %}</div>
<div class="oh-sticky-table__th">{% trans "Added on" %}</div>
<div class="oh-sticky-table__th">{% trans "Resume" %}</div>
<div class="oh-sticky-table__th">{% trans "Actions" %}</div>
@@ -145,14 +145,14 @@
<ion-icon name="create-outline"></ion-icon>
</button>
{% if sz_candidate.is_active %}
<form action="{% url 'skill-zone-cand-archive' sz_candidate.id %}" title="Archive" onsubmit="return confirm('{% trans "Do you want to archive this candidate" %}')" method='post'
<form action="{% url 'skill-zone-cand-archive' sz_candidate.id %}" title="Archive" onsubmit="return confirm('{% trans "Do you want to archive this candidate from this skill zone" %}')" method='post'
class="w-50">
{% csrf_token %}
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
><ion-icon name="archive"></ion-icon></button>
</form>
{% else %}
<form action="{% url 'skill-zone-cand-archive' sz_candidate.id %}" title="Un Archive" onsubmit="return confirm('{% trans "Do you want to un-archive this candidate" %}')" method='post'
<form action="{% url 'skill-zone-cand-archive' sz_candidate.id %}" title="Un Archive" onsubmit="return confirm('{% trans "Do you want to un-archive this candidate from this skill zone" %}')" method='post'
class="w-50">
{% csrf_token %}
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"

View File

@@ -0,0 +1,51 @@
{% load i18n %}
<div class="oh-modal__dialog-header">
<h2 class="oh-modal__dialog-title" id="createTitle">
{% trans "Add Candidate" %}
</h2>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
</div>
<div class="oh-modal__dialog-body" >
<form
hx-post="{% url 'to-skill-zone' cand_id %}"
hx-target="#editCandTarget"
hx-encoding="multipart/form-data"
>
{% csrf_token %}
{% if form.non_field_errors %}
<span class="error">{{ form.non_field_errors }}</span>
{% endif %}
<div class="col-12 col-sm-12 col-md-6 col-lg-12">
{{form.candidate_id}}
<div class="oh-input__group">
<label class="oh-input__label" for="keyType">{% trans "Skill zones" %}</label>
{{form.skill_zone_ids}}
{{form.skill_zone_ids.errors}}
</div>
</div>
<div class="col-12 col-sm-12 col-md-6 col-lg-12">
<div class="oh-input__group">
<label class="oh-input__label" for="keyType">{% trans "Reason" %}</label>
{{form.reason}}
{{form.reason.errors}}
</div>
</div>
<div class="col-12 col-sm-12 col-md-6 col-lg-12">
<div class="oh-input__group">
<label class="oh-input__label" for="keyType">{% trans "Is active" %}</label>
{{form.is_active}}
{{form.is_active.errors}}
</div>
</div>
{% comment %} {{form.as_p}} {% endcomment %}
<div class="oh-modal__dialog-footer">
<input class="oh-btn oh-btn--secondary oh-btn--shadow" type="submit" value='{% trans "Save" %}'>
</div>
</form>
</div>

View File

@@ -288,9 +288,8 @@ urlpatterns = [
path('skill-zone-cand-edit/<int:sz_cand_id>/',views.skill_zone_cand_edit,name="skill-zone-cand-edit"),
path('skill-zone-cand-filter',views.skill_zone_cand_filter,name="skill-zone-cand-filter"),
path('skill-zone-cand-archive/<int:sz_cand_id>/',views.skill_zone_cand_archive,name="skill-zone-cand-archive"),
path('skill-zone-cand-delete/<int:sz_cand_id>/',views.skill_zone_cand_delete,name="skill-zone-cand-delete"),
path('to-skill-zone/<int:cand_id>',views.to_skill_zone,name='to-skill-zone'),
path('skill-zone-cand-delete/<int:sz_cand_id>',views.skill_zone_cand_delete,name='skill-zone-cand-delete'),
path("view-mail-templates/", view_mail_templates, name="view-mail-templates"),
path("view-mail-template/<int:obj_id>/", view_letter, name="view-mail-template"),
path("create-mail-template/", create_letter, name="create-mail-template"),

View File

@@ -1551,23 +1551,23 @@ def skill_zone_cand_delete(request,sz_cand_id):
login_required
manager_can_enter(perm="recruitment.change_candidate")
def to_skill_zone(request,cand_id):
try:
candidate=Candidate.objects.get(id=cand_id)
template = "skill_zone_cand/skill_zone_cand_form.html"
form = ToSkillZoneForm(initial={'candidate_id':candidate})
if request.method=='POST':
form=ToSkillZoneForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, _("Candidate added successfully.."))
return HttpResponse("<script>window.location.reload()</script>")
return render(request,template,{'form':form,'cand_id':cand_id})
candidate=Candidate.objects.get(id=cand_id)
template = "skill_zone_cand/to_skill_zone_form.html"
form = ToSkillZoneForm(initial={'candidate_id':candidate})
if request.method=='POST':
form = ToSkillZoneForm(request.POST)
if form.is_valid():
skill_cand = form.save(commit=False)
skill_zone_ids = form.data.getlist("skill_zone_ids")
for zone in skill_zone_ids:
zone_instance =SkillZone.objects.get(id=zone)
if not zone_instance.skillzonecandidate_set.filter(candidate_id=candidate).exists():
skill_cand.skill_zone_id = zone_instance
skill_cand.save()
messages.success(request, _("Candidate added successfully.."))
return HttpResponse("<script>window.location.reload()</script>")
return render(request,template,{'form':form,'cand_id':cand_id})
except Candidate.DoesNotExist:
messages.error(request, _("Candidate not found."))
return HttpResponse("<script>window.location.reload()</script>")
@login_required
def update_candidate_rating(request,cand_id):