From 758003f1d8d6daef5c96321e181d6d23d50d7139 Mon Sep 17 00:00:00 2001 From: Wayne Date: Tue, 30 Apr 2024 23:54:41 +0900 Subject: [PATCH] Add project details endpoint --- .../project/service/ProjectsService.kt | 37 +++++++++++++++++-- .../modules/project/web/ProjectsController.kt | 8 +++- .../project/web/models/EditProjectDetails.kt | 34 +++++++++++++++++ 3 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/ffii/tsms/modules/project/web/models/EditProjectDetails.kt 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 a2dafa3..7106a56 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 @@ -7,12 +7,10 @@ import com.ffii.tsms.modules.project.entity.projections.ProjectSearchInfo import com.ffii.tsms.modules.data.service.CustomerService import com.ffii.tsms.modules.data.service.GradeService import com.ffii.tsms.modules.project.entity.* +import com.ffii.tsms.modules.project.entity.Milestone import com.ffii.tsms.modules.project.entity.projections.InvoiceInfoSearchInfo import com.ffii.tsms.modules.project.entity.projections.InvoiceSearchInfo -import com.ffii.tsms.modules.project.web.models.AssignedProject -import com.ffii.tsms.modules.project.web.models.MilestoneInfo -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 org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.time.LocalDate @@ -197,6 +195,37 @@ open class ProjectsService( } } + open fun getProjectDetails(projectId: Long): EditProjectDetails? { + val project = projectRepository.findById(projectId) + + return project.getOrNull()?.let { + val customerContact = it.customer?.id?.let { customerId -> customerContactService.findAllByCustomerId(customerId) } ?: emptyList() + + EditProjectDetails( + projectCode = it.code, + projectName = it.name, + projectCategoryId = it.projectCategory?.id, + projectDescription = it.description, + projectLeadId = it.teamLead?.id, + serviceTypeId = it.serviceType?.id, + fundingTypeId = it.fundingType?.id, + contractTypeId = it.contractType?.id, + locationId = it.location?.id, + buildingTypeIds = it.buildingTypes.mapNotNull { buildingType -> buildingType.id }, + workNatureIds = it.workNatures.mapNotNull { workNature -> workNature.id }, + clientId = it.customer?.id, + clientContactId = customerContact.find { contact -> contact.name == it.custLeadName }?.id, + clientSubsidiaryId = it.customerSubsidiary?.id, + totalManhour = it.totalManhour, + manhourPercentageByGrade = emptyMap(), + taskGroups = emptyMap(), + allocatedStaffIds = emptyList(), + milestones = emptyMap(), + expectedProjectFee = it.expectedTotalFee + ) + } + } + open fun allFundingTypes(): List { return fundingTypeRepository.findAll() } diff --git a/src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt b/src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt index 6d30750..9c7e87b 100644 --- a/src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt +++ b/src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt @@ -1,11 +1,12 @@ package com.ffii.tsms.modules.project.web +import com.ffii.core.exception.NotFoundException import com.ffii.tsms.modules.data.entity.* import com.ffii.tsms.modules.project.entity.projections.ProjectSearchInfo -import com.ffii.tsms.modules.project.entity.Project import com.ffii.tsms.modules.project.entity.ProjectCategory 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 jakarta.validation.Valid @@ -34,6 +35,11 @@ class ProjectsController(private val projectsService: ProjectsService) { return projectsService.saveProject(newProject) } + @GetMapping("/projectDetails/{id}") + fun projectDetails(@PathVariable id: Long): EditProjectDetails { + return projectsService.getProjectDetails(id) ?: throw NotFoundException() + } + @GetMapping("/fundingTypes") fun projectFundingTypes(): List { return projectsService.allFundingTypes() diff --git a/src/main/java/com/ffii/tsms/modules/project/web/models/EditProjectDetails.kt b/src/main/java/com/ffii/tsms/modules/project/web/models/EditProjectDetails.kt new file mode 100644 index 0000000..bf2755e --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/web/models/EditProjectDetails.kt @@ -0,0 +1,34 @@ +package com.ffii.tsms.modules.project.web.models + +data class EditProjectDetails( + // Project details + val projectCode: String?, + val projectName: String?, + val projectCategoryId: Long?, + val projectDescription: String?, + val projectLeadId: Long?, + + val serviceTypeId: Long?, + val fundingTypeId: Long?, + val contractTypeId: Long?, + val locationId: Long?, + val buildingTypeIds: List, + val workNatureIds: List, + + // Client details + val clientId: Long?, + val clientContactId: Long?, + val clientSubsidiaryId: Long?, + + // Allocation + val totalManhour: Double?, + val manhourPercentageByGrade: Map, + val taskGroups: Map, + val allocatedStaffIds: List, + + // Milestones + val milestones: Map, + + // Miscellaneous + val expectedProjectFee: Double? +)