[UPDT] RECRUITMENT: Highlight recruitment and stage view for manager view
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
@@ -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"),
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user