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