diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt index 31ca9b8..7f3927a 100644 --- a/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt @@ -3,10 +3,12 @@ package com.ffii.tsms.modules.project.entity; import com.ffii.core.support.AbstractRepository import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo +import org.springframework.data.jpa.repository.Query import java.time.LocalDate interface StaffAllocationRepository : AbstractRepository { - fun findAssignedProjectsByStaff(staff: Staff): List + @Query("SELECT sa.project FROM StaffAllocation sa WHERE sa.staff = ?1 AND sa.project.status = 'On-going'") + fun findOnGoingAssignedProjectsByStaff(staff: Staff): List fun findByProject(project: Project): List } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/service/ProjectsService.kt b/src/main/java/com/ffii/tsms/modules/project/service/ProjectsService.kt index 16012b6..dfb9bbe 100644 --- a/src/main/java/com/ffii/tsms/modules/project/service/ProjectsService.kt +++ b/src/main/java/com/ffii/tsms/modules/project/service/ProjectsService.kt @@ -75,29 +75,27 @@ open class ProjectsService( open fun allAssignedProjects(): List { return SecurityUtils.getUser().getOrNull()?.let { user -> staffRepository.findByUserId(user.id).getOrNull()?.let { staff -> - staffAllocationRepository.findAssignedProjectsByStaff(staff).mapNotNull { - it.project?.let { project -> - val timesheetHours = timesheetRepository.totalHoursConsumedByProject(project) - - AssignedProject(id = project.id!!, - code = project.code!!, - name = project.name!!, - tasks = projectTaskRepository.findAllByProject(project).mapNotNull { pt -> pt.task }, - milestones = milestoneRepository.findAllByProject(project) - .filter { milestone -> milestone.taskGroup?.id != null } - .associateBy { milestone -> milestone.taskGroup!!.id!! } - .mapValues { (_, milestone) -> - MilestoneInfo( - startDate = milestone.startDate?.format(DateTimeFormatter.ISO_LOCAL_DATE), - endDate = milestone.endDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) - ) - }, - hoursAllocated = project.totalManhour ?: 0.0, - hoursAllocatedOther = 0.0, - hoursSpent = timesheetHours.normalConsumed, - hoursSpentOther = timesheetHours.otConsumed - ) - } + staffAllocationRepository.findOnGoingAssignedProjectsByStaff(staff).map { project -> + val timesheetHours = timesheetRepository.totalHoursConsumedByProject(project) + + AssignedProject(id = project.id!!, + code = project.code!!, + name = project.name!!, + tasks = projectTaskRepository.findAllByProject(project).mapNotNull { pt -> pt.task }, + milestones = milestoneRepository.findAllByProject(project) + .filter { milestone -> milestone.taskGroup?.id != null } + .associateBy { milestone -> milestone.taskGroup!!.id!! } + .mapValues { (_, milestone) -> + MilestoneInfo( + startDate = milestone.startDate?.format(DateTimeFormatter.ISO_LOCAL_DATE), + endDate = milestone.endDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) + ) + }, + hoursAllocated = project.totalManhour ?: 0.0, + hoursAllocatedOther = 0.0, + hoursSpent = timesheetHours.normalConsumed, + hoursSpentOther = timesheetHours.otConsumed + ) } } } ?: emptyList() @@ -108,6 +106,7 @@ open class ProjectsService( ProjectWithTasks(id = project.id!!, code = project.code!!, name = project.name!!, + status = project.status, tasks = projectTaskRepository.findAllByProject(project).mapNotNull { pt -> pt.task }, milestones = milestoneRepository.findAllByProject(project) .filter { milestone -> milestone.taskGroup?.id != null } diff --git a/src/main/java/com/ffii/tsms/modules/project/web/models/ProjectWithTasks.kt b/src/main/java/com/ffii/tsms/modules/project/web/models/ProjectWithTasks.kt index 83b9922..8d0bce7 100644 --- a/src/main/java/com/ffii/tsms/modules/project/web/models/ProjectWithTasks.kt +++ b/src/main/java/com/ffii/tsms/modules/project/web/models/ProjectWithTasks.kt @@ -5,6 +5,7 @@ import com.ffii.tsms.modules.project.entity.Task data class ProjectWithTasks( val id: Long, val code: String, + val status: String?, val name: String, val tasks: List, val milestones: Map