@@ -88,6 +88,24 @@ open class ProjectsService( | |||||
} ?: emptyList() | } ?: emptyList() | ||||
} | } | ||||
open fun allProjectWithTasks(): List<ProjectWithTasks> { | |||||
return projectRepository.findAll().map { project -> | |||||
ProjectWithTasks( | |||||
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) | |||||
) } | |||||
) | |||||
} | |||||
} | |||||
open fun allProjectCategories(): List<ProjectCategory> { | open fun allProjectCategories(): List<ProjectCategory> { | ||||
return projectCategoryRepository.findAll() | return projectCategoryRepository.findAll() | ||||
} | } | ||||
@@ -5,10 +5,7 @@ import com.ffii.tsms.modules.data.entity.* | |||||
import com.ffii.tsms.modules.project.entity.projections.ProjectSearchInfo | import com.ffii.tsms.modules.project.entity.projections.ProjectSearchInfo | ||||
import com.ffii.tsms.modules.project.entity.ProjectCategory | import com.ffii.tsms.modules.project.entity.ProjectCategory | ||||
import com.ffii.tsms.modules.project.service.ProjectsService | import com.ffii.tsms.modules.project.service.ProjectsService | ||||
import com.ffii.tsms.modules.project.web.models.AssignedProject | |||||
import com.ffii.tsms.modules.project.web.models.EditProjectDetails | |||||
import com.ffii.tsms.modules.project.web.models.NewProjectRequest | |||||
import com.ffii.tsms.modules.project.web.models.NewProjectResponse | |||||
import com.ffii.tsms.modules.project.web.models.* | |||||
import jakarta.validation.Valid | import jakarta.validation.Valid | ||||
import org.springframework.http.HttpStatus | import org.springframework.http.HttpStatus | ||||
import org.springframework.web.bind.annotation.* | import org.springframework.web.bind.annotation.* | ||||
@@ -32,6 +29,11 @@ class ProjectsController(private val projectsService: ProjectsService) { | |||||
return projectsService.allAssignedProjects() | return projectsService.allAssignedProjects() | ||||
} | } | ||||
@GetMapping("/allProjectWithTasks") | |||||
fun allProjectsWithTasks(): List<ProjectWithTasks> { | |||||
return projectsService.allProjectWithTasks() | |||||
} | |||||
@GetMapping("/categories") | @GetMapping("/categories") | ||||
fun projectCategories(): List<ProjectCategory> { | fun projectCategories(): List<ProjectCategory> { | ||||
return projectsService.allProjectCategories() | return projectsService.allProjectCategories() | ||||
@@ -0,0 +1,11 @@ | |||||
package com.ffii.tsms.modules.project.web.models | |||||
import com.ffii.tsms.modules.project.entity.Task | |||||
data class ProjectWithTasks( | |||||
val id: Long, | |||||
val code: String, | |||||
val name: String, | |||||
val tasks: List<Task>, | |||||
val milestones: Map<Long, MilestoneInfo> | |||||
) |
@@ -41,6 +41,7 @@ open class LeaveService( | |||||
this.recordDate = entryDate | this.recordDate = entryDate | ||||
this.leaveType = leaveTypesMap[leaveEntry.leaveTypeId] | this.leaveType = leaveTypesMap[leaveEntry.leaveTypeId] | ||||
this.leaveHours = leaveEntry.inputHours | this.leaveHours = leaveEntry.inputHours | ||||
this.remark = leaveEntry.remark | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -57,7 +58,8 @@ open class LeaveService( | |||||
LeaveEntry( | LeaveEntry( | ||||
id = leave.id!!, | id = leave.id!!, | ||||
inputHours = leave.leaveHours ?: 0.0, | inputHours = leave.leaveHours ?: 0.0, | ||||
leaveTypeId = leave.leaveType!!.id | |||||
leaveTypeId = leave.leaveType!!.id, | |||||
remark = leave.remark | |||||
) | ) | ||||
} } | } } | ||||
} | } | ||||
@@ -42,6 +42,7 @@ open class TimesheetsService( | |||||
this.recordDate = entryDate | this.recordDate = entryDate | ||||
this.normalConsumed = timeEntry.inputHours | this.normalConsumed = timeEntry.inputHours | ||||
this.projectTask = projectTask | this.projectTask = projectTask | ||||
this.remark = timeEntry.remark | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -66,7 +67,8 @@ open class TimesheetsService( | |||||
projectId = timesheet.projectTask?.project?.id, | projectId = timesheet.projectTask?.project?.id, | ||||
taskId = timesheet.projectTask?.task?.id, | taskId = timesheet.projectTask?.task?.id, | ||||
taskGroupId = timesheet.projectTask?.task?.taskGroup?.id, | taskGroupId = timesheet.projectTask?.task?.taskGroup?.id, | ||||
inputHours = timesheet.normalConsumed ?: 0.0 | |||||
inputHours = timesheet.normalConsumed ?: 0.0, | |||||
remark = timesheet.remark | |||||
) | ) | ||||
} } | } } | ||||
} | } | ||||
@@ -3,5 +3,6 @@ package com.ffii.tsms.modules.timesheet.web.models | |||||
data class LeaveEntry( | data class LeaveEntry( | ||||
val id: Long, | val id: Long, | ||||
val leaveTypeId: Long?, | val leaveTypeId: Long?, | ||||
val inputHours: Double | |||||
val inputHours: Double, | |||||
val remark: String? | |||||
) | ) |
@@ -6,5 +6,6 @@ data class TimeEntry( | |||||
val projectId: Long?, | val projectId: Long?, | ||||
val taskGroupId: Long?, | val taskGroupId: Long?, | ||||
val taskId: Long?, | val taskId: Long?, | ||||
val inputHours: Double | |||||
val inputHours: Double, | |||||
val remark: String? | |||||
) | ) |