diff --git a/app/Helpers/PermissionHelper.php b/app/Helpers/PermissionHelper.php index a6d24dd5a..dc1150566 100644 --- a/app/Helpers/PermissionHelper.php +++ b/app/Helpers/PermissionHelper.php @@ -178,6 +178,14 @@ public static function permissions(Employee $loggedEmployee, Employee $employee) } $canEditContractInfoTab = $loggedEmployee->permission_level <= 200; + // can see the Edit contract info tab when editing the employee + $canSeeEditContractInformationTab = false; + if ($employee->status) { + if ($employee->status->type == EmployeeStatus::EXTERNAL && $canEditContractInfoTab) { + $canSeeEditContractInformationTab = true; + } + } + // can delete work log $canDeleteWorkLog = $loggedEmployee->permission_level <= 200; if ($loggedEmployee->id == $employee->id) { @@ -212,6 +220,7 @@ public static function permissions(Employee $loggedEmployee, Employee $employee) 'can_see_timesheets' => $canSeeTimesheets, 'can_update_avatar' => $canUpdateAvatar, 'can_edit_hired_at_information' => $canEditHiredAt, + 'can_see_edit_contract_information_tab' => $canSeeEditContractInformationTab, 'can_edit_contract_information' => $canEditContractInfoTab, 'can_delete_worklog' => $canDeleteWorkLog, ]; diff --git a/resources/js/Pages/Employee/Edit.vue b/resources/js/Pages/Employee/Edit.vue index a07a61ac8..243a43bde 100644 --- a/resources/js/Pages/Employee/Edit.vue +++ b/resources/js/Pages/Employee/Edit.vue @@ -42,7 +42,7 @@ {{ $t('employee.edit_information_menu') }} -
  • +
  • {{ $t('employee.edit_information_menu_contract') }} diff --git a/tests/Unit/Helpers/PermissionHelperTest.php b/tests/Unit/Helpers/PermissionHelperTest.php index 1f9548efe..45a8342d6 100644 --- a/tests/Unit/Helpers/PermissionHelperTest.php +++ b/tests/Unit/Helpers/PermissionHelperTest.php @@ -837,6 +837,56 @@ public function it_lets_the_employee_edit_contract_information(): void $this->assertFalse($permission['can_edit_contract_information']); } + /** @test */ + public function it_lets_the_employee_see_the_edit_contract_information_tab(): void + { + $administrator = Employee::factory()->asAdministrator()->create(); + $hr = $this->createHR(); + $employee = $this->createEmployee(); + $anotherEmployee = $this->createEmployee(); + + $permission = PermissionHelper::permissions($administrator, $administrator); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($administrator, $hr); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($administrator, $employee); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($hr, $hr); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($hr, $employee); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($employee, $employee); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($employee, $anotherEmployee); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $employee = $this->setEmployeeStatus($employee, EmployeeStatus::EXTERNAL); + + $permission = PermissionHelper::permissions($administrator, $administrator); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($administrator, $hr); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($administrator, $employee); + $this->assertTrue($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($hr, $hr); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($hr, $employee); + $this->assertTrue($permission['can_see_edit_contract_information_tab']); + + $permission = PermissionHelper::permissions($employee, $employee); + $this->assertFalse($permission['can_see_edit_contract_information_tab']); + } + /** @test */ public function it_lets_the_employee_delete_worklog(): void {