From c8ad56f707fe55390e206c89e2b5314eaf31974f Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Tue, 18 Feb 2025 16:24:40 +0800 Subject: [PATCH] 1. add authority for normal staff to view/edit timesheet amendment --- .../modules/timesheet/service/LeaveService.kt | 12 +++-- .../timesheet/service/TimesheetsService.kt | 47 +++++++++---------- .../20250218_01_cyril/01_add_authority.sql | 5 ++ 3 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 src/main/resources/db/changelog/changes/20250218_01_cyril/01_add_authority.sql diff --git a/src/main/java/com/ffii/tsms/modules/timesheet/service/LeaveService.kt b/src/main/java/com/ffii/tsms/modules/timesheet/service/LeaveService.kt index 0d3232d..d0b9430 100644 --- a/src/main/java/com/ffii/tsms/modules/timesheet/service/LeaveService.kt +++ b/src/main/java/com/ffii/tsms/modules/timesheet/service/LeaveService.kt @@ -101,18 +101,24 @@ open class LeaveService( open fun getTeamMemberLeave(): Map { val authorities = staffsService.currentAuthorities() ?: return emptyMap() - if (authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { + val authMaintainTimesheet = authorities.any { it.authority.equals("MAINTAIN_TIMESHEET") } + val authMaintainTimesheetSelf = authorities.any { it.authority.equals("MAINTAIN_TIMESHEET_SELF") } + +// if (authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { + if (authMaintainTimesheet || authMaintainTimesheetSelf) { val currentStaff = staffsService.currentStaff() // Get team where current staff is team lead val myTeam = if (currentStaff != null) teamService.getMyTeamForStaff(currentStaff) else null - val teamMembers = if (myTeam != null) { + val teamMembers = if (myTeam != null && authMaintainTimesheet) { staffsService.findAllByTeamId(myTeam.id!!).getOrDefault(emptyList()) + } else if (authMaintainTimesheetSelf) { + staffsService.findAllByIdIn(listOf(currentStaff?.id!!)).getOrDefault(emptyList()) } else { staffsService.findAll().getOrDefault(emptyList()) } - return teamMembers.filter { it.departDate == null }.associate { member -> + return teamMembers.filter { it.departDate == null || it.departDate > LocalDate.now() }.sortedBy { it.staffId }.associate { member -> Pair( member.id!!, TeamMemberLeaveEntries( diff --git a/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt b/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt index 8735d33..f8c4949 100644 --- a/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt +++ b/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt @@ -129,33 +129,32 @@ open class TimesheetsService( open fun getTeamMemberTimesheet(): Map { val authorities = staffsService.currentAuthorities() ?: return emptyMap() - - if (authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { + val authMaintainTimesheet = authorities.any { it.authority.equals("MAINTAIN_TIMESHEET") } + val authMaintainTimesheetSelf = authorities.any { it.authority.equals("MAINTAIN_TIMESHEET_SELF") } +// if (authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { + if (authMaintainTimesheet || authMaintainTimesheetSelf) { val currentStaff = staffsService.currentStaff() - if (currentStaff != null) { - val isTeamLead = currentStaff.team.staff.id?.equals(currentStaff.id) - // Get team where current staff is team lead - - val myTeam = teamService.getMyTeamForStaff(currentStaff) - val teamMembers = if (myTeam != null && isTeamLead == true) { - staffsService.findAllByTeamId(myTeam.id!!).getOrDefault(emptyList()) - } else if (isTeamLead != true) { - staffsService.findAllByIdIn(listOf(currentStaff.id!!)).getOrDefault(emptyList()) - } else { - staffsService.findAll().getOrDefault(emptyList()) - } - return teamMembers.filter { it.departDate == null || it.departDate > LocalDate.now() }.sortedBy { it.staffId }.associate { member -> - Pair( - member.id!!, - TeamMemberTimeEntries( - staffId = member.staffId, - name = member.name, - timeEntries = transformToTimeEntryMap(timesheetRepository.findAllByStaff(member)), - employType = member.employType - ) + // Get team where current staff is team lead + val myTeam = if (currentStaff != null) teamService.getMyTeamForStaff(currentStaff) else null + val teamMembers = if (myTeam != null && authMaintainTimesheet) { + staffsService.findAllByTeamId(myTeam.id!!).getOrDefault(emptyList()) + } else if (authMaintainTimesheetSelf) { + staffsService.findAllByIdIn(listOf(currentStaff?.id!!)).getOrDefault(emptyList()) + } else { + staffsService.findAll().getOrDefault(emptyList()) + } + + return teamMembers.filter { it.departDate == null || it.departDate > LocalDate.now() }.sortedBy { it.staffId }.associate { member -> + Pair( + member.id!!, + TeamMemberTimeEntries( + staffId = member.staffId, + name = member.name, + timeEntries = transformToTimeEntryMap(timesheetRepository.findAllByStaff(member)), + employType = member.employType ) - } + ) } } diff --git a/src/main/resources/db/changelog/changes/20250218_01_cyril/01_add_authority.sql b/src/main/resources/db/changelog/changes/20250218_01_cyril/01_add_authority.sql new file mode 100644 index 0000000..c7b8dfa --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250218_01_cyril/01_add_authority.sql @@ -0,0 +1,5 @@ +-- liquibase formatted sql +-- changeset cyril:add_authority + +INSERT INTO `authority` (`authority`, `name`) VALUES + ('MAINTAIN_TIMESHEET_SELF', 'Maintain Self Timesheet'); \ No newline at end of file