From 313eca4e56d7225a7816ba01fef566a2f38390a0 Mon Sep 17 00:00:00 2001 From: Wayne Date: Sun, 14 Apr 2024 23:07:35 +0900 Subject: [PATCH] Mock staffs and allocate staff in project creation --- .../modules/data/entity/StaffRepository.java | 2 + .../modules/data/service/StaffsService.kt | 6 +- .../tsms/modules/data/web/StaffsController.kt | 10 +- .../project/service/ProjectsService.kt | 44 ++++--- .../project/web/models/NewProjectRequest.kt | 6 +- .../20240414_01_wayne/01_mock_staffs.sql | 114 ++++++++++++++++++ 6 files changed, 155 insertions(+), 27 deletions(-) create mode 100644 src/main/resources/db/changelog/changes/20240414_01_wayne/01_mock_staffs.sql diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java index ac41945..c566c08 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java @@ -10,4 +10,6 @@ import java.util.Map; public interface StaffRepository extends AbstractRepository { List findStaffSearchInfoByAndDeletedFalse(); + + List findAllStaffSearchInfoByIdIn(List ids); } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt index 2300381..43c2e82 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt @@ -27,9 +27,9 @@ open class StaffsService( private val jdbcDao: JdbcDao, private val passwordEncoder: PasswordEncoder ) : AbstractBaseEntityService(jdbcDao, staffRepository) { - open fun getTeamLeads(): List { - // TODO: Replace with actual logic and make a projection instead of returning all fields - return staffRepository.findAll() + open fun getTeamLeads(): List { + // TODO: Replace by actual logic + return staffRepository.findAllStaffSearchInfoByIdIn(listOf(1, 2)) } open fun allStaff(): List { diff --git a/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt b/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt index 51f0455..2f882fa 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt @@ -16,16 +16,16 @@ import org.springframework.web.bind.annotation.* class StaffsController(private val staffsService: StaffsService) { @GetMapping("/teamLeads") fun teamLeads(): List { - return staffsService.allStaff() + return staffsService.getTeamLeads() } @GetMapping fun allStaff(): List { return staffsService.allStaff() } - @GetMapping("/list") - fun list(): List { - return staffsService.getTeamLeads() - } +// @GetMapping("/list") +// fun list(): List { +// return staffsService.getTeamLeads() +// } @GetMapping("/{id}") fun getStaff(@PathVariable id: Long?): Map { 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 787d78b..e2b4ec0 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 @@ -4,20 +4,19 @@ import com.ffii.tsms.modules.data.entity.* import com.ffii.tsms.modules.data.service.CustomerContactService import com.ffii.tsms.modules.project.entity.projections.ProjectSearchInfo import com.ffii.tsms.modules.data.service.CustomerService -import com.ffii.tsms.modules.project.entity.Project -import com.ffii.tsms.modules.project.entity.ProjectCategory -import com.ffii.tsms.modules.project.entity.ProjectCategoryRepository -import com.ffii.tsms.modules.project.entity.ProjectRepository +import com.ffii.tsms.modules.project.entity.* import com.ffii.tsms.modules.project.web.models.NewProjectRequest import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional @Service -class ProjectsService( +open class ProjectsService( private val projectRepository: ProjectRepository, private val customerService: CustomerService, private val customerContactService: CustomerContactService, private val projectCategoryRepository: ProjectCategoryRepository, private val staffRepository: StaffRepository, + private val staffAllocationRepository: StaffAllocationRepository, private val fundingTypeRepository: FundingTypeRepository, private val serviceTypeRepository: ServiceTypeRepository, private val contractTypeRepository: ContractTypeRepository, @@ -25,15 +24,16 @@ class ProjectsService( private val buildingTypeRepository: BuildingTypeRepository, private val workNatureRepository: WorkNatureRepository ) { - fun allProjects(): List { + open fun allProjects(): List { return projectRepository.findProjectSearchInfoBy() } - fun allProjectCategories(): List { + open fun allProjectCategories(): List { return projectCategoryRepository.findAll() } - fun saveProject(request: NewProjectRequest): Project { + @Transactional + open fun saveProject(request: NewProjectRequest): Project { val projectCategory = projectCategoryRepository.findById(request.projectCategoryId).orElseThrow() val fundingType = fundingTypeRepository.findById(request.fundingTypeId).orElseThrow() @@ -47,12 +47,15 @@ class ProjectsService( val customer = customerService.findCustomer(request.clientId) val clientContact = customerContactService.findByContactId(request.clientContactId) - // TODO: Add tasks, milestones, allocated staff + + + // TODO: Add tasks, milestones val project = Project().apply { name = request.projectName description = request.projectDescription code = request.projectCode + expectedTotalFee = request.expectedProjectFee this.projectCategory = projectCategory this.fundingType = fundingType this.serviceType = serviceType @@ -68,30 +71,39 @@ class ProjectsService( custLeadPhone = clientContact.phone } - return projectRepository.save(project) + val savedProject = projectRepository.save(project) + + val allocatedStaff = staffRepository.findAllById(request.allocatedStaffIds) + val staffAllocations = allocatedStaff.map { staff -> StaffAllocation().apply { + this.project = savedProject + this.staff = staff + } } + staffAllocationRepository.saveAll(staffAllocations) + + return savedProject } - fun allFundingTypes(): List { + open fun allFundingTypes(): List { return fundingTypeRepository.findAll() } - fun allLocationTypes(): List { + open fun allLocationTypes(): List { return locationRepository.findAll() } - fun allServiceTypes(): List { + open fun allServiceTypes(): List { return serviceTypeRepository.findAll() } - fun allContractTypes(): List { + open fun allContractTypes(): List { return contractTypeRepository.findAll() } - fun allBuildingTypes(): List { + open fun allBuildingTypes(): List { return buildingTypeRepository.findAll() } - fun allWorkNatures(): List { + open fun allWorkNatures(): List { return workNatureRepository.findAll() } } diff --git a/src/main/java/com/ffii/tsms/modules/project/web/models/NewProjectRequest.kt b/src/main/java/com/ffii/tsms/modules/project/web/models/NewProjectRequest.kt index d8c0076..2b61b59 100644 --- a/src/main/java/com/ffii/tsms/modules/project/web/models/NewProjectRequest.kt +++ b/src/main/java/com/ffii/tsms/modules/project/web/models/NewProjectRequest.kt @@ -23,11 +23,11 @@ data class NewProjectRequest( val clientContactId: Long, val clientSubsidiaryId: Long?, - val tasks: Map, - val allocatedStaffIds: List, - val milestones: Map + val milestones: Map, + + val expectedProjectFee: Double ) data class TaskAllocation( diff --git a/src/main/resources/db/changelog/changes/20240414_01_wayne/01_mock_staffs.sql b/src/main/resources/db/changelog/changes/20240414_01_wayne/01_mock_staffs.sql new file mode 100644 index 0000000..aa90e7a --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240414_01_wayne/01_mock_staffs.sql @@ -0,0 +1,114 @@ +-- liquibase formatted sql +-- changeset wayne:mock_staffs + +INSERT INTO `user` (name, username, password) VALUES + ('Albert Lam','alam','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Bernard Chou','bchou','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Carl Junior','cjunior','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Denis Lau','dlau','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Edward Wong','ewong','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Fred Cheung','fcheung','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Gordon Ramsey','gramsey','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Heather Stewards','hstewards','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Ivan Foo','ifoo','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Jack Son','json','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Kurt Land','kland','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'), + ('Lawrence Arnold','larnold','$2a$10$65S7/AhKn8MldlYmvFN5JOfr1yaULwFNDIhTskLTuUCKgbbs8sFAi'); + +INSERT INTO staff (userId, name, staffId, companyId, teamId, salaryEffId) VALUES + ( + (SELECT id from `user` where username = 'alam'), + 'Albert Lam', + '003', + 1, + 1, + 1 + ), + ( + (SELECT id from `user` where username = 'bchou'), + 'Bernard Chou', + '004', + 1, + 2, + 1 + ), + ( + (SELECT id from `user` where username = 'cjunior'), + 'Carl Junior', + '005', + 1, + 1, + 1 + ), + ( + (SELECT id from `user` where username = 'dlau'), + 'Denis Lau', + '006', + 1, + 2, + 1 + ), + ( + (SELECT id from `user` where username = 'ewong'), + 'Edward Wong', + '007', + 1, + 1, + 1 + ), + ( + (SELECT id from `user` where username = 'fcheung'), + 'Fred Cheung', + '008', + 1, + 2, + 1 + ), + ( + (SELECT id from `user` where username = 'gramsey'), + 'Gordon Ramsey', + '009', + 1, + 1, + 1 + ), + ( + (SELECT id from `user` where username = 'hstewards'), + 'Heather Stewards', + '010', + 1, + 2, + 1 + ), + ( + (SELECT id from `user` where username = 'ifoo'), + 'Ivan Foo', + '011', + 1, + 1, + 1 + ), + ( + (SELECT id from `user` where username = 'json'), + 'Jack Son', + '012', + 1, + 2, + 1 + ), + ( + (SELECT id from `user` where username = 'kland'), + 'Kurt Land', + '013', + 1, + 1, + 1 + ), + ( + (SELECT id from `user` where username = 'larnold'), + 'Lawrence Arnold', + '014', + 1, + 2, + 1 + ); \ No newline at end of file