diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/GradeAllocationRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/GradeAllocationRepository.kt index 5e812cb..46dc040 100644 --- a/src/main/java/com/ffii/tsms/modules/project/entity/GradeAllocationRepository.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/GradeAllocationRepository.kt @@ -3,4 +3,5 @@ package com.ffii.tsms.modules.project.entity; import com.ffii.core.support.AbstractRepository interface GradeAllocationRepository : AbstractRepository { + fun findByProject(project: Project): List } \ No newline at end of file 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 7e0e5ba..3048ded 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 @@ -5,4 +5,5 @@ import com.ffii.tsms.modules.data.entity.Staff interface StaffAllocationRepository : AbstractRepository { fun findAssignedProjectsByStaff(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 7106a56..5718faf 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 @@ -201,6 +201,10 @@ open class ProjectsService( return project.getOrNull()?.let { val customerContact = it.customer?.id?.let { customerId -> customerContactService.findAllByCustomerId(customerId) } ?: emptyList() + val milestoneMap = it.milestones + .filter { milestone -> milestone.taskGroup?.id != null } + .associateBy { milestone -> milestone.taskGroup!!.id!! } + EditProjectDetails( projectCode = it.code, projectName = it.name, @@ -217,10 +221,27 @@ open class ProjectsService( clientContactId = customerContact.find { contact -> contact.name == it.custLeadName }?.id, clientSubsidiaryId = it.customerSubsidiary?.id, totalManhour = it.totalManhour, - manhourPercentageByGrade = emptyMap(), - taskGroups = emptyMap(), - allocatedStaffIds = emptyList(), - milestones = emptyMap(), + manhourPercentageByGrade = gradeAllocationRepository.findByProject(it) + .filter { allocation -> allocation.grade?.id != null } + .associate { allocation -> Pair(allocation.grade!!.id!!, allocation.manhour ?: 0.0) }, + taskGroups = projectTaskRepository.findAllByProject(it) + .mapNotNull { projectTask -> if (projectTask.task?.taskGroup?.id != null) projectTask.task else null } + .groupBy { task -> task.taskGroup!!.id!! } + .mapValues { (taskGroupId, tasks) -> TaskGroupAllocation( + taskIds = tasks.mapNotNull { task -> task.id }, + percentAllocation = milestoneMap[taskGroupId]?.stagePercentAllocation ?: 0.0 + ) }, + allocatedStaffIds = staffAllocationRepository.findByProject(it).mapNotNull { allocation -> allocation.staff?.id }, + milestones = milestoneMap.mapValues { (_, milestone) -> com.ffii.tsms.modules.project.web.models.Milestone( + startDate = milestone.startDate?.format(DateTimeFormatter.ISO_LOCAL_DATE), + endDate = milestone.endDate?.format(DateTimeFormatter.ISO_LOCAL_DATE), + payments = milestone.milestonePayments.map { payment -> PaymentInputs( + id = payment.id!!, + amount = payment.amount!!, + description = payment.description!!, + date = payment.date!!.format(DateTimeFormatter.ISO_LOCAL_DATE) + )} + )}, expectedProjectFee = it.expectedTotalFee ) }