From ff507dd213868ee8d57fa721fcdbc4ecda3d2089 Mon Sep 17 00:00:00 2001 From: Horilla Date: Mon, 17 Nov 2025 16:55:36 +0530 Subject: [PATCH] Merge master --- onboarding/cbv/onboarding_candidates.py | 12 +++++++++--- payroll/views/component_views.py | 11 ++++++++++- recruitment/cbv/candidate_reject_reason.py | 1 + recruitment/cbv/candidates.py | 8 ++++++++ recruitment/cbv/recruitment_view.py | 2 ++ recruitment/cbv/stage_view.py | 10 ++++++++++ templates/settings.html | 6 +----- 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/onboarding/cbv/onboarding_candidates.py b/onboarding/cbv/onboarding_candidates.py index 77218e361..2ff80ac55 100644 --- a/onboarding/cbv/onboarding_candidates.py +++ b/onboarding/cbv/onboarding_candidates.py @@ -21,7 +21,9 @@ from recruitment.models import Candidate @method_decorator(login_required, name="dispatch") -@method_decorator(permission_required(perm="candidate.view_candidate"), name="dispatch") +@method_decorator( + permission_required(perm="recruitment.view_candidate"), name="dispatch" +) class OnboardingCandidatesView(TemplateView): """ onboarding candidates view @@ -43,7 +45,9 @@ class OnboardingCandidatesView(TemplateView): @method_decorator(login_required, name="dispatch") -@method_decorator(permission_required(perm="candidate.view_candidate"), name="dispatch") +@method_decorator( + permission_required(perm="recruitment.view_candidate"), name="dispatch" +) class OnboardingCandidatesList(HorillaListView): """ List view @@ -157,7 +161,9 @@ class OnboardingCandidatesList(HorillaListView): @method_decorator(login_required, name="dispatch") -@method_decorator(permission_required(perm="candidate.view_candidate"), name="dispatch") +@method_decorator( + permission_required(perm="recruitment.view_candidate"), name="dispatch" +) class OnboardingCandidatesNav(HorillaNavView): """ Nav bar diff --git a/payroll/views/component_views.py b/payroll/views/component_views.py index 5c02db83e..7e399a98e 100644 --- a/payroll/views/component_views.py +++ b/payroll/views/component_views.py @@ -814,12 +814,21 @@ def generate_payslip(request): end_date = form.cleaned_data["end_date"] group_name = form.cleaned_data["group_name"] + emp_count = employees.count() for employee in employees: contract = Contract.objects.filter( employee_id=employee, contract_status="active" ).first() if start_date < contract.contract_start_date: start_date = contract.contract_start_date + + if end_date < start_date: + messages.error( + request, _(f"{employee}'s contract has not started yet.") + ) + emp_count -= 1 + continue + payslip = payroll_calculation(employee, start_date, end_date) payslips.append(payslip) json_data.append(payslip["json_data"]) @@ -854,7 +863,7 @@ def generate_payslip(request): ), icon="close", ) - messages.success(request, f"{employees.count()} payslip saved as draft") + messages.success(request, f"{emp_count} payslip saved as draft") return redirect( f"/payroll/view-payslip?group_by=group_name&active_group={group_name}" ) diff --git a/recruitment/cbv/candidate_reject_reason.py b/recruitment/cbv/candidate_reject_reason.py index 671629269..0870576a5 100644 --- a/recruitment/cbv/candidate_reject_reason.py +++ b/recruitment/cbv/candidate_reject_reason.py @@ -144,6 +144,7 @@ class RejectReasonFormView(HorillaFormView): return super().form_valid(form) +@method_decorator(login_required, name="dispatch") class DynamicRejectReasonFormView(HorillaFormView): model = RejectReason diff --git a/recruitment/cbv/candidates.py b/recruitment/cbv/candidates.py index 96cb35239..98f7489db 100644 --- a/recruitment/cbv/candidates.py +++ b/recruitment/cbv/candidates.py @@ -910,6 +910,10 @@ class CandidateDetail(HorillaDetailedView): ) +@method_decorator(login_required, name="dispatch") +@method_decorator( + all_manager_can_enter(perm="recruitment.change_candidate"), name="dispatch" +) class ToSkillZoneFormView(HorillaFormView): """ Form View @@ -980,6 +984,10 @@ class ToSkillZoneFormView(HorillaFormView): return super().form_valid(form) +@method_decorator(login_required, name="dispatch") +@method_decorator( + all_manager_can_enter(perm="recruitment.change_candidate"), name="dispatch" +) class RejectReasonFormView(HorillaFormView): """ Form View diff --git a/recruitment/cbv/recruitment_view.py b/recruitment/cbv/recruitment_view.py index a7419d360..be45f7b3c 100644 --- a/recruitment/cbv/recruitment_view.py +++ b/recruitment/cbv/recruitment_view.py @@ -210,6 +210,7 @@ class RecruitmentCreationFormExtended(RecruitmentCreationForm): } +@method_decorator(login_required, name="dispatch") class RecruitmentNewSkillForm(HorillaFormView): """ form view for add new skill @@ -287,6 +288,7 @@ class RecruitmentForm(HorillaFormView): return super().form_valid(form) +@method_decorator(login_required, name="dispatch") class AddCandidateFormView(HorillaFormView): """ form view for add candidate diff --git a/recruitment/cbv/stage_view.py b/recruitment/cbv/stage_view.py index 69dd7cec1..ab13fb14e 100644 --- a/recruitment/cbv/stage_view.py +++ b/recruitment/cbv/stage_view.py @@ -38,6 +38,8 @@ class StageView(TemplateView): template_name = "cbv/stages/stages.html" +@method_decorator(login_required, name="dispatch") +@method_decorator(permission_required(perm="recruitment.view_stage"), name="dispatch") class StageList(HorillaListView): """ List view of stage @@ -143,6 +145,8 @@ class StageList(HorillaListView): } +@method_decorator(login_required, name="dispatch") +@method_decorator(permission_required(perm="recruitment.view_stage"), name="dispatch") class StageNav(HorillaNavView): """ For nav bar @@ -169,6 +173,8 @@ class StageNav(HorillaNavView): group_by_fields = [("recruitment_id", "Recruitment")] +@method_decorator(login_required, name="dispatch") +@method_decorator(permission_required(perm="recruitment.add_stage"), name="dispatch") class StageFormView(HorillaFormView): """ Form View @@ -247,6 +253,8 @@ class StageFormView(HorillaFormView): return super().form_valid(form) +@method_decorator(login_required, name="dispatch") +@method_decorator(permission_required(perm="recruitment.change_stage"), name="dispatch") class StageDuplicateForm(HorillaFormView): """ Duplicate form view @@ -292,6 +300,8 @@ class StageDuplicateForm(HorillaFormView): return super().form_valid(form) +@method_decorator(login_required, name="dispatch") +@method_decorator(permission_required(perm="recruitment.view_stage"), name="dispatch") class StageDetailView(HorillaDetailedView): """ detail view of page diff --git a/templates/settings.html b/templates/settings.html index ee13d1d90..3e69faffc 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -322,12 +322,10 @@
  • - {% if employee_section %}
    {% trans "Employee" %}
    - {% endif %}
    @@ -417,9 +415,7 @@
  • - {% if employee_section %} -
    - {% endif %} +
    {% if "attendance"|app_installed %}