diff --git a/biometric/cbv/biometric.py b/biometric/cbv/biometric.py index f2c7ea549..f7cabd630 100644 --- a/biometric/cbv/biometric.py +++ b/biometric/cbv/biometric.py @@ -85,6 +85,16 @@ class BiometricCardView(HorillaCardView): data-target="#genericModal" """, }, + { + "action": "Fetch Logs", + "attrs": """ + hx-get="{get_fetch_url}" + class="oh-dropdown__link" + data-toggle="oh-modal-toggle" + data-target="#BiometricDeviceTestModal" + hx-target="#BiometricDeviceTestFormTarget" + """, + }, { "action": "archive_status", "attrs": """ diff --git a/biometric/models.py b/biometric/models.py index 41476695f..28f4d5e59 100644 --- a/biometric/models.py +++ b/biometric/models.py @@ -225,6 +225,13 @@ class BiometricDevices(HorillaModel): url = reverse_lazy("biometric-device-archive", kwargs={"device_id": self.pk}) return url + def get_fetch_url(self): + """ + This method to get Fetch Logs url + """ + url = reverse_lazy("biometric-device-fetch-logs", kwargs={"device_id": self.pk}) + return url + def get_delete_url(self): """ This method to get delete url diff --git a/horilla_automations/signals.py b/horilla_automations/signals.py index 398084681..0d4f11678 100644 --- a/horilla_automations/signals.py +++ b/horilla_automations/signals.py @@ -414,7 +414,7 @@ def send_mail(request, automation, instance): if request and hasattr(request, "user") and hasattr(request.user, "employee_get"): try: user = request.user.employee_get - display_email_name = f"{user.get_full_name()} <{user.email}>" + display_email_name = f"{user.get_full_name()} <{user.get_mail()}>" # 983 from_email = display_email_name reply_to = [display_email_name] except Exception as e: diff --git a/recruitment/cbv/candidate_profile.py b/recruitment/cbv/candidate_profile.py index 4817e6bfe..2158fcd11 100644 --- a/recruitment/cbv/candidate_profile.py +++ b/recruitment/cbv/candidate_profile.py @@ -11,6 +11,7 @@ from horilla_views.cbv_methods import login_required from horilla_views.generic.cbv.views import HorillaListView, HorillaProfileView from onboarding.filters import CandidateTaskFilter from onboarding.models import CandidateTask +from recruitment.cbv import skill_zone from recruitment.cbv.candidate_mail_log import CandidateMailLogTabList from recruitment.cbv_decorators import all_manager_can_enter from recruitment.filters import CandidateFilter @@ -162,6 +163,11 @@ CandidateProfileView.add_tab( "view": views.candidate_interview_tab, "accessibility": "recruitment.cbv.accessibility.empl_scheduled_interview_accessibility", }, + { + "title": "Skill Zone", + "view": skill_zone.SkillZoneProfileListView.as_view(), + "accessibility": "recruitment.cbv.accessibility.if_manager_accessibility", + }, ] ) diff --git a/recruitment/cbv/skill_zone.py b/recruitment/cbv/skill_zone.py index b0cf2dfac..b9d8cb4b7 100644 --- a/recruitment/cbv/skill_zone.py +++ b/recruitment/cbv/skill_zone.py @@ -8,10 +8,10 @@ from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from horilla_views.cbv_methods import login_required -from horilla_views.generic.cbv.views import HorillaFormView +from horilla_views.generic.cbv.views import HorillaFormView, HorillaListView from recruitment.cbv_decorators import manager_can_enter from recruitment.forms import SkillZoneCandidateForm, SkillZoneCreateForm -from recruitment.models import SkillZone, SkillZoneCandidate +from recruitment.models import Candidate, SkillZone, SkillZoneCandidate @method_decorator(login_required, name="dispatch") @@ -62,6 +62,11 @@ class SkillZoneCandidateFormView(HorillaFormView): context = super().get_context_data(**kwargs) id = self.kwargs.get("sz_id") self.form.fields["skill_zone_id"].initial = id + if cand_id := self.request.GET.get("candidate"): + self.form.fields["candidate_id"].queryset = self.form.fields[ + "candidate_id" + ].queryset.filter(id=cand_id) + # if self.form.instance.pk: # self.form_class.verbose_name = _("Update Skill Zone") return context @@ -76,3 +81,36 @@ class SkillZoneCandidateFormView(HorillaFormView): messages.success(self.request, _(message)) return self.HttpResponse("") return super().form_valid(form) + + +@method_decorator(login_required, name="dispatch") +@method_decorator( + manager_can_enter("recruitment.add_skillzonecandidate"), name="dispatch" +) +class SkillZoneProfileListView(HorillaListView): + """ + Skill Zone Candidate profile List View + """ + + model = SkillZoneCandidate + show_filter_tags = False + filter_selected = False + bulk_select_option = False + template_name = "skill_zone/candidate_profile_tab.html" + show_toggle_form = False + + columns = [ + (_("Title"), "skill_zone_id__title"), + "added_on", + "reason", + ] + + def get_queryset(self): + qureryset = super().get_queryset() + cand_id = self.kwargs.get("pk") + return qureryset.filter(candidate_id=cand_id) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["candidate"] = Candidate.objects.get(id=self.kwargs.get("pk")) + return context diff --git a/recruitment/templates/skill_zone/candidate_profile_tab.html b/recruitment/templates/skill_zone/candidate_profile_tab.html new file mode 100644 index 000000000..d7e7fc96d --- /dev/null +++ b/recruitment/templates/skill_zone/candidate_profile_tab.html @@ -0,0 +1,12 @@ +{% load i18n %} + +
+ {{candidate}}{% trans "'s Scheduled Interviews" %} + + +
+ +{% include "generic/horilla_list_table.html" %} \ No newline at end of file