diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/BuildingType.kt b/src/main/java/com/ffii/tsms/modules/data/entity/BuildingType.kt new file mode 100644 index 0000000..b03c004 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/BuildingType.kt @@ -0,0 +1,32 @@ +package com.ffii.tsms.modules.data.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import jakarta.validation.constraints.NotNull +import org.hibernate.proxy.HibernateProxy + +@Entity +@Table(name = "building_type") +open class BuildingType : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null + + final override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null) return false + val oEffectiveClass = + if (other is HibernateProxy) other.hibernateLazyInitializer.persistentClass else other.javaClass + val thisEffectiveClass = + if (this is HibernateProxy) this.hibernateLazyInitializer.persistentClass else this.javaClass + if (thisEffectiveClass != oEffectiveClass) return false + other as BuildingType + + return id != null && id == other.id + } + + final override fun hashCode(): Int = + if (this is HibernateProxy) this.hibernateLazyInitializer.persistentClass.hashCode() else javaClass.hashCode() +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/ContractType.kt b/src/main/java/com/ffii/tsms/modules/data/entity/ContractType.kt new file mode 100644 index 0000000..5a5cc4c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/ContractType.kt @@ -0,0 +1,15 @@ +package com.ffii.tsms.modules.data.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import jakarta.validation.constraints.NotNull + +@Entity +@Table(name = "contract_type") +open class ContractType : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/FundingType.kt b/src/main/java/com/ffii/tsms/modules/data/entity/FundingType.kt new file mode 100644 index 0000000..6212f29 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/FundingType.kt @@ -0,0 +1,15 @@ +package com.ffii.tsms.modules.data.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import jakarta.validation.constraints.NotNull + +@Entity +@Table(name = "funding_type") +open class FundingType : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Location.kt b/src/main/java/com/ffii/tsms/modules/data/entity/Location.kt new file mode 100644 index 0000000..528e358 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Location.kt @@ -0,0 +1,15 @@ +package com.ffii.tsms.modules.data.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import jakarta.validation.constraints.NotNull + +@Entity +@Table(name = "location") +open class Location : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/ServiceType.kt b/src/main/java/com/ffii/tsms/modules/data/entity/ServiceType.kt new file mode 100644 index 0000000..6282fcc --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/ServiceType.kt @@ -0,0 +1,15 @@ +package com.ffii.tsms.modules.data.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import jakarta.validation.constraints.NotNull + +@Entity +@Table(name = "service_type") +open class ServiceType : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null +} diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/WorkNature.kt b/src/main/java/com/ffii/tsms/modules/data/entity/WorkNature.kt new file mode 100644 index 0000000..38ab79c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/WorkNature.kt @@ -0,0 +1,32 @@ +package com.ffii.tsms.modules.data.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import jakarta.validation.constraints.NotNull +import org.hibernate.proxy.HibernateProxy + +@Entity +@Table(name = "work_nature") +open class WorkNature : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null + + final override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null) return false + val oEffectiveClass = + if (other is HibernateProxy) other.hibernateLazyInitializer.persistentClass else other.javaClass + val thisEffectiveClass = + if (this is HibernateProxy) this.hibernateLazyInitializer.persistentClass else this.javaClass + if (thisEffectiveClass != oEffectiveClass) return false + other as WorkNature + + return id != null && id == other.id + } + + final override fun hashCode(): Int = + if (this is HibernateProxy) this.hibernateLazyInitializer.persistentClass.hashCode() else javaClass.hashCode() +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt b/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt index 308925d..2ba2859 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt @@ -10,13 +10,13 @@ interface StaffSearchInfo { val staffId: String? val name: String? - @get:Value("#{target.team.code}") + @get:Value("#{target.team?.code}") val team: String? - @get:Value("#{target.grade.name}") + @get:Value("#{target.grade?.name}") val grade: String? - @get:Value("#{target.currentPosition.name}") + @get:Value("#{target.currentPosition?.name}") val currentPosition: String? } 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 3db2df5..bd50367 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 @@ -1,97 +1,96 @@ -package com.ffii.tsms.modules.data.service - -import com.ffii.tsms.modules.data.entity.Staff -import com.ffii.tsms.modules.data.entity.StaffRepository -import com.ffii.tsms.modules.user.entity.UserRepository -import com.ffii.tsms.modules.data.entity.PositionRepository -import com.ffii.tsms.modules.data.entity.CompanyRepository -import com.ffii.tsms.modules.data.entity.GradeRepository -import com.ffii.tsms.modules.data.entity.TeamRepository -import com.ffii.tsms.modules.data.entity.SkillRepository -import com.ffii.tsms.modules.data.entity.SalaryEffectiveRepository -import com.ffii.tsms.modules.data.entity.DepartmentRepository -import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo -import com.ffii.tsms.modules.project.web.models.NewStaffRequest -// import com.ffii.tsms.modules.data.web.models.NewStaffRequest -import org.springframework.stereotype.Service -import com.ffii.core.support.JdbcDao; -import com.ffii.core.support.AbstractBaseEntityService; - -@Service -public final class StaffsService( - private val staffRepository: StaffRepository, - private val userRepository: UserRepository, - private val positionRepository: PositionRepository, - private val companyRepository: CompanyRepository, - private val gradeRepository: GradeRepository, - private val teamRepository: TeamRepository, - private val skillRepository: SkillRepository, - private val salaryEffectiveRepository: SalaryEffectiveRepository, - private val departmentRepository: DepartmentRepository, - private val jdbcDao: JdbcDao, -) { - - fun getTeamLeads(): List { - // TODO: Replace with actual logic and make a projection instead of returning all fields - return staffRepository.findAll() - } - - fun allStaff(): List { - return staffRepository.findStaffSearchInfoBy(); - } - -// fun fetchStaffList(args: Map): List> { -// val sql = StringBuilder("select" -// + " s.*," -// + " date_format(s.created, '%Y-%m-%d') as created," -// + " date_format(s.departDate, '%Y-%m-%d') as departDate," -// + " date_format(s.joinDate, '%Y-%m-%d') as joinDate" -// + " from staff s" -// + " where s.deleted = false" -// ) -// if (args != null) { -// if (args.containsKey("staffId")) -// sql.append(" AND s.staffId = :staffId "); -// } -// return jdbcDao.queryForList(sql.toString(), args) -// } - - fun saveStaff(req: NewStaffRequest): Staff { - val user = userRepository.findById(req.userId).orElseThrow() - val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow() - val joinPosition = positionRepository.findById(req.joinPositionId).orElseThrow() - val company = companyRepository.findById(req.companyId).orElseThrow() - val grade = gradeRepository.findById(req.gradeId).orElseThrow() - val team = teamRepository.findById(req.teamId).orElseThrow() - val skill = skillRepository.findById(req.skillSetId).orElseThrow() - val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow() - val department = departmentRepository.findById(req.departmentId).orElseThrow() - - // // TODO: Add tasks, milestones, allocated - val staff = Staff().apply { - joinDate = req.joinDate - name = req.name - staffId = req.staffId - phone1 = req.phone1 - phone2 = req.phone2 - email = req.email - emergContactName = req.emergContactName - emergContactPhone = req.emergContactPhone - employType = req.employType - departDate = req.departDate - departReason = req.departReason - remark = req.remark - this.user = user - this.currentPosition = currentPosition - this.joinPosition = joinPosition - this.company = company - this.grade = grade - this.team = team - this.skill = skill - this.salaryEffective = salaryEffective - this.department = department - } - - return staffRepository.save(staff) - } +package com.ffii.tsms.modules.data.service + +import com.ffii.tsms.modules.data.entity.Staff +import com.ffii.tsms.modules.data.entity.StaffRepository +import com.ffii.tsms.modules.user.entity.UserRepository +import com.ffii.tsms.modules.data.entity.PositionRepository +import com.ffii.tsms.modules.data.entity.CompanyRepository +import com.ffii.tsms.modules.data.entity.GradeRepository +import com.ffii.tsms.modules.data.entity.TeamRepository +import com.ffii.tsms.modules.data.entity.SkillRepository +import com.ffii.tsms.modules.data.entity.SalaryEffectiveRepository +import com.ffii.tsms.modules.data.entity.DepartmentRepository +import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo +import com.ffii.tsms.modules.project.web.models.NewStaffRequest +// import com.ffii.tsms.modules.data.web.models.NewStaffRequest +import org.springframework.stereotype.Service +import com.ffii.core.support.JdbcDao; +import com.ffii.core.support.AbstractBaseEntityService; + +@Service +public final class StaffsService( + private val staffRepository: StaffRepository, + private val userRepository: UserRepository, + private val positionRepository: PositionRepository, + private val companyRepository: CompanyRepository, + private val gradeRepository: GradeRepository, + private val teamRepository: TeamRepository, + private val skillRepository: SkillRepository, + private val salaryEffectiveRepository: SalaryEffectiveRepository, + private val departmentRepository: DepartmentRepository, + private val jdbcDao: JdbcDao, +) { + fun getTeamLeads(): List { + // TODO: Replace with actual logic and make a projection instead of returning all fields + return staffRepository.findStaffSearchInfoBy() + } + + fun allStaff(): List { + return staffRepository.findStaffSearchInfoBy(); + } + +// fun fetchStaffList(args: Map): List> { +// val sql = StringBuilder("select" +// + " s.*," +// + " date_format(s.created, '%Y-%m-%d') as created," +// + " date_format(s.departDate, '%Y-%m-%d') as departDate," +// + " date_format(s.joinDate, '%Y-%m-%d') as joinDate" +// + " from staff s" +// + " where s.deleted = false" +// ) +// if (args != null) { +// if (args.containsKey("staffId")) +// sql.append(" AND s.staffId = :staffId "); +// } +// return jdbcDao.queryForList(sql.toString(), args) +// } + + fun saveStaff(req: NewStaffRequest): Staff { + val user = userRepository.findById(req.userId).orElseThrow() + val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow() + val joinPosition = positionRepository.findById(req.joinPositionId).orElseThrow() + val company = companyRepository.findById(req.companyId).orElseThrow() + val grade = gradeRepository.findById(req.gradeId).orElseThrow() + val team = teamRepository.findById(req.teamId).orElseThrow() + val skill = skillRepository.findById(req.skillSetId).orElseThrow() + val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow() + val department = departmentRepository.findById(req.departmentId).orElseThrow() + + // // TODO: Add tasks, milestones, allocated + val staff = Staff().apply { + joinDate = req.joinDate + name = req.name + staffId = req.staffId + phone1 = req.phone1 + phone2 = req.phone2 + email = req.email + emergContactName = req.emergContactName + emergContactPhone = req.emergContactPhone + employType = req.employType + departDate = req.departDate + departReason = req.departReason + remark = req.remark + this.user = user + this.currentPosition = currentPosition + this.joinPosition = joinPosition + this.company = company + this.grade = grade + this.team = team + this.skill = skill + this.salaryEffective = salaryEffective + this.department = department + } + + return staffRepository.save(staff) + } } \ No newline at end of file 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 16997a4..16c23cd 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 @@ -1,48 +1,43 @@ -package com.ffii.tsms.modules.data.web - -import com.ffii.tsms.modules.data.entity.Staff -import com.ffii.tsms.modules.data.service.StaffsService -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import com.ffii.tsms.modules.project.web.models.NewStaffRequest -import jakarta.validation.Valid -import org.springframework.web.bind.annotation.* -import jakarta.servlet.http.HttpServletRequest; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo - -@RestController -@RequestMapping("/staffs") -class StaffsController(private val staffsService: StaffsService) { - @GetMapping("/teamLeads") - fun teamLeads(): List { - return staffsService.getTeamLeads() - } - @GetMapping - fun allStaff(): List { - return staffsService.allStaff() - } - @GetMapping("/list") - fun list(): List { - return staffsService.getTeamLeads() - } - - @PostMapping("/new") - fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff { - return staffsService.saveStaff(newStaff) - } - -// @GetMapping("/newlist") -// fun list(request: HttpServletRequest): RecordsRes> { -// return RecordsRes(staffsService.fetchStaffList( -// CriteriaArgsBuilder.withRequest(request) -// .addString("staffId") -// .build() -// )) -// } +package com.ffii.tsms.modules.data.web + +import com.ffii.tsms.modules.data.entity.Staff +import com.ffii.tsms.modules.data.service.StaffsService +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import com.ffii.tsms.modules.project.web.models.NewStaffRequest +import jakarta.validation.Valid +import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo + +@RestController +@RequestMapping("/staffs") +class StaffsController(private val staffsService: StaffsService) { + @GetMapping("/teamLeads") + fun teamLeads(): List { + return staffsService.getTeamLeads() + } + @GetMapping + fun allStaff(): List { + return staffsService.allStaff() + } +// @GetMapping("/list") +// fun list(): List { +// return staffsService.getTeamLeads() +// } + + @PostMapping("/new") + fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff { + return staffsService.saveStaff(newStaff) + } + +// @GetMapping("/newlist") +// fun list(request: HttpServletRequest): RecordsRes> { +// return RecordsRes(staffsService.fetchStaffList( +// CriteriaArgsBuilder.withRequest(request) +// .addString("staffId") +// .build() +// )) +// } } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/Project.kt b/src/main/java/com/ffii/tsms/modules/project/entity/Project.kt index 0933a63..0e9da19 100644 --- a/src/main/java/com/ffii/tsms/modules/project/entity/Project.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/Project.kt @@ -1,8 +1,7 @@ package com.ffii.tsms.modules.project.entity import com.ffii.core.entity.BaseEntity -import com.ffii.tsms.modules.data.entity.Customer -import com.ffii.tsms.modules.data.entity.Staff +import com.ffii.tsms.modules.data.entity.* import jakarta.persistence.* import jakarta.validation.constraints.NotNull import java.time.LocalDate @@ -60,4 +59,39 @@ open class Project : BaseEntity() { @Column(name = "billStatus") open var billStatus: Boolean? = null + + @Column(name = "expectedTotalFee") + open var expectedTotalFee: Double? = null + + @ManyToOne + @JoinColumn(name = "serviceTypeId") + open var serviceType: ServiceType? = null + + @ManyToOne + @JoinColumn(name = "fundingTypeId") + open var fundingType: FundingType? = null + + @ManyToOne + @JoinColumn(name = "contractTypeId") + open var contractType: ContractType? = null + + @ManyToOne + @JoinColumn(name = "locationId") + open var location: Location? = null + + @ManyToMany + @JoinTable( + name = "project_buildingTypes", + joinColumns = [JoinColumn(name = "projectId")], + inverseJoinColumns = [JoinColumn(name = "buildingTypesId")] + ) + open var buildingTypes: MutableSet = mutableSetOf() + + @ManyToMany + @JoinTable( + name = "project_workNatures", + joinColumns = [JoinColumn(name = "projectId")], + inverseJoinColumns = [JoinColumn(name = "workNaturesId")] + ) + open var workNatures: MutableSet = mutableSetOf() } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt index d24d436..7e0ec04 100644 --- a/src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt @@ -1,7 +1,7 @@ package com.ffii.tsms.modules.project.entity; import com.ffii.core.support.AbstractRepository -import com.ffii.tsms.modules.data.entity.projections.ProjectSearchInfo +import com.ffii.tsms.modules.project.entity.projections.ProjectSearchInfo interface ProjectRepository : AbstractRepository { fun findProjectSearchInfoBy(): List diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/ProjectSearchInfo.kt b/src/main/java/com/ffii/tsms/modules/project/entity/projections/ProjectSearchInfo.kt similarity index 88% rename from src/main/java/com/ffii/tsms/modules/data/entity/projections/ProjectSearchInfo.kt rename to src/main/java/com/ffii/tsms/modules/project/entity/projections/ProjectSearchInfo.kt index 57bd257..75a520d 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/projections/ProjectSearchInfo.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/projections/ProjectSearchInfo.kt @@ -1,4 +1,4 @@ -package com.ffii.tsms.modules.data.entity.projections +package com.ffii.tsms.modules.project.entity.projections import org.springframework.beans.factory.annotation.Value 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 56e96f6..3aaedaa 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 @@ -1,14 +1,13 @@ package com.ffii.tsms.modules.project.service import com.ffii.tsms.modules.data.entity.StaffRepository -import com.ffii.tsms.modules.data.entity.projections.ProjectSearchInfo +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.web.models.NewProjectRequest -import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest import org.springframework.stereotype.Service @Service 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 7f0f455..fc4a775 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,6 +1,6 @@ package com.ffii.tsms.modules.project.web -import com.ffii.tsms.modules.data.entity.projections.ProjectSearchInfo +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 diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/01_service_type.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/01_service_type.sql new file mode 100644 index 0000000..71c35fc --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/01_service_type.sql @@ -0,0 +1,27 @@ +-- liquibase formatted sql + +-- changeset wayne:service_type +CREATE TABLE service_type ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_service_type PRIMARY KEY (id) +); + +INSERT +INTO + service_type + (name) +VALUES + ('Audit'), + ('Cost Management'), + ('Direct Contract'), + ('Due Diligence'), + ('Estimate'), + ('Expert Report'), + ('Feasibility'), + ('Final Account'), + ('Full QS Services'), + ('Joint Venture'), + ('Measurement'), + ('Post Contract'), + ('Sub-Consultants'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/02_funding_type.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/02_funding_type.sql new file mode 100644 index 0000000..a45d9b7 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/02_funding_type.sql @@ -0,0 +1,17 @@ +-- liquibase formatted sql +-- changeset wayne:funding_type + +CREATE TABLE funding_type ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_funding_type PRIMARY KEY (id) +); + +INSERT +INTO + funding_type + (name) +VALUES + ('Government'), + ('Private'), + ('Subvented'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/03_contract_type.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/03_contract_type.sql new file mode 100644 index 0000000..2d168d5 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/03_contract_type.sql @@ -0,0 +1,19 @@ +-- liquibase formatted sql +-- changeset wayne:contract_type + +CREATE TABLE contract_type ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_contract_type PRIMARY KEY (id) +); + +INSERT +INTO + contract_type + (name) +VALUES + ('Bills of Quantities'), + ('Design and Build'), + ('Schedule of Rate'), + ('Specification Drawings'), + ('Term Contract'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/04_location.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/04_location.sql new file mode 100644 index 0000000..928c6a9 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/04_location.sql @@ -0,0 +1,18 @@ +-- liquibase formatted sql +-- changeset wayne:location + +CREATE TABLE location ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_location PRIMARY KEY (id) +); + +INSERT +INTO + location + (name) +VALUES + ('Hong Kong'), + ('China'), + ('Macau'), + ('Others'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/05_building_type.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/05_building_type.sql new file mode 100644 index 0000000..1d95c2e --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/05_building_type.sql @@ -0,0 +1,30 @@ +-- liquibase formatted sql +-- changeset wayne:building_type + +CREATE TABLE building_type ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_building_type PRIMARY KEY (id) +); + +INSERT +INTO + building_type + (name) +VALUES + ('Residential'), + ('Office'), + ('Commercial'), + ('Hotel & Resort'), + ('Entertainment & Leisure'), + ('Hospital'), + ('School'), + ('Post Secondary College'), + ('Industrial'), + ('Data Center'), + ('Open Space'), + ('Civil Engineering'), + ('Electricity'), + ('Public Transportation'), + ('Retail'), + ('Others'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/06_work_nature.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/06_work_nature.sql new file mode 100644 index 0000000..9fdd100 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/06_work_nature.sql @@ -0,0 +1,21 @@ +-- liquibase formatted sql +-- changeset wayne:work_nature + +CREATE TABLE work_nature ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_work_nature PRIMARY KEY (id) +); + +INSERT +INTO + work_nature + (name) +VALUES + ('New Capital Works'), + ('Maintenance Term Contract'), + ('Addition and Alteration'), + ('Civil Works'), + ('Fitting Out Works'), + ('Revitalization'), + ('Others'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/07_update_project_category.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/07_update_project_category.sql new file mode 100644 index 0000000..78a90a6 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/07_update_project_category.sql @@ -0,0 +1,10 @@ +-- liquibase formatted sql +-- changeset wayne:update_project_category + +UPDATE + project_category +SET + name = 'Awarded Project' +WHERE + id = 2 +; diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/08_update_project_expected_total_fee.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/08_update_project_expected_total_fee.sql new file mode 100644 index 0000000..600e194 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/08_update_project_expected_total_fee.sql @@ -0,0 +1,4 @@ +-- liquibase formatted sql +-- changeset wayne:update_project_expected_total_fee + +ALTER TABLE project ADD expectedTotalFee DOUBLE NULL; diff --git a/src/main/resources/db/changelog/changes/20240402_01_wayne/09_update_project_types.sql b/src/main/resources/db/changelog/changes/20240402_01_wayne/09_update_project_types.sql new file mode 100644 index 0000000..dc55569 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240402_01_wayne/09_update_project_types.sql @@ -0,0 +1,32 @@ +-- liquibase formatted sql +-- changeset wayne:update_project_types + +ALTER TABLE project ADD serviceTypeId INT NULL, ADD fundingTypeId INT NULL, ADD contractTypeId INT NULL, ADD locationId INT NULL; + +ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_CONTRACTTYPEID FOREIGN KEY (contractTypeId) REFERENCES contract_type (id); + +ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_FUNDINGTYPEID FOREIGN KEY (fundingTypeId) REFERENCES funding_type (id); + +ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_LOCATIONID FOREIGN KEY (locationId) REFERENCES location (id); + +ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_SERVICETYPEID FOREIGN KEY (serviceTypeId) REFERENCES service_type (id); + +CREATE TABLE project_buildingTypes ( + buildingTypesId INT NOT NULL, + projectId INT NOT NULL, + CONSTRAINT pk_project_buildingtypes PRIMARY KEY (buildingTypesId, projectId) +); + +CREATE TABLE project_workNatures ( + projectId INT NOT NULL, + workNaturesId INT NOT NULL, + CONSTRAINT pk_project_worknatures PRIMARY KEY (projectId, workNaturesId) +); + +ALTER TABLE project_workNatures ADD CONSTRAINT fk_prowor_on_project FOREIGN KEY (projectId) REFERENCES project (id); + +ALTER TABLE project_workNatures ADD CONSTRAINT fk_prowor_on_work_nature FOREIGN KEY (workNaturesId) REFERENCES work_nature (id); + +ALTER TABLE project_buildingTypes ADD CONSTRAINT fk_probui_on_building_type FOREIGN KEY (buildingTypesId) REFERENCES building_type (id); + +ALTER TABLE project_buildingTypes ADD CONSTRAINT fk_probui_on_project FOREIGN KEY (projectId) REFERENCES project (id); \ No newline at end of file