[UPDT] RECRUITMENT: Updated recruitment module by adding verbose name for model and fields

This commit is contained in:
Horilla
2025-05-28 14:30:01 +05:30
parent 76d3097161
commit d2909156f1
11 changed files with 337 additions and 303 deletions

View File

@@ -226,7 +226,7 @@ class DropDownForm(forms.ModelForm):
field.widget.attrs.update({"class": "oh-switch__checkbox "})
class RecruitmentCreationForm(ModelForm):
class RecruitmentCreationForm(BaseModelForm):
"""
Form for Recruitment model
"""
@@ -254,14 +254,13 @@ class RecruitmentCreationForm(ModelForm):
"end_date": forms.DateInput(attrs={"type": "date"}),
"description": forms.Textarea(attrs={"data-summernote": ""}),
}
labels = {"description": _("Description"), "vacancy": _("Vacancy")}
def as_p(self, *args, **kwargs):
"""
Render the form fields as HTML table rows with Bootstrap styling.
"""
context = {"form": self}
table_html = render_to_string("attendance_form.html", context)
table_html = render_to_string("horilla_form.html", context)
return table_html
def __init__(self, *args, **kwargs):
@@ -278,7 +277,7 @@ class RecruitmentCreationForm(ModelForm):
filter_template_path="employee_filters.html",
required=True,
),
label="Employee",
label=f"{self._meta.model()._meta.get_field('recruitment_managers').verbose_name}",
)
skill_choices = [("", _("---Choose Skills---"))] + list(
@@ -326,7 +325,7 @@ class RecruitmentCreationForm(ModelForm):
super().clean()
class StageCreationForm(ModelForm):
class StageCreationForm(BaseModelForm):
"""
Form for Stage model
"""
@@ -356,7 +355,7 @@ class StageCreationForm(ModelForm):
filter_template_path="employee_filters.html",
required=True,
),
label="Employee",
label=f"{self._meta.model()._meta.get_field('stage_managers').verbose_name}",
)
def clean(self):
@@ -367,7 +366,7 @@ class StageCreationForm(ModelForm):
super().clean()
class CandidateCreationForm(ModelForm):
class CandidateCreationForm(BaseModelForm):
"""
Form for Candidate model
"""
@@ -421,13 +420,6 @@ class CandidateCreationForm(ModelForm):
"scheduled_date": forms.DateInput(attrs={"type": "date"}),
"dob": forms.DateInput(attrs={"type": "date"}),
}
labels = {
"name": _("Name"),
"email": _("Email"),
"mobile": _("Mobile"),
"address": _("Address"),
"zip": _("Zip"),
}
def save(self, commit: bool = ...):
candidate = self.instance
@@ -904,13 +896,11 @@ class SurveyPreviewForm(forms.Form):
# self
class TemplateForm(ModelForm):
class TemplateForm(BaseModelForm):
"""
TemplateForm
"""
verbose_name = "Template"
class Meta:
model = SurveyTemplate
fields = "__all__"
@@ -1008,8 +998,8 @@ class SkillZoneCreateForm(BaseModelForm):
exclude = ["is_active"]
class SkillZoneCandidateForm(ModelForm):
verbose_name = "Skill Zone Candidate"
class SkillZoneCandidateForm(BaseModelForm):
verbose_name = _("Skill Zone Candidate")
candidate_id = forms.ModelMultipleChoiceField(
queryset=Candidate.objects.all(),
widget=forms.SelectMultiple,
@@ -1076,8 +1066,8 @@ class SkillZoneCandidateForm(ModelForm):
return self.instance
class ToSkillZoneForm(ModelForm):
verbose_name = "Add To Skill Zone"
class ToSkillZoneForm(BaseModelForm):
verbose_name = _("Add To Skill Zone")
skill_zone_ids = forms.ModelMultipleChoiceField(
queryset=SkillZone.objects.all(), label=_("Skill Zones")
)
@@ -1177,13 +1167,11 @@ class RejectedCandidateForm(ModelForm):
self.fields["candidate_id"].widget = self.fields["candidate_id"].hidden_widget()
class ScheduleInterviewForm(ModelForm):
class ScheduleInterviewForm(BaseModelForm):
"""
ScheduleInterviewForm
"""
verbose_name = "Schedule Interview"
class Meta:
model = InterviewSchedule
fields = "__all__"

View File

@@ -95,6 +95,10 @@ class SurveyTemplate(HorillaModel):
def __str__(self) -> str:
return self.title
class Meta:
verbose_name = _("Survey Template")
verbose_name_plural = _("Survey Templates")
class Skill(HorillaModel):
title = models.CharField(max_length=100)
@@ -107,14 +111,20 @@ class Skill(HorillaModel):
self.title = title.capitalize()
super().save(*args, **kwargs)
class Meta:
verbose_name = _("Skill")
verbose_name_plural = _("Skills")
class Recruitment(HorillaModel):
"""
Recruitment model
"""
title = models.CharField(max_length=50, null=True, blank=True)
description = models.TextField(null=True)
title = models.CharField(
max_length=50, null=True, blank=True, verbose_name=_("Title")
)
description = models.TextField(null=True, verbose_name=_("Description"))
is_event_based = models.BooleanField(
default=False,
help_text=_("To start recruitment for multiple job positions"),
@@ -131,6 +141,7 @@ class Recruitment(HorillaModel):
"To publish a recruitment in website, if false then it \
will not appear on open recruitment page."
),
verbose_name=_("Is Published"),
)
is_active = models.BooleanField(
default=True,
@@ -140,7 +151,10 @@ class Recruitment(HorillaModel):
),
)
open_positions = models.ManyToManyField(
JobPosition, related_name="open_positions", blank=True
JobPosition,
related_name="open_positions",
blank=True,
verbose_name=_("Job Position"),
)
job_position_id = models.ForeignKey(
JobPosition,
@@ -152,9 +166,11 @@ class Recruitment(HorillaModel):
verbose_name=_("Job Position"),
editable=False,
)
vacancy = models.IntegerField(default=0, null=True)
recruitment_managers = models.ManyToManyField(Employee)
survey_templates = models.ManyToManyField(SurveyTemplate, blank=True)
vacancy = models.IntegerField(default=0, null=True, verbose_name=_("Vacancy"))
recruitment_managers = models.ManyToManyField(Employee, verbose_name=_("Managers"))
survey_templates = models.ManyToManyField(
SurveyTemplate, blank=True, verbose_name=_("Survey Templates")
)
company_id = models.ForeignKey(
Company,
on_delete=models.PROTECT,
@@ -164,7 +180,7 @@ class Recruitment(HorillaModel):
)
start_date = models.DateField(default=django.utils.timezone.now)
end_date = models.DateField(blank=True, null=True)
skills = models.ManyToManyField(Skill, blank=True)
skills = models.ManyToManyField(Skill, blank=True, verbose_name=_("Skills"))
linkedin_account_id = models.ForeignKey(
"recruitment.LinkedInAccount",
on_delete=models.PROTECT,
@@ -179,14 +195,19 @@ class Recruitment(HorillaModel):
"To publish a recruitment in Linkedin, if active is false then it \
will not post on LinkedIn."
),
verbose_name=_("Post on LinkedIn"),
)
objects = HorillaCompanyManager()
default = models.manager.Manager()
optional_profile_image = models.BooleanField(
default=False, help_text=_("Profile image not mandatory for candidate creation")
default=False,
help_text=_("Profile image not mandatory for candidate creation"),
verbose_name=_("Optional Profile Image"),
)
optional_resume = models.BooleanField(
default=False, help_text=_("Resume not mandatory for candidate creation")
default=False,
help_text=_("Resume not mandatory for candidate creation"),
verbose_name=_("Optional Resume"),
)
class Meta:
@@ -202,6 +223,8 @@ class Recruitment(HorillaModel):
("job_position_id", "start_date", "company_id"),
]
permissions = (("archive_recruitment", "Archive Recruitment"),)
verbose_name = _("Recruitment")
verbose_name_plural = _("Recruitments")
def total_hires(self):
"""
@@ -287,10 +310,13 @@ class Stage(HorillaModel):
related_name="stage_set",
verbose_name=_("Recruitment"),
)
stage_managers = models.ManyToManyField(Employee)
stage = models.CharField(max_length=50)
stage_managers = models.ManyToManyField(Employee, verbose_name=_("Stage Managers"))
stage = models.CharField(max_length=50, verbose_name=_("Stage"))
stage_type = models.CharField(
max_length=20, choices=stage_types, default="interview"
max_length=20,
choices=stage_types,
default="interview",
verbose_name=_("Stage Type"),
)
sequence = models.IntegerField(null=True, default=0)
objects = HorillaCompanyManager(related_company_field="recruitment_id__company_id")
@@ -306,6 +332,8 @@ class Stage(HorillaModel):
permissions = (("archive_Stage", "Archive Stage"),)
unique_together = ["recruitment_id", "stage"]
ordering = ["sequence"]
verbose_name = _("Stage")
verbose_name_plural = _("Stages")
def active_candidates(self):
"""
@@ -325,11 +353,11 @@ class Candidate(HorillaModel):
choices = [("male", _("Male")), ("female", _("Female")), ("other", _("Other"))]
offer_letter_statuses = [
("not_sent", "Not Sent"),
("sent", "Sent"),
("accepted", "Accepted"),
("rejected", "Rejected"),
("joined", "Joined"),
("not_sent", _("Not Sent")),
("sent", _("Sent")),
("accepted", _("Accepted")),
("rejected", _("Rejected")),
("joined", _("Joined")),
]
source_choices = [
("application", _("Application Form")),
@@ -377,7 +405,7 @@ class Candidate(HorillaModel):
validators=[
validate_mobile,
],
verbose_name=_("Phone"),
verbose_name=_("Mobile"),
)
resume = models.FileField(
upload_to="recruitment/resume",
@@ -614,6 +642,8 @@ class Candidate(HorillaModel):
("archive_candidate", "Archive Candidate"),
)
ordering = ["sequence"]
verbose_name = _("Candidate")
verbose_name_plural = _("Candidates")
class RejectReason(HorillaModel):
@@ -637,6 +667,10 @@ class RejectReason(HorillaModel):
def __str__(self) -> str:
return self.title
class Meta:
verbose_name = _("Reject Reason")
verbose_name_plural = _("Reject Reasons")
class RejectedCandidate(HorillaModel):
"""
@@ -952,6 +986,10 @@ class InterviewSchedule(HorillaModel):
def __str__(self) -> str:
return f"{self.candidate_id} -Interview."
class Meta:
verbose_name = _("Schedule Interview")
verbose_name_plural = _("Schedule Interviews")
class Resume(models.Model):
file = models.FileField(

View File

@@ -55,7 +55,7 @@ if not any(
Initializes and starts background tasks using APScheduler when the server is running.
"""
scheduler = BackgroundScheduler()
scheduler.add_job(candidate_convert, "interval", seconds=10)
scheduler.add_job(candidate_convert, "interval", minutes=5)
scheduler.add_job(recruitment_close, "interval", hours=1)
scheduler.start()

