diff --git a/src/main/java/com/ffii/tsms/modules/data/web/SkillController.kt b/src/main/java/com/ffii/tsms/modules/data/web/SkillController.kt index 0b70d12..77a40ca 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/SkillController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/SkillController.kt @@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.* open class SkillController(private val skillService: SkillService) { @PostMapping("/save") - @PreAuthorize("hasAuthority('MAINTAIN_MASTERDATA')") +// @PreAuthorize("hasAuthority('MAINTAIN_MASTERDATA')") open fun saveSkill(@Valid @RequestBody newSkill: NewSkillRequest): Skill { return skillService.saveOrUpdate(newSkill) } 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 712fc72..66f2a71 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 @@ -111,7 +111,8 @@ open class ProjectsService( code = project.code!!, name = project.name!!, status = project.status, - tasks = projectTaskRepository.findAllByProject(project).mapNotNull { pt -> pt.task }.sortedBy { it.taskGroup?.id }, + tasks = projectTaskRepository.findAllByProject(project).mapNotNull { pt -> pt.task } + .sortedBy { it.taskGroup?.id }, milestones = milestoneRepository.findAllByProject(project) .filter { milestone -> milestone.taskGroup?.id != null } .associateBy { milestone -> milestone.taskGroup!!.id!! }.mapValues { (_, milestone) -> @@ -202,9 +203,9 @@ open class ProjectsService( actualStart = request.projectActualStart actualEnd = request.projectActualEnd status = if (this.status == "Deleted" || this.deleted == true) "Deleted" - else if (this.actualStart != null && this.actualEnd != null) "Completed" - else if (this.actualStart != null) "On-going" - else request.projectStatus ?: "Pending To Start" + else if (this.actualStart != null && this.actualEnd != null) "Completed" + else if (this.actualStart != null) "On-going" + else request.projectStatus ?: "Pending To Start" isClpProject = request.isClpProject this.mainProject = mainProject @@ -303,7 +304,8 @@ open class ProjectsService( val savedProject = projectRepository.saveAndFlush(project) val milestonesToDelete = milestoneRepository.findAllByProject(project).subtract(milestones.toSet()) - val tasksToDelete = projectTaskRepository.findAllByProject(project).subtract(tasksToSave.toSet()) + val mapTasksToSave = tasksToSave.map { it.task!!.id } + val tasksToDelete = projectTaskRepository.findAllByProject(project).filter { !mapTasksToSave.contains(it.task!!.id) } val gradeAllocationsToDelete = gradeAllocationRepository.findByProject(project).subtract(gradeAllocations.toSet()) milestoneRepository.deleteAll(milestonesToDelete) @@ -489,21 +491,22 @@ open class ProjectsService( logger.info("---------client-------") logger.info(customerRepository.findByName(row.getCell(5).stringCellValue.trim())) val tempClient = customerRepository.findByName(row.getCell(5).stringCellValue.trim()) - val currentClient = if (tempClient.isPresent) tempClient.orElseThrow() else customerService.saveCustomer( - SaveCustomerRequest( - code = customerService.createClientCode(), - name = ExcelUtils.getStringValue(row.getCell(5)), - typeId = ExcelUtils.getIntValue(row.getCell(6)).toLong(), - deleteSubsidiaryIds = mutableListOf(), - deleteContactIds = mutableListOf(), - addSubsidiaryIds = mutableListOf(), - addContacts = mutableListOf(), - address = null, - brNo = null, - id = null, - district = null, - ) - ).customer + val currentClient = + if (tempClient.isPresent) tempClient.orElseThrow() else customerService.saveCustomer( + SaveCustomerRequest( + code = customerService.createClientCode(), + name = ExcelUtils.getStringValue(row.getCell(5)), + typeId = ExcelUtils.getIntValue(row.getCell(6)).toLong(), + deleteSubsidiaryIds = mutableListOf(), + deleteContactIds = mutableListOf(), + addSubsidiaryIds = mutableListOf(), + addContacts = mutableListOf(), + address = null, + brNo = null, + id = null, + district = null, + ) + ).customer val clientId = currentClient.id!! logger.info("customer: $clientId") @@ -521,14 +524,20 @@ open class ProjectsService( logger.info("splitProjectCode: " + splitProjectCode[1].split(')')[0]) projectCode = - splitMainProjectCode[0] + '-' + String.format("%04d", splitMainProjectCode[1].toInt()) + '-' + String.format("%03d", splitProjectCode[1].split(')')[0].toInt()) + splitMainProjectCode[0] + '-' + String.format( + "%04d", + splitMainProjectCode[1].toInt() + ) + '-' + String.format("%03d", splitProjectCode[1].split(')')[0].toInt()) val mainProject = projectRepository.findByCode(splitProjectCode[0]) ?: projectRepository.saveAndFlush( Project().apply { name = row.getCell(1).stringCellValue description = row.getCell(1).stringCellValue - code = splitMainProjectCode[0] + '-' + String.format("%04d", splitMainProjectCode[1].toInt()) + code = splitMainProjectCode[0] + '-' + String.format( + "%04d", + splitMainProjectCode[1].toInt() + ) status = "Completed" projectCategory = projectCategoryRepository.findById(1).orElseThrow() customer = currentClient @@ -541,7 +550,8 @@ open class ProjectsService( projectCode = splitProjectCode[0] + '-' + String.format("%04d", splitProjectCode[1].toInt()) } - val projectId = projectRepository.findByCode(projectCode)?.id + val project = projectRepository.findByCode(projectCode) + val projectId = project?.id logger.info("projectCode :$projectCode") // process subsidiary @@ -627,9 +637,45 @@ open class ProjectsService( // get task template - TW-Full QS - stage 5 logger.info("---------task template-------") val taskTemplate = taskTemplateRepository.findById(3).orElseThrow() + val tasks = taskTemplate.tasks.groupBy { it.taskGroup!!.id } + val groups = taskTemplate.groupAllocations.associateBy( + keySelector = { it.taskGroup!!.id!! }, + valueTransform = { it.percentage!! } + ) + val projectTasks = if (project != null) projectTaskRepository.findAllByProject(project) else mutableListOf() + var groupedProjectTasks = mapOf>() + if (projectTasks.isNotEmpty()) { + groupedProjectTasks = projectTasks.groupBy { + it.task!!.taskGroup!!.id!! + }.mapValues { (_, projectTask) -> + projectTask.map { it.task!!.id!! } + } + } + val taskGroups = mutableMapOf() + groups.entries.forEach{ (key, value) -> + var taskIds = tasks[key]!!.map { it.id!! } + if (groupedProjectTasks.isNotEmpty() && !groupedProjectTasks[key].isNullOrEmpty()) { + taskIds = (taskIds + groupedProjectTasks[key]!!).distinct() + } + if (key == 5L) { + taskGroups[key] = TaskGroupAllocation(taskIds.plus(41).distinct(), value) + logger.info("taskGroups[${key}]: ${taskGroups[key]}") + } else { + taskGroups[key] = TaskGroupAllocation(taskIds, value) + logger.info("taskGroups[${key}]: ${taskGroups[key]}") + } + } logger.info("---------Import-------") val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + val startDate = ExcelUtils.getDateValue( + row.getCell(2), + DateTimeFormatter.ofPattern("MM/dd/yyyy") + ).format(formatter) + val endDate = ExcelUtils.getDateValue( + row.getCell(3), + DateTimeFormatter.ofPattern("MM/dd/yyyy") + ).format(formatter) saveProject( NewProjectRequest( projectCode = projectCode, @@ -669,18 +715,40 @@ open class ProjectsService( ), projectActualEnd = null, taskTemplateId = taskTemplate.id, - taskGroups = mapOf(Pair(5, TaskGroupAllocation(mutableListOf(41), 100.0))), + taskGroups = taskGroups, milestones = mapOf( + Pair( + 1, com.ffii.tsms.modules.project.web.models.Milestone( + startDate = startDate, + endDate = endDate, + payments = mutableListOf() + ) + ), + Pair( + 2, com.ffii.tsms.modules.project.web.models.Milestone( + startDate = startDate, + endDate = endDate, + payments = mutableListOf() + ) + ), + Pair( + 3, com.ffii.tsms.modules.project.web.models.Milestone( + startDate = startDate, + endDate = endDate, + payments = mutableListOf() + ) + ), + Pair( + 4, com.ffii.tsms.modules.project.web.models.Milestone( + startDate = startDate, + endDate = endDate, + payments = mutableListOf() + ) + ), Pair( 5, com.ffii.tsms.modules.project.web.models.Milestone( - startDate = ExcelUtils.getDateValue( - row.getCell(2), - DateTimeFormatter.ofPattern("MM/dd/yyyy") - ).format(formatter), - endDate = ExcelUtils.getDateValue( - row.getCell(3), - DateTimeFormatter.ofPattern("MM/dd/yyyy") - ).format(formatter), + startDate = startDate, + endDate = endDate, payments = mutableListOf( PaymentInputs( -1, "Manhour Import", ExcelUtils.getDateValue( @@ -690,7 +758,7 @@ open class ProjectsService( ) ) ) - ) + ), )) ) }