@@ -22,5 +22,7 @@ public interface StaffRepository extends AbstractRepository<Staff, Long> { | |||||
Optional<Staff> findByUserId(@Param("userId") Long userId); | Optional<Staff> findByUserId(@Param("userId") Long userId); | ||||
Optional<List<Staff>> findAllByTeamIdAndDeletedFalse(Long id); | Optional<List<Staff>> findAllByTeamIdAndDeletedFalse(Long id); | ||||
Optional<List<Staff>> findAllByDeletedFalse(); | |||||
Optional<Staff> findIdAndNameByUserIdAndDeletedFalse(Long id); | Optional<Staff> findIdAndNameByUserIdAndDeletedFalse(Long id); | ||||
} | } |
@@ -84,6 +84,9 @@ open class StaffsService( | |||||
return staffRepository.findAllByTeamIdAndDeletedFalse(id); | return staffRepository.findAllByTeamIdAndDeletedFalse(id); | ||||
} | } | ||||
open fun findAll(): Optional<List<Staff>> { | |||||
return staffRepository.findAllByDeletedFalse() | |||||
} | |||||
open fun getStaff(args: Map<String, Any>): Optional<MutableMap<String, Any>>? { | open fun getStaff(args: Map<String, Any>): Optional<MutableMap<String, Any>>? { | ||||
val sql = StringBuilder("select" | val sql = StringBuilder("select" | ||||
+ " s.id as id," | + " s.id as id," | ||||
@@ -57,9 +57,15 @@ open class LeaveService( | |||||
@Transactional | @Transactional | ||||
open fun saveMemberLeaveEntry(staffId: Long, entry: LeaveEntry, recordDate: LocalDate?): Map<String, List<LeaveEntry>> { | open fun saveMemberLeaveEntry(staffId: Long, entry: LeaveEntry, recordDate: LocalDate?): Map<String, List<LeaveEntry>> { | ||||
val currentStaff = staffsService.currentStaff() ?: throw BadRequestException() | |||||
// Make sure current staff is a team lead | |||||
teamService.getMyTeamForStaff(currentStaff) ?: throw BadRequestException() | |||||
val authorities = staffsService.currentAuthorities() ?: throw BadRequestException() | |||||
if (!authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { | |||||
throw BadRequestException() | |||||
} | |||||
// val currentStaff = staffsService.currentStaff() ?: throw BadRequestException() | |||||
// // Make sure current staff is a team lead | |||||
// teamService.getMyTeamForStaff(currentStaff) ?: throw BadRequestException() | |||||
val leaveTypesMap = getLeaveTypes().associateBy { it.id } | val leaveTypesMap = getLeaveTypes().associateBy { it.id } | ||||
val memberStaff = staffsService.getStaff(staffId) | val memberStaff = staffsService.getStaff(staffId) | ||||
@@ -87,22 +93,28 @@ open class LeaveService( | |||||
} | } | ||||
open fun getTeamMemberLeave(): Map<Long, TeamMemberLeaveEntries> { | open fun getTeamMemberLeave(): Map<Long, TeamMemberLeaveEntries> { | ||||
val currentStaff = staffsService.currentStaff() ?: return emptyMap() | |||||
// Get team where current staff is team lead | |||||
val myTeam = teamService.getMyTeamForStaff(currentStaff) ?: return emptyMap() | |||||
val teamMembers = staffsService.findAllByTeamId(myTeam.id!!).getOrDefault(emptyList()) | |||||
return teamMembers.associate { member -> | |||||
Pair( | |||||
member.id!!, | |||||
TeamMemberLeaveEntries( | |||||
staffId = member.staffId, | |||||
name = member.name, | |||||
leaveEntries = transformToLeaveEntryMap(leaveRepository.findAllByStaff(member)) | |||||
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()) | |||||
} | |||||
return teamMembers.associate { member -> | |||||
Pair( | |||||
member.id!!, | |||||
TeamMemberLeaveEntries( | |||||
staffId = member.staffId, | |||||
name = member.name, | |||||
leaveEntries = transformToLeaveEntryMap(leaveRepository.findAllByStaff(member)) | |||||
) | |||||
) | ) | ||||
) | |||||
} | |||||
} | |||||
} else return emptyMap() | |||||
} | } | ||||
private fun transformToLeaveEntryMap(leaves: List<Leave>): Map<String, List<LeaveEntry>> { | private fun transformToLeaveEntryMap(leaves: List<Leave>): Map<String, List<LeaveEntry>> { | ||||
@@ -1,6 +1,8 @@ | |||||
package com.ffii.tsms.modules.timesheet.service | package com.ffii.tsms.modules.timesheet.service | ||||
import com.ffii.core.exception.BadRequestException | import com.ffii.core.exception.BadRequestException | ||||
import com.ffii.tsms.modules.data.entity.Staff | |||||
import com.ffii.tsms.modules.data.entity.StaffRepository | |||||
import com.ffii.tsms.modules.data.service.StaffsService | import com.ffii.tsms.modules.data.service.StaffsService | ||||
import com.ffii.tsms.modules.data.service.TeamService | import com.ffii.tsms.modules.data.service.TeamService | ||||
import com.ffii.tsms.modules.project.entity.ProjectRepository | import com.ffii.tsms.modules.project.entity.ProjectRepository | ||||
@@ -24,8 +26,8 @@ open class TimesheetsService( | |||||
private val projectRepository: ProjectRepository, | private val projectRepository: ProjectRepository, | ||||
private val taskRepository: TaskRepository, | private val taskRepository: TaskRepository, | ||||
private val staffsService: StaffsService, | private val staffsService: StaffsService, | ||||
private val teamService: TeamService | |||||
) { | |||||
private val teamService: TeamService, private val staffRepository: StaffRepository | |||||
) { | |||||
@Transactional | @Transactional | ||||
open fun saveTimesheet(recordTimeEntry: Map<LocalDate, List<TimeEntry>>): Map<String, List<TimeEntry>> { | open fun saveTimesheet(recordTimeEntry: Map<LocalDate, List<TimeEntry>>): Map<String, List<TimeEntry>> { | ||||
// Need to be associated with a staff | // Need to be associated with a staff | ||||
@@ -59,9 +61,14 @@ open class TimesheetsService( | |||||
@Transactional | @Transactional | ||||
open fun saveMemberTimeEntry(staffId: Long, entry: TimeEntry, recordDate: LocalDate?): Map<String, List<TimeEntry>> { | open fun saveMemberTimeEntry(staffId: Long, entry: TimeEntry, recordDate: LocalDate?): Map<String, List<TimeEntry>> { | ||||
val currentStaff = staffsService.currentStaff() ?: throw BadRequestException() | |||||
// Make sure current staff is a team lead | |||||
teamService.getMyTeamForStaff(currentStaff) ?: throw BadRequestException() | |||||
val authorities = staffsService.currentAuthorities() ?: throw BadRequestException() | |||||
if (!authorities.stream().anyMatch { it.authority.equals("MAINTAIN_TIMESHEET") }) { | |||||
throw BadRequestException() | |||||
} | |||||
// val currentStaff = staffsService.currentStaff() ?: throw BadRequestException() | |||||
// // Make sure current staff is a team lead | |||||
// teamService.getMyTeamForStaff(currentStaff) ?: throw BadRequestException() | |||||
val memberStaff = staffsService.getStaff(staffId) | val memberStaff = staffsService.getStaff(staffId) | ||||
@@ -101,22 +108,29 @@ open class TimesheetsService( | |||||
} | } | ||||
open fun getTeamMemberTimesheet(): Map<Long, TeamMemberTimeEntries> { | open fun getTeamMemberTimesheet(): Map<Long, TeamMemberTimeEntries> { | ||||
val currentStaff = staffsService.currentStaff() ?: return emptyMap() | |||||
// Get team where current staff is team lead | |||||
val myTeam = teamService.getMyTeamForStaff(currentStaff) ?: return emptyMap() | |||||
val teamMembers = staffsService.findAllByTeamId(myTeam.id!!).getOrDefault(emptyList()) | |||||
return teamMembers.associate { member -> | |||||
Pair( | |||||
member.id!!, | |||||
TeamMemberTimeEntries( | |||||
staffId = member.staffId, | |||||
name = member.name, | |||||
timeEntries = transformToTimeEntryMap(timesheetRepository.findAllByStaff(member)) | |||||
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()) | |||||
} | |||||
return teamMembers.associate { member -> | |||||
Pair( | |||||
member.id!!, | |||||
TeamMemberTimeEntries( | |||||
staffId = member.staffId, | |||||
name = member.name, | |||||
timeEntries = transformToTimeEntryMap(timesheetRepository.findAllByStaff(member)) | |||||
) | |||||
) | ) | ||||
) | |||||
} | |||||
} | |||||
} else return emptyMap() | |||||
} | } | ||||
private fun transformToTimeEntryMap(timesheets: List<Timesheet>): Map<String, List<TimeEntry>> { | private fun transformToTimeEntryMap(timesheets: List<Timesheet>): Map<String, List<TimeEntry>> { | ||||
@@ -0,0 +1,8 @@ | |||||
-- liquibase formatted sql | |||||
-- changeset cyril:authority, user_authority | |||||
INSERT INTO authority (authority,name) | |||||
VALUES ('MAINTAIN_TIMESHEET_FAST_TIME_ENTRY','enter fast time entry in timesheet'); | |||||
INSERT INTO user_authority (userId,authId) | |||||
VALUES (1,20); |