View File

@@ -2,47 +2,43 @@
{{ form.non_field_errors }}
<div class="row">
{% for field in form %}
{% if field.label != "Profile" and field.label != 'Country' and field.label != 'State' and field.label != 'Badge id' %}
<div class="col-lg-6">
<div class="oh-input__group">
<label
class="oh-label {% if field.field.required %}required-star{% endif %}"
for="id_{{ field.name }}"
title="{{ field.help_text|safe }}"
>
{{ field.label }}
</label>
{% for field in form %}
{% if field.name != 'profile' and field.name != 'country' and field.name != 'state' and field.name != 'badge_id' %}
<div class="col-lg-6">
<div class="oh-input__group">
<label class="oh-label {% if field.field.required %}required-star{% endif %}" for="{{field.id_for_label}}"
title="{{ field.help_text|safe }}">
{{ field.label }}
</label>
{% if field.field.widget.input_type == 'checkbox' %}
<div class="oh-switch" style="width: 30px;">{{ field|add_class:'oh-switch__checkbox' }}</div>
{% else %}
{{ field|add_class:'form-control' }}
{% endif %}
{% if field.field.widget.input_type == 'checkbox' %}
<div class="oh-switch" style="width: 30px;">{{ field|add_class:'oh-switch__checkbox' }}</div>
{% else %}
{{ field|add_class:'form-control' }}
{% endif %}
{{ field.errors }}
</div>
</div>
{% elif field.label == 'Country' %}
<div class="row">
<div class="col-lg-6">
<label class="oh-label" for="country">{% trans "Country" %}</label>
<select name="country" class="w-100 oh-select-2" id="id_country">
<option value="{{form.instance.country}}" selected>{{form.instance.country}}</option>
</select>
{{form.country.errors}}
<span class="dropdown-wrapper" aria-hidden="true"></span>
</span>
</div>
<div class="col-lg-6">
<label class="oh-label d-block" for="state">{% trans "State" %}</label>
<select name="state" class="w-100 oh-select-2" id="id_state">
<option value="{{form.instance.state}}" selected>{{form.instance.state}}</option>
</select>
{{form.state.errors}}
</div>
</div>
{% endif %}
{% endfor %}
{{ field.errors }}
</div>
</div>
{% elif field.name == 'country' %}
<div class="row">
<div class="col-lg-6">
<label class="oh-label" for="{{form.country.id_for_label}}">{{form.country.label}}</label>
<select name="country" class="w-100 oh-select-2" id="id_country">
<option value="{{form.instance.country}}" selected>{{form.instance.country}}</option>
</select>
{{form.country.errors}}
<span class="dropdown-wrapper" aria-hidden="true"></span>
</span>
</div>
<div class="col-lg-6">
<label class="oh-label d-block" for="{{form.state.id_for_label}}">{{form.state.label}}</label>
<select name="state" class="w-100 oh-select-2" id="id_state">
<option value="{{form.instance.state}}" selected>{{form.instance.state}}</option>
</select>
{{form.state.errors}}
</div>
</div>
{% endif %}
{% endfor %}
</div>

