From 4f23570a7b835f66c1f0119f6850ad57692a5538 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Mon, 17 Feb 2025 18:59:34 +0800 Subject: [PATCH] 1. client & subsidiary (master, project) will be ordered by name 2. timesheet amendment - staff selection - sort by staffId 3. if the staff is not a teamlead but have authority to edit timesheet amendment, the staff will be not able to view/edit others. 4. update the checking of depart date --- .../data/entity/CustomerRepository.java | 2 +- .../modules/data/entity/StaffRepository.java | 2 + .../data/entity/SubsidiaryRepository.java | 2 +- .../modules/data/service/CustomerService.kt | 2 +- .../modules/data/service/StaffsService.kt | 7 ++- .../modules/data/service/SubsidiaryService.kt | 2 +- .../timesheet/service/TimesheetsService.kt | 44 +++++++++++-------- 7 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java index 58355b6..c1cb9a8 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java @@ -9,7 +9,7 @@ import org.springframework.data.repository.query.Param; import com.ffii.core.support.AbstractRepository; public interface CustomerRepository extends AbstractRepository { - List findAllByDeletedFalse(); + List findAllByDeletedFalseOrderByNameAsc(); Optional findByCode(@Param("code") String code); Optional findByName(@Param("name") String name); diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java index 2750a7f..8593e12 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java @@ -28,6 +28,8 @@ public interface StaffRepository extends AbstractRepository { Optional> findAllByDeletedFalse(); + Optional> findAllByIdInAndDeletedFalse(List id); + Optional findIdAndNameByUserIdAndDeletedFalse(Long id); } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java index 9edc95c..fe9e2ba 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Optional; public interface SubsidiaryRepository extends AbstractRepository { - List findAllByDeletedFalse(); + List findAllByDeletedFalseOrderByNameAsc(); List findAllByDeletedFalseAndIdIn(List id); diff --git a/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt b/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt index e0fee79..a0df3dc 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt @@ -23,7 +23,7 @@ open class CustomerService( ) : AbstractBaseEntityService(jdbcDao, customerRepository){ open fun allCustomers(): List { - return customerRepository.findAllByDeletedFalse() + return customerRepository.findAllByDeletedFalseOrderByNameAsc() } open fun allCustomerTypes(): List { diff --git a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt index 7132867..ba51d7d 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt @@ -97,8 +97,13 @@ open class StaffsService( } open fun findAll(): Optional> { - return staffRepository.findAllByDeletedFalse() + return staffRepository.findAllByDeletedFalse(); } + + open fun findAllByIdIn(ids: List): Optional> { + return staffRepository.findAllByIdInAndDeletedFalse(ids); + } + open fun getStaff(args: Map): Optional>? { val sql = StringBuilder("select" + " s.id as id," diff --git a/src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt b/src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt index 23f53c6..1b9d0d0 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt @@ -23,7 +23,7 @@ open class SubsidiaryService( private val subsidiaryContactService: SubsidiaryContactService, ) : AbstractBaseEntityService(jdbcDao, subsidiaryRepository) { open fun allSubsidiaries(): List { - return subsidiaryRepository.findAllByDeletedFalse() + return subsidiaryRepository.findAllByDeletedFalseOrderByNameAsc() } open fun allSubsidiaryTypes(): List { 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 5573028..8735d33 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,29 +129,37 @@ open class TimesheetsService( open fun getTeamMemberTimesheet(): Map { val authorities = staffsService.currentAuthorities() ?: return emptyMap() + if (authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { 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) { - staffsService.findAllByTeamId(myTeam.id!!).getOrDefault(emptyList()) - } else { - staffsService.findAll().getOrDefault(emptyList()) - } + 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 }.associate { member -> - Pair( - member.id!!, - TeamMemberTimeEntries( - staffId = member.staffId, - name = member.name, - timeEntries = transformToTimeEntryMap(timesheetRepository.findAllByStaff(member)), - employType = member.employType + 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 + ) ) - ) + } } - } else return emptyMap() + } + + return emptyMap() } private fun transformToTimeEntryMap(timesheets: List): Map> {