Quellcode durchsuchen

add authority to timesheet

tags/Baseline_30082024_BACKEND_UAT
cyril.tsui vor 1 Jahr
Ursprung
Commit
d905fb478d
5 geänderte Dateien mit 77 neuen und 38 gelöschten Zeilen
  1. +2
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java
  2. +3
    -0
      src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt
  3. +30
    -18
      src/main/java/com/ffii/tsms/modules/timesheet/service/LeaveService.kt
  4. +34
    -20
      src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt
  5. +8
    -0
      src/main/resources/db/changelog/changes/20240604_01_cyril/01_insert_authority.sql

+ 2
- 0
src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java Datei anzeigen

@@ -22,5 +22,7 @@ public interface StaffRepository extends AbstractRepository<Staff, Long> {
Optional<Staff> findByUserId(@Param("userId") Long userId);
Optional<List<Staff>> findAllByTeamIdAndDeletedFalse(Long id);

Optional<List<Staff>> findAllByDeletedFalse();

Optional<Staff> findIdAndNameByUserIdAndDeletedFalse(Long id);
}

+ 3
- 0
src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt Datei anzeigen

@@ -84,6 +84,9 @@ open class StaffsService(
return staffRepository.findAllByTeamIdAndDeletedFalse(id);
}

open fun findAll(): Optional<List<Staff>> {
return staffRepository.findAllByDeletedFalse()
}
open fun getStaff(args: Map<String, Any>): Optional<MutableMap<String, Any>>? {
val sql = StringBuilder("select"
+ " s.id as id,"


+ 30
- 18
src/main/java/com/ffii/tsms/modules/timesheet/service/LeaveService.kt Datei anzeigen

@@ -57,9 +57,15 @@ open class LeaveService(

@Transactional
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 memberStaff = staffsService.getStaff(staffId)

@@ -87,22 +93,28 @@ open class LeaveService(
}

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>> {


+ 34
- 20
src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt Datei anzeigen

@@ -1,6 +1,8 @@
package com.ffii.tsms.modules.timesheet.service

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.TeamService
import com.ffii.tsms.modules.project.entity.ProjectRepository
@@ -24,8 +26,8 @@ open class TimesheetsService(
private val projectRepository: ProjectRepository,
private val taskRepository: TaskRepository,
private val staffsService: StaffsService,
private val teamService: TeamService
) {
private val teamService: TeamService, private val staffRepository: StaffRepository
) {
@Transactional
open fun saveTimesheet(recordTimeEntry: Map<LocalDate, List<TimeEntry>>): Map<String, List<TimeEntry>> {
// Need to be associated with a staff
@@ -59,9 +61,14 @@ open class TimesheetsService(

@Transactional
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)

@@ -101,22 +108,29 @@ open class TimesheetsService(
}

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>> {


+ 8
- 0
src/main/resources/db/changelog/changes/20240604_01_cyril/01_insert_authority.sql Datei anzeigen

@@ -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);

Laden…
Abbrechen
Speichern