View File

@@ -2,13 +2,13 @@
{% if form.non_field_errors %}
<ul class="errorlist">
{% for error in form.non_field_errors %}
<li>{{ error }}</li>
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
<div class="oh-modal__dialog-header pb-0">
<h5 class="oh-modal__dialog-title" id="recruitmentUpdateModalLabel">
{% trans "Edit Recruitment" %}
{% trans "Update" %} {{form.verbose_name}}
</h5>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
@@ -21,74 +21,90 @@
<div>
{% csrf_token %}
<div class="row" id="recruitmentUpdateContainer">
{% for error in form.non_field_errors %}
<ul class="errorlist">
<li>{{error}}</li>
</ul>
{% endfor %}
<div class="col-12 col-sm-12 col-md-12 col-lg-12">
<label class="oh-label" for="{{form.title.id_for_label}}">{% trans "Title" %} <span
class="text-danger">*</span></label>
<label class="oh-label" for="{{form.title.id_for_label}}">{{form.title.label}}
<span class="text-danger">*</span></label>
{{form.title}} {{form.title.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-12">
<label class="oh-label" for="{{form.description.id_for_label}}">{% trans "Description" %} <span
class="text-danger">*</span></label>
<label class="oh-label" for="{{form.description.id_for_label}}">{{form.description.label}}
<span class="text-danger">*</span></label>
{{form.description}} {{form.description.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="openPositionUpdateContainer">
<label class="oh-label" for="{{form.open_positions.id_for_label}}">{% trans "Job Position" %} <span
class="text-danger">*</span></label>
<label class="oh-label" for="{{form.open_positions.id_for_label}}">{{form.open_positions.label}}
<span class="text-danger">*</span></label>
{{form.open_positions}} {{form.open_positions.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.recruitment_managers.id_for_label}}">{% trans "Managers" %}
<label class="oh-label"
for="{{form.recruitment_managers.id_for_label}}">{{form.recruitment_managers.label}}
<span class="text-danger">*</span></label>
{{form.recruitment_managers}} {{form.recruitment_managers.errors}}
{{form.recruitment_managers}}
{{form.recruitment_managers.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.start_date.id_for_label}}">{% trans "Start Date" %}</label>
<label class="oh-label" for="{{form.start_date.id_for_label}}">{{form.start_date.label}}</label>
{{form.start_date}} {{form.start_date.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.end_date.id_for_label}}">{% trans "End Date" %}</label>
<label class="oh-label" for="{{form.end_date.id_for_label}}">{{form.end_date.label}}</label>
{{form.end_date}} {{form.end_date.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.vacancy.id_for_label}}">{% trans "Vacancy" %}</label>
<label class="oh-label" for="{{form.vacancy.id_for_label}}">{{form.vacancy.label}}</label>
{{form.vacancy}} {{form.vacancy.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.company_id.id_for_label}}">{% trans "Company" %}</label>
<label class="oh-label" for="{{form.company_id.id_for_label}}">{{form.company_id.label}}</label>
{{form.company_id}} {{form.company_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-12">
<label class="oh-label" for="id_survey_templates">{% trans "Survey Templates" %}</label>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label"
for="{{form.survey_templates.id_for_label}}">{{form.survey_templates.label}}</label>
{{form.survey_templates}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.skills.id_for_label}}">{{form.skills.label}}</label>
{{form.skills}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.publish_in_linkedin.id_for_label}}"
title="{{form.publish_in_linkedin.help_text|safe}}">{{form.publish_in_linkedin.label}}</label>
<div class="w-100 d-flex" style="align-items: center" 6>
<div class="oh-switch">{{form.publish_in_linkedin}}</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="">
<label class="oh-label"
for="{{form.linkedin_account_id.id_for_label}}">{{form.linkedin_account_id.label}}</label>
{{form.linkedin_account_id}} {{form.linkedin_account_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label class="oh-label" for="id_is_published" title="{{form.is_published.help_text|safe}}">
{% trans "Is Published?" %}
</label>
<label class="oh-label" for="{{form.is_published.id_for_label}}"
title="{{form.is_published.help_text|safe}}">{{form.is_published.label}} ?</label>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.is_published}}</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label class="oh-label" for="id_optional_profile_image" title="{{form.optional_profile_image.help_text|safe}}">
{% trans "Optional Profile Image?" %}
<label class="oh-label" for="{{form.optional_profile_image.id_for_label}}"
title="{{form.optional_profile_image.help_text|safe}}">
{{form.optional_profile_image.label}} ?
</label>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.optional_profile_image}}</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label class="oh-label" for="id_optional_resume" title="{{form.optional_resume.help_text|safe}}">
{% trans "Optional Resume?" %}
<label class="oh-label" for="{{form.optional_resume.id_for_label}}"
title="{{form.optional_resume.help_text|safe}}">
{{form.optional_resume.label}} ?
</label>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.optional_resume}}</div>

View File

@@ -1,49 +1,51 @@
{% load i18n %}
<div class="oh-modal__dialog-header">
<h5 class="oh-modal__dialog-title" id="objectUpdateModalLabel">
{% trans "Edit Stage" %}
</h5>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
<h5 class="oh-modal__dialog-title" id="objectUpdateModalLabel">
{% trans "Update" %} {{form.verbose_name}}
</h5>
<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 'stage-update-pipeline' form.instance.id %}"
hx-target="#objectUpdateModalTarget"
class="oh-profile-section"
>
<div>
{% csrf_token %}
<div class="row" id="stageUpdateFormHx">
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage" %} *</label>
{{form.stage}} {{form.stage.errors}}
<form hx-post="{% url 'stage-update-pipeline' form.instance.id %}" hx-target="#objectUpdateModalTarget"
class="oh-profile-section">
<div>
{% csrf_token %}
<div class="row" id="stageUpdateFormHx">
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.stage.id_for_label}}">{{form.stage.label}} *</label>
{{form.stage}} {{form.stage.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.recruitment_id.id_for_label}}">{{form.recruitment_id.label}}
*</label>
{{form.recruitment_id}} {{form.recruitment_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="stage_manager">
<label class="oh-label" for="{{form.stage_managers.id_for_label}}">{{form.stage_managers.label}}
*</label>
{{form.stage_managers}} {{form.stage_managers.errors}}
<ul id="error-list" class="errorlist" style="display: none">
<li>{% trans "This field is requied" %}</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.stage_type.id_for_label}}">{{form.stage_type.label}} *</label>
{{form.stage_type}} {{form.stage_type.errors}}
</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Recruitment" %} *</label>
{{form.recruitment_id}} {{form.recruitment_id.errors}}
<div class="d-flex flex-row-reverse w-100 align-items-right mt-4">
<button type="submit" class="oh-btn oh-btn--secondary pl-5 pr-5">
{% trans "Save" %}
</button>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage Managers" %} *</label>
{{form.stage_managers}} {{form.stage_managers.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage Type" %} *</label>
{{form.stage_type}} {{form.stage_type.errors}}
</div>
</div>
</div>
<div class="d-flex flex-row-reverse w-100 align-items-right mt-4">
<button type="submit" class="oh-btn oh-btn--secondary pl-5 pr-5">
{% trans "Save" %}
</button>
</div>
</form>
</form>
</div>
<script>
$(document).on('htmx:load', function () {
{% include 'select2.js' %}
$('#stageUpdateFormHx .col-12 .oh-select').select2()
});
$(document).on('htmx:load', function () {
{% include 'select2.js' %}
$('#stageUpdateFormHx .col-12 .oh-select').select2()
});
</script>

View File

@@ -52,7 +52,7 @@
{% endif %}
<div class="oh-modal__dialog-header">
<h5 class="oh-modal__dialog-title" id="addRecruitmentModalLabel"
>{% if duplicate %}{% trans "Duplicate Recruitment" %}{% else %}{% trans "Add Recruitment" %}{% endif %}</span
>{% if duplicate %}{% trans "Duplicate" %}{% else %}{% trans "Create" %}{% endif %} {{form.verbose_name}}</span
>
<button class="oh-modal__close" aria-label="Close" >
<ion-icon name="close-outline"></ion-icon>
@@ -76,7 +76,7 @@
<label
class="oh-label required-star"
for="{{form.title.id_for_label}}"
>{% trans "Title" %}</label
>{{form.title.label}}</label
>
{{form.title}} {{form.title.errors}}
</div>
@@ -84,7 +84,7 @@
<label
class="oh-label required-star"
for="{{form.description.id_for_label}}"
>{% trans "Description" %}</label
>{{form.description.label}}</label
>
{{form.description}} {{form.description.errors}}
</div>
@@ -95,7 +95,7 @@
<label
class="oh-label required-star"
for="{{form.open_positions.id_for_label}}"
>{% trans "Job Position" %}</label
>{{form.open_positions.label}}</label
>
{{form.open_positions}} {{form.open_positions.errors}}
</div>
@@ -103,53 +103,53 @@
<label
class="oh-label required-star"
for="{{form.recruitment_managers.id_for_label}}"
>{% trans "Managers" %}</label
>{{form.recruitment_managers.label}}</label
>
{{form.recruitment_managers}}
{{form.recruitment_managers.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.start_date.id_for_label}}"
>{% trans "Start Date" %}</label
>{{form.start_date.label}}</label
>
{{form.start_date}} {{form.start_date.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.end_date.id_for_label}}"
>{% trans "End Date" %}</label
>{{form.end_date.label}}</label
>
{{form.end_date}} {{form.end_date.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.vacancy.id_for_label}}"
>{% trans "Vacancy" %}</label
>{{form.vacancy.label}}</label
>
{{form.vacancy}} {{form.vacancy.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.company_id.id_for_label}}"
>{% trans "Company" %}</label
>{{form.company_id.label}}</label
>
{{form.company_id}} {{form.company_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label
class="oh-label"
for="{{form.survey_templates.id_for_lable}}"
>{% trans "Survey Templates" %}</label
for="{{form.survey_templates.id_for_label}}"
>{{form.survey_templates.label}}</label
>
{{form.survey_templates}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.skills.id_for_lable}}"
>{% trans "Skills" %}</label
<label class="oh-label" for="{{form.skills.id_for_label}}"
>{{form.skills.label}}</label
>
{{form.skills}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.publish_in_linkedin.id_for_lable}}"
<label class="oh-label" for="{{form.publish_in_linkedin.id_for_label}}"
title="{{form.publish_in_linkedin.help_text|safe}}"
>{% trans "Post on LinkedIn" %}</label
>{{form.publish_in_linkedin.label}}</label
>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.publish_in_linkedin}}</div>
@@ -165,9 +165,9 @@
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label
class="oh-label"
for="id_is_published"
for="{{form.is_published.id_for_label}}"
title="{{form.is_published.help_text|safe}}"
>{% trans "Is Published?" %}</label
>{{form.is_published.label}} ?</label
>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.is_published}}</div>
@@ -176,9 +176,9 @@
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label
class="oh-label"
for="id_optional_profile_image"
for="{{form.optional_profile_image.id_for_label}}"
title="{{form.optional_profile_image.help_text|safe}}"
>{% trans "Optional Profile Image?" %}</label
>{{form.optional_profile_image.label}}</label
>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.optional_profile_image}}</div>
@@ -187,9 +187,9 @@
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label
class="oh-label"
for="id_optional_optional_resume"
for="{{form.optional_resume.id_for_label}}"
title="{{form.optional_resume.help_text|safe}}"
>{% trans "Optional Resume?" %}</label
>{{form.optional_resume.label}}</label
>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.optional_resume}}</div>
@@ -204,7 +204,7 @@
hx-post="{% url 'recruitment-create' %}"
hx-target="#objectCreateModalTarget"
>
{% trans "Add" %}
{% trans "Save" %}
</button>
</div>
</form>

View File

@@ -51,7 +51,7 @@
{% endif %}
<div class="oh-modal__dialog-header pb-0">
<h5 class="oh-modal__dialog-title" id="addRecruitmentModalLabel"
>{% trans "Edit Recruitment" %}</span
>{% trans "Update" %} {{form.verbose_name}}</span
>
<button class="oh-modal__close" aria-label="Close" >
<ion-icon name="close-outline"></ion-icon>
@@ -69,15 +69,15 @@
</ul>
{% endfor %}
<div class="col-12 col-sm-12 col-md-12 col-lg-12">
<label class="oh-label" for=""
>{% trans "Title" %}
<label class="oh-label" for="{{form.title.id_for_label}}"
>{{form.title.label}}
<span class="text-danger">*</span></label
>
{{form.title}} {{form.title.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-12">
<label class="oh-label" for=""
>{% trans "Description" %}
<label class="oh-label" for="{{form.description.id_for_label}}"
>{{form.description.label}}
<span class="text-danger">*</span></label
>
{{form.description}} {{form.description.errors}}
@@ -86,63 +86,63 @@
class="col-12 col-sm-12 col-md-12 col-lg-6"
id="openPositionUpdateContainer"
>
<label class="oh-label" for=""
>{% trans "Job Position" %}
<label class="oh-label" for="{{form.open_positions.id_for_label}}"
>{{form.open_positions.label}}
<span class="text-danger">*</span></label
>
{{form.open_positions}} {{form.open_positions.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for=""
>{% trans "Managers" %}
<label class="oh-label" for="{{form.recruitment_managers.id_for_label}}"
>{{form.recruitment_managers.label}}
<span class="text-danger">*</span></label
>
{{form.recruitment_managers}}
{{form.recruitment_managers.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for=""
>{% trans "Start Date" %}</label
<label class="oh-label" for="{{form.start_date.id_for_label}}"
>{{form.start_date.label}}</label
>
{{form.start_date}} {{form.start_date.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for=""
>{% trans "End Date" %}</label
<label class="oh-label" for="{{form.end_date.id_for_label}}"
>{{form.end_date.label}}</label
>
{{form.end_date}} {{form.end_date.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Vacancy" %}</label>
<label class="oh-label" for="{{form.vacancy.id_for_label}}">{{form.vacancy.label}}</label>
{{form.vacancy}} {{form.vacancy.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Company" %}</label>
<label class="oh-label" for="{{form.company_id.id_for_label}}">{{form.company_id.label}}</label>
{{form.company_id}} {{form.company_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="id_is_published"
>{% trans "Survey Templates" %}</label
<label class="oh-label" for="{{form.survey_templates.id_for_label}}"
>{{form.survey_templates.label}}</label
>
{{form.survey_templates}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.skills.id_for_lable}}"
>{% trans "Skills" %}</label
<label class="oh-label" for="{{form.skills.id_for_label}}"
>{{form.skills.label}}</label
>
{{form.skills}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.publish_in_linkedin.id_for_lable}}"
<label class="oh-label" for="{{form.publish_in_linkedin.id_for_label}}"
title="{{form.publish_in_linkedin.help_text|safe}}"
>{% trans "Post on LinkedIn" %}</label
>{{form.publish_in_linkedin.label}}</label
>
<div class="w-100 d-flex" style="align-items: center"6>
<div class="oh-switch">{{form.publish_in_linkedin}}</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="">
<label class="oh-label" for="{{form.company_id.id_for_label}}"
<label class="oh-label" for="{{form.linkedin_account_id.id_for_label}}"
>{{form.linkedin_account_id.label}}</label
>
{{form.linkedin_account_id}} {{form.linkedin_account_id.errors}}
@@ -150,25 +150,25 @@
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label
class="oh-label"
for="id_is_published"
for="{{form.is_published.id_for_label}}"
title="{{form.is_published.help_text|safe}}"
>{% trans "Is Published?" %}</label
>{{form.is_published.label}} ?</label
>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.is_published}}</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label class="oh-label" for="id_optional_profile_image" title="{{form.optional_profile_image.help_text|safe}}">
{% trans "Optional Profile Image?" %}
<label class="oh-label" for="{{form.optional_profile_image.id_for_label}}" title="{{form.optional_profile_image.help_text|safe}}">
{{form.optional_profile_image.label}} ?
</label>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.optional_profile_image}}</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-4">
<label class="oh-label" for="id_optional_resume" title="{{form.optional_resume.help_text|safe}}">
{% trans "Optional Resume?" %}
<label class="oh-label" for="{{form.optional_resume.id_for_label}}" title="{{form.optional_resume.help_text|safe}}">
{{form.optional_resume.label}} ?
</label>
<div class="w-100 d-flex" style="align-items: center">
<div class="oh-switch">{{form.optional_resume}}</div>

View File

@@ -1,53 +1,48 @@
{% load i18n %}
<div class="oh-modal__dialog-header">
<span class="oh-modal__dialog-title" id="objectCreateModalLabel"
>{% trans "Add Stage" %}</span
>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
<span class="oh-modal__dialog-title" id="objectCreateModalLabel">{% trans "Create" %} {{form.verbose_name}}</span>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
</div>
<div class="oh-modal__dialog-body" id="objectCreateModalBody">
<form
hx-post="{% url 'rec-stage-create' %}"
class="oh-general__tab-target oh-profile-section"
hx-target="#objectCreateModalTarget"
>
<div>
{% csrf_token %}
<div class="row" id="stageFormCreate">
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage" %} *</label>
{{form.stage}} {{form.stage.errors}}
<form hx-post="{% url 'rec-stage-create' %}" class="oh-general__tab-target oh-profile-section"
hx-target="#objectCreateModalTarget">
<div>
{% csrf_token %}
<div class="row" id="stageFormCreate">
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.stage.id_for_label}}">{{form.stage.label}} *</label>
{{form.stage}} {{form.stage.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.recruitment_id.id_for_label}}">{{form.recruitment_id.label}} *</label>
{{form.recruitment_id}} {{form.recruitment_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="stage_manager">
<label class="oh-label" for="{{form.stage_managers.id_for_label}}">{{form.stage_managers.label}} *</label>
{{form.stage_managers}} {{form.stage_managers.errors}}
<ul id="error-list" class="errorlist" style="display: none">
<li>{% trans "This field is requied" %}</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.stage_type.id_for_label}}">{{form.stage_type.label}} *</label>
{{form.stage_type}} {{form.stage_type.errors}}
</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Recruitment" %} *</label>
{{form.recruitment_id}} {{form.recruitment_id.errors}}
<div class="d-flex flex-row-reverse w-100 align-items-right mt-4">
<button type="submit" class="oh-btn oh-btn--secondary pl-5 pr-5">
{% trans "Save" %}
</button>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="stage_manager">
<label class="oh-label" for="">{% trans "Stage Managers" %} *</label>
{{form.stage_managers}} {{form.stage_managers.errors}}
<ul id="error-list" class="errorlist" style="display: none">
<li>{% trans "This field is requied" %}</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage Type" %} *</label>
{{form.stage_type}} {{form.stage_type.errors}}
</div>
</div>
</div>
<div class="d-flex flex-row-reverse w-100 align-items-right mt-4">
<button type="submit" class="oh-btn oh-btn--secondary pl-5 pr-5">
{% trans "Save" %}
</button>
</div>
</form>
</form>
<script>
$(document).ready(function () {
$("#stageFormCreate [name=stage_managers]").removeAttr("required");
});
</script>
</div>
<script>
$(document).ready(function () {
$("#stageFormCreate [name=stage_managers]").removeAttr("required");
});
</script>
</div>

View File

@@ -1,58 +1,57 @@
{% load i18n %} {% if messages %}
<div class="oh-alert-container">
{% for message in messages %}
<div class="oh-alert oh-alert--animated {{message.tags}}">{{ message }}</div>
{% endfor %}
</div>
{% load i18n %}
{% if messages %}
<div class="oh-alert-container">
{% for message in messages %}
<div class="oh-alert oh-alert--animated {{message.tags}}">{{ message }}</div>
{% endfor %}
</div>
{% endif %}
<div class="oh-modal__dialog-header">
<h5 class="oh-modal__dialog-title" id="updateStageModalLabel">
{% trans "Edit Stage" %}
</h5>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
<h5 class="oh-modal__dialog-title" id="updateStageModalLabel">
{% trans "Update" %} {{form.verbose_name}}
</h5>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
</div>
<div class="oh-modal__dialog-body">
<form
method="post"
class="oh-general__tab-target oh-profile-section"
hx-post="{% url 'rec-stage-update' form.instance.id %}"
hx-target="#objectUpdateModalTarget"
>
{% csrf_token %}
<div id="stageFormCreate">
{% csrf_token %}
<div class="row" id="stageFormUpdate">
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage" %} *</label>
{{form.stage}} {{form.stage.errors}}
<form method="post" class="oh-general__tab-target oh-profile-section"
hx-post="{% url 'rec-stage-update' form.instance.id %}" hx-target="#objectUpdateModalTarget">
{% csrf_token %}
<div id="stageFormCreate">
{% csrf_token %}
<div class="row" id="stageFormUpdate">
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.stage.id_for_label}}">{{form.stage.label}} *</label>
{{form.stage}} {{form.stage.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.recruitment_id.id_for_label}}">{{form.recruitment_id.label}}
*</label>
{{form.recruitment_id}} {{form.recruitment_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6" id="stage_manager">
<label class="oh-label" for="{{form.stage_managers.id_for_label}}">{{form.stage_managers.label}}
*</label>
{{form.stage_managers}} {{form.stage_managers.errors}}
<ul id="error-list" class="errorlist" style="display: none">
<li>{% trans "This field is requied" %}</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="{{form.stage_type.id_for_label}}">{{form.stage_type.label}} *</label>
{{form.stage_type}} {{form.stage_type.errors}}
</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Recruitment" %} *</label>
{{form.recruitment_id}} {{form.recruitment_id.errors}}
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage Managers" %} *</label>
{{form.stage_managers}} {{form.stage_managers.errors}}
<ul id="error-list" class="errorlist" style="display: none">
<li>{% trans "This field is requied" %}</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-6">
<label class="oh-label" for="">{% trans "Stage Type" %} *</label>
{{form.stage_type}} {{form.stage_type.errors}}
</div>
</div>
</div>
<div class="d-flex flex-row-reverse">
<input type="submit" value="Save" class="mt-4 oh-btn oh-btn--secondary" />
</div>
</form>
<div class="d-flex flex-row-reverse">
<input type="submit" value="Save" class="mt-4 oh-btn oh-btn--secondary" />
</div>
</form>
</div>
<script>
$(document).ready(function () {
$("#stageFormCreate [name=stage_managers]").removeAttr("required");
});
</script>
$(document).ready(function () {
$("#stageFormCreate [name=stage_managers]").removeAttr("required");
});
</script>

View File

@@ -43,8 +43,8 @@
{% if perms.recruitment.change_surveytemplate %}
<li class="oh-dropdown__item">
<a hx-get="{% url 'survey-template-create' %}?title={{grouper.grouper}}"
hx-target="#genericModalBody" data-toggle="oh-modal-toggle"
data-target="#genericModal" class="oh-dropdown__link">
hx-target="#templateModalBody" data-toggle="oh-modal-toggle"
data-target="#templateModal" class="oh-dropdown__link">
{% trans "Edit" %}
</a>
</li>