From 4d5ebfd83eb38cd4c8c0f321feec0d43f31764e4 Mon Sep 17 00:00:00 2001 From: Wayne Date: Fri, 5 Jan 2024 14:23:13 +0900 Subject: [PATCH 1/3] Add data entities --- .gitignore | 3 + README.md | 32 ++- build.gradle | 12 +- gradlew | 0 .../tsms/modules/data/entity/Company.java | 158 +++++++++++ .../modules/data/entity/CompanyHoliday.java | 37 +++ .../data/entity/CompanyHolidayRepository.java | 6 + .../data/entity/CompanyRepository.java | 6 + .../tsms/modules/data/entity/Customer.java | 101 +++++++ .../data/entity/CustomerRepository.java | 6 + .../data/entity/CustomerSubsidiary.java | 35 +++ .../tsms/modules/data/entity/Department.java | 46 ++++ .../data/entity/DepartmentRepository.java | 6 + .../ffii/tsms/modules/data/entity/Grade.java | 46 ++++ .../modules/data/entity/GradeRepository.java | 6 + .../modules/data/entity/InternalRate.java | 81 ++++++ .../tsms/modules/data/entity/Position.java | 46 ++++ .../data/entity/PositionRepository.java | 6 + .../ffii/tsms/modules/data/entity/Rate.java | 81 ++++++ .../modules/data/entity/RateRepository.java | 6 + .../ffii/tsms/modules/data/entity/Salary.java | 59 ++++ .../modules/data/entity/SalaryEffective.java | 40 +++ .../modules/data/entity/SalaryRepository.java | 6 + .../tsms/modules/data/entity/Service.java | 46 ++++ .../tsms/modules/data/entity/ServiceRate.java | 35 +++ .../data/entity/ServiceRepository.java | 6 + .../ffii/tsms/modules/data/entity/Skill.java | 46 ++++ .../modules/data/entity/SkillRepository.java | 6 + .../ffii/tsms/modules/data/entity/Staff.java | 257 ++++++++++++++++++ .../modules/data/entity/StaffRepository.java | 6 + .../tsms/modules/data/entity/Subsidiary.java | 103 +++++++ .../data/entity/SubsidiaryRepository.java | 6 + .../ffii/tsms/modules/data/entity/Team.java | 46 ++++ .../modules/data/entity/TeamRepository.java | 6 + .../changes/20240105_01_wayne/01_company.sql | 26 ++ .../20240105_01_wayne/02_company_holiday.sql | 15 + .../changes/20240105_01_wayne/03_customer.sql | 21 ++ .../20240105_01_wayne/04_subsidiary.sql | 21 ++ .../05_customer_subsidiary.sql | 13 + .../20240105_01_wayne/06_department.sql | 16 ++ .../changes/20240105_01_wayne/07_grade.sql | 16 ++ .../20240105_01_wayne/08_internal_rate.sql | 19 ++ .../changes/20240105_01_wayne/09_position.sql | 16 ++ .../changes/20240105_01_wayne/10_rate.sql | 19 ++ .../changes/20240105_01_wayne/11_salary.sql | 11 + .../20240105_01_wayne/12_salary_effective.sql | 11 + .../changes/20240105_01_wayne/13_service.sql | 16 ++ .../20240105_01_wayne/14_service_rate.sql | 13 + .../changes/20240105_01_wayne/15_skill.sql | 16 ++ .../changes/20240105_01_wayne/16_team.sql | 16 ++ .../changes/20240105_01_wayne/17_staff.sql | 54 ++++ 51 files changed, 1690 insertions(+), 17 deletions(-) mode change 100644 => 100755 gradlew create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Company.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/CompanyHoliday.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/CompanyHolidayRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/CompanyRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Customer.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Department.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Grade.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/GradeRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/InternalRate.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Position.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Rate.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/RateRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Salary.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/SalaryRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Service.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/ServiceRate.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/ServiceRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Skill.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/SkillRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Staff.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/Team.java create mode 100644 src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/01_company.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/02_company_holiday.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/03_customer.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/04_subsidiary.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/05_customer_subsidiary.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/06_department.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/07_grade.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/08_internal_rate.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/09_position.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/10_rate.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/11_salary.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/12_salary_effective.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/13_service.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/14_service_rate.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/15_skill.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/16_team.sql create mode 100644 src/main/resources/db/changelog/changes/20240105_01_wayne/17_staff.sql diff --git a/.gitignore b/.gitignore index c2065bc..9ae4d2f 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,6 @@ out/ ### VS Code ### .vscode/ + +### JPA Buddy ### +.jpb/ \ No newline at end of file diff --git a/README.md b/README.md index 963d420..7369438 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ -# Backend readme -1. Create a schema named "tsmsdb" in MySQL workbench -2. Put the launch.json file into the .vscode folder -3. Put the settings.json file into the .vscode folder -4. Run and Debug "Launch Local" +# TSMS Backend -# launch.json -``` +## Getting started +1. Create a schema named `tsmsdb` in MySQL workbench +2. Create a `launch.json` file and put it into the `.vscode` folder +```json { "version": "0.2.0", "configurations": [ @@ -28,12 +26,24 @@ ] } ``` -# settings.json -You may need to change some settings depending on your development environment -``` +3. Create a `settings.json` file and put it into the `.vscode` folder + *(You may need to change some settings depending on your development environment)* +```json { "java.configuration.updateBuildConfiguration": "interactive", "java.jdt.ls.java.home": "C:\\java\\jdk-17.0.8", "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable" } -``` \ No newline at end of file +``` + +4. Run and Debug "Launch Local" + +## Using gradle + +This project can also be run using gradle. + +### Running the application +After creating the table in MySQL, run +```shell +SPRING_PROFILES_ACTIVE=db-local,ldap-local ./gradlew bootRun +``` diff --git a/build.gradle b/build.gradle index 43a8eea..5bc33a9 100644 --- a/build.gradle +++ b/build.gradle @@ -22,10 +22,10 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-log4j2' + implementation 'org.springframework.boot:spring-boot-starter-log4j2' implementation 'org.springframework.security:spring-security-ldap' implementation 'org.liquibase:liquibase-core' - + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' implementation group: 'org.apache.poi', name: 'poi', version: '5.2.3' implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '5.2.3' @@ -41,7 +41,7 @@ dependencies { implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5' compileOnly group: 'jakarta.servlet', name: 'jakarta.servlet-api', version: '6.0.0' - + runtimeOnly 'com.mysql:mysql-connector-j' runtimeOnly 'com.unboundid:unboundid-ldapsdk:6.0.9' @@ -50,7 +50,7 @@ dependencies { } configurations { - all { - exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' - } + configureEach { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } } diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Company.java b/src/main/java/com/ffii/tsms/modules/data/entity/Company.java new file mode 100644 index 0000000..d24453d --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Company.java @@ -0,0 +1,158 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalTime; + +@Entity +@Table(name = "company") +public class Company extends BaseEntity { + @NotNull + @Column(name = "companyCode", length = 30) + private String companyCode; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @Column(name = "brNo", length = 20) + private String brNo; + + @Column(name = "contactName", length = 30) + private String contactName; + + @Column(name = "phone", length = 20) + private String phone; + + @Column(name = "otHourTo") + private LocalTime otHourTo; + + @Column(name = "otHourFrom") + private LocalTime otHourFrom; + + @Column(name = "normalHourTo") + private LocalTime normalHourTo; + + @Column(name = "normalHourFrom") + private LocalTime normalHourFrom; + + @Column(name = "currency", length = 20) + private String currency; + + @Column(name = "address", length = 500) + private String address; + + @Column(name = "district", length = 30) + private String district; + + @Column(name = "email") + private String email; + + public LocalTime getOtHourTo() { + return otHourTo; + } + + public void setOtHourTo(LocalTime otHourTo) { + this.otHourTo = otHourTo; + } + + public LocalTime getOtHourFrom() { + return otHourFrom; + } + + public void setOtHourFrom(LocalTime otHourFrom) { + this.otHourFrom = otHourFrom; + } + + public LocalTime getNormalHourTo() { + return normalHourTo; + } + + public void setNormalHourTo(LocalTime normalHourTo) { + this.normalHourTo = normalHourTo; + } + + public LocalTime getNormalHourFrom() { + return normalHourFrom; + } + + public void setNormalHourFrom(LocalTime normalHourFrom) { + this.normalHourFrom = normalHourFrom; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getContactName() { + return contactName; + } + + public void setContactName(String contactName) { + this.contactName = contactName; + } + + public String getBrNo() { + return brNo; + } + + public void setBrNo(String brNo) { + this.brNo = brNo; + } + + public String getCompanyCode() { + return companyCode; + } + + public void setCompanyCode(String companyCode) { + this.companyCode = companyCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CompanyHoliday.java b/src/main/java/com/ffii/tsms/modules/data/entity/CompanyHoliday.java new file mode 100644 index 0000000..7bb22ef --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CompanyHoliday.java @@ -0,0 +1,37 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; + +@Entity +@Table(name = "company_holiday") +public class CompanyHoliday extends BaseEntity { + @NotNull + @Column(name = "date") + private LocalDate date; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CompanyHolidayRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/CompanyHolidayRepository.java new file mode 100644 index 0000000..b5c67a9 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CompanyHolidayRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface CompanyHolidayRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CompanyRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/CompanyRepository.java new file mode 100644 index 0000000..534102d --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CompanyRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface CompanyRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Customer.java b/src/main/java/com/ffii/tsms/modules/data/entity/Customer.java new file mode 100644 index 0000000..33d8411 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Customer.java @@ -0,0 +1,101 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "customer") +public class Customer extends BaseEntity { + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + @Column(name = "address", length = 500) + private String address; + + @Column(name = "district", length = 30) + private String district; + + @Column(name = "email") + private String email; + + @Column(name = "phone", length = 20) + private String phone; + + @Column(name = "contactName", length = 30) + private String contactName; + + @Column(name = "brNo", length = 20) + private String brNo; + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getContactName() { + return contactName; + } + + public void setContactName(String contactName) { + this.contactName = contactName; + } + + public String getBrNo() { + return brNo; + } + + public void setBrNo(String brNo) { + this.brNo = brNo; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java new file mode 100644 index 0000000..743a41c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface CustomerRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java new file mode 100644 index 0000000..6065480 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java @@ -0,0 +1,35 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.IdEntity; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "customer_subsidiary") +public class CustomerSubsidiary extends IdEntity { + @ManyToOne + @JoinColumn(name = "customerId") + private Customer customer; + + @ManyToOne + @JoinColumn(name = "subsidiaryId") + private Subsidiary subsidiary; + + public Subsidiary getSubsidiary() { + return subsidiary; + } + + public void setSubsidiary(Subsidiary subsidiary) { + this.subsidiary = subsidiary; + } + + public Customer getCustomer() { + return customer; + } + + public void setCustomerId(Customer customer) { + this.customer = customer; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Department.java b/src/main/java/com/ffii/tsms/modules/data/entity/Department.java new file mode 100644 index 0000000..b143424 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Department.java @@ -0,0 +1,46 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "department") +public class Department extends BaseEntity { + @Column(name = "description", length = 1500) + private String description; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java new file mode 100644 index 0000000..e1b5f46 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface DepartmentRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Grade.java b/src/main/java/com/ffii/tsms/modules/data/entity/Grade.java new file mode 100644 index 0000000..19ece59 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Grade.java @@ -0,0 +1,46 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "grade") +public class Grade extends BaseEntity { + @Column(name = "description", length = 1500) + private String description; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/GradeRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/GradeRepository.java new file mode 100644 index 0000000..be264ea --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/GradeRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface GradeRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/InternalRate.java b/src/main/java/com/ffii/tsms/modules/data/entity/InternalRate.java new file mode 100644 index 0000000..a2f7d14 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/InternalRate.java @@ -0,0 +1,81 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; + +@Entity +@Table(name = "internal_rate") +public class InternalRate extends BaseEntity { + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + @Column(name = "effectFrom") + private LocalDate effectFrom; + + @Column(name = "effectTo") + private LocalDate effectTo; + + @Column(name = "normalRate") + private Double normalRate; + + @Column(name = "otRate") + private Double otRate; + + public Double getOtRate() { + return otRate; + } + + public void setOtRate(Double otRate) { + this.otRate = otRate; + } + + public Double getNormalRate() { + return normalRate; + } + + public void setNormalRate(Double normalRate) { + this.normalRate = normalRate; + } + + public LocalDate getEffectTo() { + return effectTo; + } + + public void setEffectTo(LocalDate effectTo) { + this.effectTo = effectTo; + } + + public LocalDate getEffectFrom() { + return effectFrom; + } + + public void setEffectFrom(LocalDate effectFrom) { + this.effectFrom = effectFrom; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Position.java b/src/main/java/com/ffii/tsms/modules/data/entity/Position.java new file mode 100644 index 0000000..83fe927 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Position.java @@ -0,0 +1,46 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "position") +public class Position extends BaseEntity { + @Column(name = "description", length = 1500) + private String description; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java new file mode 100644 index 0000000..4c1894c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface PositionRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Rate.java b/src/main/java/com/ffii/tsms/modules/data/entity/Rate.java new file mode 100644 index 0000000..2de7ef7 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Rate.java @@ -0,0 +1,81 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; + +@Entity +@Table(name = "rate") +public class Rate extends BaseEntity { + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + @Column(name = "effectFrom") + private LocalDate effectFrom; + + @Column(name = "effectTo") + private LocalDate effectTo; + + @Column(name = "normalRate") + private Double normalRate; + + @Column(name = "otRate") + private Double otRate; + + public Double getOtRate() { + return otRate; + } + + public void setOtRate(Double otRate) { + this.otRate = otRate; + } + + public Double getNormalRate() { + return normalRate; + } + + public void setNormalRate(Double normalRate) { + this.normalRate = normalRate; + } + + public LocalDate getEffectTo() { + return effectTo; + } + + public void setEffectTo(LocalDate effectTo) { + this.effectTo = effectTo; + } + + public LocalDate getEffectFrom() { + return effectFrom; + } + + public void setEffectFrom(LocalDate effectFrom) { + this.effectFrom = effectFrom; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/RateRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/RateRepository.java new file mode 100644 index 0000000..fb476d7 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/RateRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface RateRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Salary.java b/src/main/java/com/ffii/tsms/modules/data/entity/Salary.java new file mode 100644 index 0000000..7e1d35d --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Salary.java @@ -0,0 +1,59 @@ +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 = "salary") +public class Salary extends IdEntity { + @NotNull + @Column(name = "salaryPoint") + private Integer salaryPoint; + + @NotNull + @Column(name = "lowerLimit") + private Integer lowerLimit; + + @NotNull + @Column(name = "upperLimit") + private Integer upperLimit; + + @NotNull + @Column(name = "increment") + private Integer increment; + + public Integer getIncrement() { + return increment; + } + + public void setIncrement(Integer increment) { + this.increment = increment; + } + + public Integer getLowerLimit() { + return lowerLimit; + } + + public void setLowerLimit(Integer lowerLimit) { + this.lowerLimit = lowerLimit; + } + + public Integer getUpperLimit() { + return upperLimit; + } + + public void setUpperLimit(Integer upperLimit) { + this.upperLimit = upperLimit; + } + + public void setSalaryPoint(Integer salaryPoint) { + this.salaryPoint = salaryPoint; + } + + public Integer getSalaryPoint() { + return salaryPoint; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java b/src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java new file mode 100644 index 0000000..2b01f9c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java @@ -0,0 +1,40 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.IdEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; + +@Entity +@Table(name = "salary_effective") +public class SalaryEffective extends IdEntity { + @NotNull + @Column(name = "date") + private LocalDate date; + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + @ManyToOne + @JoinColumn(name = "salaryId") + @NotNull + private Salary salary; + + public Salary getSalary() { + return salary; + } + + public void setSalary(Salary salary) { + this.salary = salary; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/SalaryRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/SalaryRepository.java new file mode 100644 index 0000000..093be87 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/SalaryRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface SalaryRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Service.java b/src/main/java/com/ffii/tsms/modules/data/entity/Service.java new file mode 100644 index 0000000..841987e --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Service.java @@ -0,0 +1,46 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "service") +public class Service extends BaseEntity { + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "type", length = 30) + private String type; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/ServiceRate.java b/src/main/java/com/ffii/tsms/modules/data/entity/ServiceRate.java new file mode 100644 index 0000000..fa2e19b --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/ServiceRate.java @@ -0,0 +1,35 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.IdEntity; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "service_rate") +public class ServiceRate extends IdEntity { + @ManyToOne + @JoinColumn(name = "rateId") + private Rate rate; + + @ManyToOne + @JoinColumn(name = "serviceId") + private Service service; + + public Rate getRate() { + return rate; + } + + public void setRate(Rate rate) { + this.rate = rate; + } + + public Service getService() { + return service; + } + + public void setService(Service service) { + this.service = service; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/ServiceRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/ServiceRepository.java new file mode 100644 index 0000000..74bb204 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/ServiceRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface ServiceRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Skill.java b/src/main/java/com/ffii/tsms/modules/data/entity/Skill.java new file mode 100644 index 0000000..fe0771e --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Skill.java @@ -0,0 +1,46 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "skill") +public class Skill extends BaseEntity { + @Column(name = "description", length = 1500) + private String description; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/SkillRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/SkillRepository.java new file mode 100644 index 0000000..1b47ce9 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/SkillRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface SkillRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Staff.java b/src/main/java/com/ffii/tsms/modules/data/entity/Staff.java new file mode 100644 index 0000000..001368f --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Staff.java @@ -0,0 +1,257 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import com.ffii.tsms.modules.user.entity.User; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; + +@Entity +@Table(name = "staff") +public class Staff extends BaseEntity { + @NotNull + @OneToOne + @JoinColumn(name = "userId", unique = true) + private User user; + + @Column(name = "joinDate") + private LocalDate joinDate; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "staffId", length = 30) + private String staffId; + + @ManyToOne + @JoinColumn(name = "currentPosition") + private Position currentPosition; + + @ManyToOne + @JoinColumn(name = "joinPosition") + private Position joinPosition; + + @NotNull + @ManyToOne + @JoinColumn(name = "companyId") + private Company company; + + @ManyToOne + @JoinColumn(name = "gradeId") + private Grade grade; + + @ManyToOne + @JoinColumn(name = "teamId") + private Team team; + + @ManyToOne + @JoinColumn(name = "skillSetId") + private Skill skill; + + @NotNull + @ManyToOne + @JoinColumn(name = "salaryEffId") + private SalaryEffective salaryEffective; + + @ManyToOne + @JoinColumn(name = "departmentId") + private Department department; + + @Column(name = "phone2", length = 20) + private String phone2; + + @Column(name = "phone1", length = 20) + private String phone1; + + @Column(name = "email") + private String email; + + @Column(name = "emergContactName", length = 150) + private String emergContactName; + + @Column(name = "emergContactPhone", length = 20) + private String emergContactPhone; + + @Column(name = "employType", length = 30) + private String employType; + + @Column(name = "departDate") + private LocalDate departDate; + + @Column(name = "departReason", length = 500) + private String departReason; + + @Column(name = "remark", length = 1500) + private String remark; + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getDepartReason() { + return departReason; + } + + public void setDepartReason(String departReason) { + this.departReason = departReason; + } + + public LocalDate getDepartDate() { + return departDate; + } + + public void setDepartDate(LocalDate departDate) { + this.departDate = departDate; + } + + public String getEmployType() { + return employType; + } + + public void setEmployType(String employType) { + this.employType = employType; + } + + public String getEmergContactPhone() { + return emergContactPhone; + } + + public void setEmergContactPhone(String emergContactPhone) { + this.emergContactPhone = emergContactPhone; + } + + public String getEmergContactName() { + return emergContactName; + } + + public void setEmergContactName(String emergContactName) { + this.emergContactName = emergContactName; + } + + public String getPhone2() { + return phone2; + } + + public void setPhone2(String phone2) { + this.phone2 = phone2; + } + + public String getPhone1() { + return phone1; + } + + public void setPhone1(String phone1) { + this.phone1 = phone1; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public SalaryEffective getSalaryEffective() { + return salaryEffective; + } + + public void setSalaryEffective(SalaryEffective salaryEffective) { + this.salaryEffective = salaryEffective; + } + + public Skill getSkill() { + return skill; + } + + public void setSkill(Skill skill) { + this.skill = skill; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public Grade getGrade() { + return grade; + } + + public void setGrade(Grade grade) { + this.grade = grade; + } + + public Team getTeam() { + return team; + } + + public void setTeam(Team team) { + this.team = team; + } + + public Department getDepartment() { + return department; + } + + public void setDepartment(Department department) { + this.department = department; + } + + public Position getCurrentPosition() { + return currentPosition; + } + + public void setCurrentPosition(Position currentPosition) { + this.currentPosition = currentPosition; + } + + public Position getJoinPosition() { + return joinPosition; + } + + public void setJoinPosition(Position joinPosition) { + this.joinPosition = joinPosition; + } + + public LocalDate getJoinDate() { + return joinDate; + } + + public void setJoinDate(LocalDate joinDate) { + this.joinDate = joinDate; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getStaffId() { + return staffId; + } + + public void setStaffId(String staffId) { + this.staffId = staffId; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..8fe4cd8 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface StaffRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java b/src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java new file mode 100644 index 0000000..d0ff445 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java @@ -0,0 +1,103 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalTime; + +@Entity +@Table(name = "subsidiary") +public class Subsidiary extends BaseEntity { + @NotNull + @Column(name = "code", length = 30) + private String code; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @Column(name = "brNo", length = 20) + private String brNo; + + @Column(name = "contactName", length = 30) + private String contactName; + + @Column(name = "phone", length = 20) + private String phone; + + @Column(name = "address", length = 500) + private String address; + + @Column(name = "district", length = 30) + private String district; + + @Column(name = "email") + private String email; + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getContactName() { + return contactName; + } + + public void setContactName(String contactName) { + this.contactName = contactName; + } + + public String getBrNo() { + return brNo; + } + + public void setBrNo(String brNo) { + this.brNo = brNo; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java new file mode 100644 index 0000000..faaec53 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface SubsidiaryRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/Team.java b/src/main/java/com/ffii/tsms/modules/data/entity/Team.java new file mode 100644 index 0000000..e5e1b5e --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/Team.java @@ -0,0 +1,46 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; + +@Entity +@Table(name = "team") +public class Team extends BaseEntity { + @Column(name = "description", length = 1500) + private String description; + + @NotNull + @Column(name = "name", length = 150) + private String name; + + @NotNull + @Column(name = "code", length = 30) + private String code; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java new file mode 100644 index 0000000..f9bca98 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.data.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface TeamRepository extends AbstractRepository { +} \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/01_company.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/01_company.sql new file mode 100644 index 0000000..a774000 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/01_company.sql @@ -0,0 +1,26 @@ +-- liquibase formatted sql + +-- changeset wayne:company +CREATE TABLE company ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + companyCode VARCHAR(30) NOT NULL, + name VARCHAR(150) NOT NULL, + brNo VARCHAR(20) NULL, + contactName VARCHAR(30) NULL, + phone VARCHAR(20) NULL, + otHourTo time NULL, + otHourFrom time NULL, + normalHourTo time NULL, + normalHourFrom time NULL, + currency VARCHAR(20) NULL, + address VARCHAR(500) NULL, + district VARCHAR(30) NULL, + email VARCHAR(255) NULL, + CONSTRAINT pk_company PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/02_company_holiday.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/02_company_holiday.sql new file mode 100644 index 0000000..a38a028 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/02_company_holiday.sql @@ -0,0 +1,15 @@ +-- liquibase formatted sql + +-- changeset wayne:company_holiday +CREATE TABLE company_holiday ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + date date NOT NULL, + name VARCHAR(150) NOT NULL, + CONSTRAINT pk_company_holiday PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/03_customer.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/03_customer.sql new file mode 100644 index 0000000..f6fcaf8 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/03_customer.sql @@ -0,0 +1,21 @@ +-- liquibase formatted sql + +-- changeset wayne:customer +CREATE TABLE customer ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + address VARCHAR(500) NULL, + district VARCHAR(30) NULL, + email VARCHAR(255) NULL, + phone VARCHAR(20) NULL, + contactName VARCHAR(30) NULL, + brNo VARCHAR(20) NULL, + CONSTRAINT pk_customer PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/04_subsidiary.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/04_subsidiary.sql new file mode 100644 index 0000000..5b58d76 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/04_subsidiary.sql @@ -0,0 +1,21 @@ +-- liquibase formatted sql + +-- changeset wayne:subsidiary +CREATE TABLE subsidiary ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + code VARCHAR(30) NOT NULL, + name VARCHAR(150) NOT NULL, + brNo VARCHAR(20) NULL, + contactName VARCHAR(30) NULL, + phone VARCHAR(20) NULL, + address VARCHAR(500) NULL, + district VARCHAR(30) NULL, + email VARCHAR(255) NULL, + CONSTRAINT pk_subsidiary PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/05_customer_subsidiary.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/05_customer_subsidiary.sql new file mode 100644 index 0000000..9829a25 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/05_customer_subsidiary.sql @@ -0,0 +1,13 @@ +-- liquibase formatted sql + +-- changeset wayne:customer_subsidiary +CREATE TABLE customer_subsidiary ( + id INT NOT NULL AUTO_INCREMENT, + customerId INT NULL, + subsidiaryId INT NULL, + CONSTRAINT pk_customer_subsidiary PRIMARY KEY (id) +); + +ALTER TABLE customer_subsidiary ADD CONSTRAINT FK_CUSTOMER_SUBSIDIARY_ON_CUSTOMERID FOREIGN KEY (customerId) REFERENCES customer (id); + +ALTER TABLE customer_subsidiary ADD CONSTRAINT FK_CUSTOMER_SUBSIDIARY_ON_SUBSIDIARYID FOREIGN KEY (subsidiaryId) REFERENCES subsidiary (id); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/06_department.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/06_department.sql new file mode 100644 index 0000000..759cfde --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/06_department.sql @@ -0,0 +1,16 @@ +-- liquibase formatted sql + +-- changeset wayne:department +CREATE TABLE department ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + `description` VARCHAR(1500) NULL, + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + CONSTRAINT pk_department PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/07_grade.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/07_grade.sql new file mode 100644 index 0000000..0798eee --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/07_grade.sql @@ -0,0 +1,16 @@ +-- liquibase formatted sql + +-- changeset wayne:grade +CREATE TABLE grade ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + `description` VARCHAR(1500) NULL, + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + CONSTRAINT pk_grade PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/08_internal_rate.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/08_internal_rate.sql new file mode 100644 index 0000000..9de6c39 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/08_internal_rate.sql @@ -0,0 +1,19 @@ +-- liquibase formatted sql + +-- changeset wayne:internal_rate +CREATE TABLE internal_rate ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + effectFrom date NULL, + effectTo date NULL, + normalRate DOUBLE NULL, + otRate DOUBLE NULL, + CONSTRAINT pk_internal_rate PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/09_position.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/09_position.sql new file mode 100644 index 0000000..3631a09 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/09_position.sql @@ -0,0 +1,16 @@ +-- liquibase formatted sql + +-- changeset wayne:position +CREATE TABLE position ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + `description` VARCHAR(1500) NULL, + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + CONSTRAINT pk_position PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/10_rate.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/10_rate.sql new file mode 100644 index 0000000..18d4174 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/10_rate.sql @@ -0,0 +1,19 @@ +-- liquibase formatted sql + +-- changeset wayne:rate +CREATE TABLE rate ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + effectFrom date NULL, + effectTo date NULL, + normalRate DOUBLE NULL, + otRate DOUBLE NULL, + CONSTRAINT pk_rate PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/11_salary.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/11_salary.sql new file mode 100644 index 0000000..1f4b58d --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/11_salary.sql @@ -0,0 +1,11 @@ +-- liquibase formatted sql + +-- changeset wayne:salary +CREATE TABLE salary ( + id INT NOT NULL AUTO_INCREMENT, + salaryPoint INT NOT NULL, + lowerLimit INT NOT NULL, + upperLimit INT NOT NULL, + increment INT NOT NULL, + CONSTRAINT pk_salary PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/12_salary_effective.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/12_salary_effective.sql new file mode 100644 index 0000000..df7d3b7 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/12_salary_effective.sql @@ -0,0 +1,11 @@ +-- liquibase formatted sql + +-- changeset wayne:salary_effective +CREATE TABLE salary_effective ( + id INT NOT NULL AUTO_INCREMENT, + date date NOT NULL, + salaryId INT NOT NULL, + CONSTRAINT pk_salary_effective PRIMARY KEY (id) +); + +ALTER TABLE salary_effective ADD CONSTRAINT FK_SALARY_EFFECTIVE_ON_SALARYID FOREIGN KEY (salaryId) REFERENCES salary (id); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/13_service.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/13_service.sql new file mode 100644 index 0000000..0b6075a --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/13_service.sql @@ -0,0 +1,16 @@ +-- liquibase formatted sql + +-- changeset wayne:service +CREATE TABLE service ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + name VARCHAR(150) NULL, + type VARCHAR(30) NOT NULL, + code VARCHAR(30) NOT NULL, + CONSTRAINT pk_service PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/14_service_rate.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/14_service_rate.sql new file mode 100644 index 0000000..898360f --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/14_service_rate.sql @@ -0,0 +1,13 @@ +-- liquibase formatted sql + +-- changeset wayne:service_rate +CREATE TABLE service_rate ( + id INT NOT NULL AUTO_INCREMENT, + rateId INT NULL, + serviceId INT NULL, + CONSTRAINT pk_service_rate PRIMARY KEY (id) +); + +ALTER TABLE service_rate ADD CONSTRAINT FK_SERVICE_RATE_ON_RATEID FOREIGN KEY (rateId) REFERENCES rate (id); + +ALTER TABLE service_rate ADD CONSTRAINT FK_SERVICE_RATE_ON_SERVICEID FOREIGN KEY (serviceId) REFERENCES service (id); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/15_skill.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/15_skill.sql new file mode 100644 index 0000000..6883b1e --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/15_skill.sql @@ -0,0 +1,16 @@ +-- liquibase formatted sql + +-- changeset wayne:skill +CREATE TABLE skill ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + `description` VARCHAR(1500) NULL, + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + CONSTRAINT pk_skill PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/16_team.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/16_team.sql new file mode 100644 index 0000000..356ea31 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/16_team.sql @@ -0,0 +1,16 @@ +-- liquibase formatted sql + +-- changeset wayne:team +CREATE TABLE team ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + `description` VARCHAR(1500) NULL, + name VARCHAR(150) NOT NULL, + code VARCHAR(30) NOT NULL, + CONSTRAINT pk_team PRIMARY KEY (id) +); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240105_01_wayne/17_staff.sql b/src/main/resources/db/changelog/changes/20240105_01_wayne/17_staff.sql new file mode 100644 index 0000000..43e0b99 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240105_01_wayne/17_staff.sql @@ -0,0 +1,54 @@ +-- liquibase formatted sql + +-- changeset wayne:staff +CREATE TABLE staff ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + userId INT NOT NULL, + joinDate date NULL, + name VARCHAR(150) NOT NULL, + staffId VARCHAR(30) NOT NULL, + currentPosition INT NULL, + joinPosition INT NULL, + companyId INT NOT NULL, + gradeId INT NULL, + teamId INT NULL, + skillSetId INT NULL, + salaryEffId INT NOT NULL, + departmentId INT NULL, + phone2 VARCHAR(20) NULL, + phone1 VARCHAR(20) NULL, + email VARCHAR(255) NULL, + emergContactName VARCHAR(150) NULL, + emergContactPhone VARCHAR(20) NULL, + employType VARCHAR(30) NULL, + departDate date NULL, + departReason VARCHAR(500) NULL, + remark VARCHAR(1500) NULL, + CONSTRAINT pk_staff PRIMARY KEY (id) +); + +ALTER TABLE staff ADD CONSTRAINT uc_staff_userid UNIQUE (userId); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_COMPANYID FOREIGN KEY (companyId) REFERENCES company (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_CURRENTPOSITION FOREIGN KEY (currentPosition) REFERENCES position (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_DEPARTMENTID FOREIGN KEY (departmentId) REFERENCES department (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_GRADEID FOREIGN KEY (gradeId) REFERENCES grade (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_JOINPOSITION FOREIGN KEY (joinPosition) REFERENCES position (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_SALARYEFFID FOREIGN KEY (salaryEffId) REFERENCES salary_effective (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_SKILLSETID FOREIGN KEY (skillSetId) REFERENCES skill (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_TEAMID FOREIGN KEY (teamId) REFERENCES team (id); + +ALTER TABLE staff ADD CONSTRAINT FK_STAFF_ON_USERID FOREIGN KEY (userId) REFERENCES user (id); \ No newline at end of file From e5a0023f3eabf19a2deda1f749bcb1d08dc425a2 Mon Sep 17 00:00:00 2001 From: Wayne Date: Sun, 28 Jan 2024 18:26:48 +0900 Subject: [PATCH 2/3] Add project entities --- build.gradle | 6 +- settings.gradle | 8 +++ .../project/entity/PaymentMilestone.kt | 19 +++++++ .../entity/PaymentMilestoneRepository.kt | 6 ++ .../tsms/modules/project/entity/Project.kt | 55 +++++++++++++++++++ .../project/entity/ProjectRepository.kt | 6 ++ .../modules/project/entity/ProjectTask.kt | 29 ++++++++++ .../project/entity/ProjectTaskRepository.kt | 6 ++ .../modules/project/entity/StaffAllocation.kt | 43 +++++++++++++++ .../entity/StaffAllocationRepository.kt | 6 ++ .../ffii/tsms/modules/project/entity/Task.kt | 30 ++++++++++ .../modules/project/entity/TaskRepository.kt | 6 ++ .../modules/project/entity/TaskTemplate.kt | 23 ++++++++ .../project/entity/TaskTemplateRepository.kt | 6 ++ .../changes/20240128_01_wayne/01_project.sql | 30 ++++++++++ .../changes/20240128_01_wayne/02_task.sql | 32 +++++++++++ .../20240128_01_wayne/03_milestone.sql | 9 +++ .../20240128_01_wayne/04_project_task.sql | 18 ++++++ .../20240128_01_wayne/05_staff_allocation.sql | 21 +++++++ 19 files changed, 358 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestone.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestoneRepository.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/Project.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/ProjectTask.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/ProjectTaskRepository.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocation.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/Task.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/TaskRepository.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplateRepository.kt create mode 100644 src/main/resources/db/changelog/changes/20240128_01_wayne/01_project.sql create mode 100644 src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql create mode 100644 src/main/resources/db/changelog/changes/20240128_01_wayne/03_milestone.sql create mode 100644 src/main/resources/db/changelog/changes/20240128_01_wayne/04_project_task.sql create mode 100644 src/main/resources/db/changelog/changes/20240128_01_wayne/05_staff_allocation.sql diff --git a/build.gradle b/build.gradle index 5bc33a9..b6b333e 100644 --- a/build.gradle +++ b/build.gradle @@ -2,13 +2,13 @@ plugins { id 'java' id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' + id 'org.jetbrains.kotlin.jvm' } group = 'com.ffii' version = '0.0.1-SNAPSHOT' java { - sourceCompatibility = '17' } repositories { @@ -47,6 +47,7 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" } configurations { @@ -54,3 +55,6 @@ configurations { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } } +kotlin { + jvmToolchain(17) +} diff --git a/settings.gradle b/settings.gradle index 3de5431..6741f12 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,9 @@ +pluginManagement { + plugins { + id 'org.jetbrains.kotlin.jvm' version '1.9.21' + } +} +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' +} rootProject.name = 'TSMS-backend' diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestone.kt b/src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestone.kt new file mode 100644 index 0000000..474bdd3 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestone.kt @@ -0,0 +1,19 @@ +package com.ffii.tsms.modules.project.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 = "milestone") +open class PaymentMilestone : IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null + + @NotNull + @Column(name = "description") + open var description: String? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestoneRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestoneRepository.kt new file mode 100644 index 0000000..4af39cf --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestoneRepository.kt @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.project.entity; + +import com.ffii.core.support.AbstractRepository + +interface PaymentMilestoneRepository : AbstractRepository { +} \ 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 new file mode 100644 index 0000000..daa4a96 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/Project.kt @@ -0,0 +1,55 @@ +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 jakarta.persistence.* +import jakarta.validation.constraints.NotNull +import java.time.LocalDate + +@Entity +@Table(name = "project") +open class Project : BaseEntity() { + @NotNull + @Column(name = "name", length = 100) + open var name: String? = null + + @NotNull + @Column(name = "description") + open var description: String? = null + + @Column(name = "planStart") + open var planStart: LocalDate? = null + + @Column(name = "actualStart") + open var actualStart: LocalDate? = null + + @Column(name = "planEnd") + open var planEnd: LocalDate? = null + + @Column(name = "actualEnd") + open var actualEnd: LocalDate? = null + + @ManyToOne + @JoinColumn(name = "teamLead") + open var teamLead: Staff? = null + + @ManyToOne + @JoinColumn(name = "customerId") + open var customer: Customer? = null + + @Column(name = "custLeadName", length = 30) + open var custLeadName: String? = null + + @Column(name = "custLeadPhone", length = 20) + open var custLeadPhone: String? = null + + @Column(name = "custLeadEmail") + open var custLeadEmail: String? = null + + @Column(name = "remark", length = 1500) + open var remark: String? = null + + @Column(name = "billStatus") + open var billStatus: Boolean? = null +} \ 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 new file mode 100644 index 0000000..2fbadce --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.project.entity; + +import com.ffii.core.support.AbstractRepository + +interface ProjectRepository : AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/ProjectTask.kt b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectTask.kt new file mode 100644 index 0000000..000a4d1 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectTask.kt @@ -0,0 +1,29 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.* +import jakarta.validation.constraints.NotNull + +@Entity +@Table(name = "project_task") +open class ProjectTask : IdEntity() { + @NotNull + @ManyToOne + open var project: Project? = null + + @ManyToOne + @JoinColumn(name = "milestoneId") + open var paymentMilestone: PaymentMilestone? = null + + @NotNull + @ManyToOne + open var task: Task? = null + + @NotNull + @Column(name = "paymentPercentage") + open var paymentPercentage: Double? = null + + @NotNull + @Column(name = "reminderPercentage") + open var reminderPercentage: Double? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/ProjectTaskRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectTaskRepository.kt new file mode 100644 index 0000000..bc0dff7 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/ProjectTaskRepository.kt @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.project.entity; + +import com.ffii.core.support.AbstractRepository + +interface ProjectTaskRepository : AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocation.kt b/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocation.kt new file mode 100644 index 0000000..6fdfe59 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocation.kt @@ -0,0 +1,43 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.entity.IdEntity +import com.ffii.tsms.modules.data.entity.Staff +import jakarta.persistence.* +import jakarta.validation.constraints.NotNull +import java.time.LocalDate + +@Entity +@Table(name = "staff_allocation") +open class StaffAllocation : IdEntity() { + @NotNull + @ManyToOne + open var project: Project? = null + + @NotNull + @ManyToOne + open var staff: Staff? = null + + @Column(name = "allocatedDateFrom") + open var allocatedDateFrom: LocalDate? = null + + @Column(name = "allocatedDateTo") + open var allocatedDateTo: LocalDate? = null + + @Column(name = "normalAllocated") + open var normalAllocated: Double? = null + + @Column(name = "normalConsumed") + open var normalConsumed: Double? = null + + @Column(name = "otAllocated") + open var otAllocated: Double? = null + + @Column(name = "otConsumed") + open var otConsumed: Double? = null + + @Column(name = "normalBilled") + open var normalBilled: Double? = null + + @Column(name = "otBilled") + open var otBilled: Double? = null +} \ 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 new file mode 100644 index 0000000..38a06a8 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.project.entity; + +import com.ffii.core.support.AbstractRepository + +interface StaffAllocationRepository : AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt b/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt new file mode 100644 index 0000000..3d8d3cd --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt @@ -0,0 +1,30 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.entity.BaseEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table +import org.hibernate.proxy.HibernateProxy + +@Entity +@Table(name = "task") +open class Task : BaseEntity() { + @Column(name = "name") + open var name: String? = null + + @Column(name = "description") + open var description: 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 Task + + 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/project/entity/TaskRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/TaskRepository.kt new file mode 100644 index 0000000..f76d823 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/TaskRepository.kt @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.project.entity; + +import com.ffii.core.support.AbstractRepository + +interface TaskRepository : AbstractRepository { +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt b/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt new file mode 100644 index 0000000..06dfcf8 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt @@ -0,0 +1,23 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.* +import jakarta.validation.constraints.NotNull + +@Entity +@Table(name = "task_template") +open class TaskTemplate : IdEntity() { + @NotNull + @Column(name = "code") + open var code: String? = null + + @NotNull + @Column(name = "name") + open var name: String? = null + + @ManyToMany + @JoinTable(name = "task_template_tasks", + joinColumns = [JoinColumn(name = "taskTemplateId")], + inverseJoinColumns = [JoinColumn(name = "tasksId")]) + open var tasks: MutableSet = mutableSetOf() +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplateRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplateRepository.kt new file mode 100644 index 0000000..90efb7c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplateRepository.kt @@ -0,0 +1,6 @@ +package com.ffii.tsms.modules.project.entity; + +import com.ffii.core.support.AbstractRepository + +interface TaskTemplateRepository : AbstractRepository { +} \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/01_project.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/01_project.sql new file mode 100644 index 0000000..8958e49 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/01_project.sql @@ -0,0 +1,30 @@ +-- liquibase formatted sql + +-- changeset wayne:project +CREATE TABLE project ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + name VARCHAR(100) NOT NULL, + `description` VARCHAR(255) NOT NULL, + planStart date NULL, + actualStart date NULL, + planEnd date NULL, + actualEnd date NULL, + teamLead INT NULL, + customerId INT NULL, + custLeadName VARCHAR(30) NULL, + custLeadPhone VARCHAR(20) NULL, + custLeadEmail VARCHAR(255) NULL, + remark VARCHAR(1500) NULL, + billStatus TINYINT NULL, + CONSTRAINT pk_project PRIMARY KEY (id) +); + +ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_CUSTOMERID FOREIGN KEY (customerId) REFERENCES customer (id); + +ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_TEAMLEAD FOREIGN KEY (teamLead) REFERENCES staff (id); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql new file mode 100644 index 0000000..d53374c --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql @@ -0,0 +1,32 @@ +-- liquibase formatted sql + +-- changeset wayne:task +CREATE TABLE task ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + name VARCHAR(255) NULL, + `description` VARCHAR(255) NULL, + CONSTRAINT pk_task PRIMARY KEY (id) +); + +CREATE TABLE task_template ( + id INT NOT NULL AUTO_INCREMENT, + code VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + CONSTRAINT pk_task_template PRIMARY KEY (id) +); + +CREATE TABLE task_template_tasks ( + taskTemplateId INT NOT NULL, + tasksId INT NOT NULL, + CONSTRAINT pk_task_template_tasks PRIMARY KEY (taskTemplateId, tasksId) +); + +ALTER TABLE task_template_tasks ADD CONSTRAINT fk_tastemtas_on_task FOREIGN KEY (tasksId) REFERENCES task (id); + +ALTER TABLE task_template_tasks ADD CONSTRAINT fk_tastemtas_on_task_template FOREIGN KEY (taskTemplateId) REFERENCES task_template (id); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/03_milestone.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/03_milestone.sql new file mode 100644 index 0000000..72d7550 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/03_milestone.sql @@ -0,0 +1,9 @@ +-- liquibase formatted sql + +-- changeset wayne:milestone +CREATE TABLE milestone ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + `description` VARCHAR(255) NOT NULL, + CONSTRAINT pk_milestone PRIMARY KEY (id) +); diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/04_project_task.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/04_project_task.sql new file mode 100644 index 0000000..c387cb6 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/04_project_task.sql @@ -0,0 +1,18 @@ +-- liquibase formatted sql + +-- changeset wayne:project_task +CREATE TABLE project_task ( + id INT NOT NULL AUTO_INCREMENT, + project_id INT NOT NULL, + milestoneId INT NULL, + task_id INT NOT NULL, + paymentPercentage DOUBLE NOT NULL, + reminderPercentage DOUBLE NOT NULL, + CONSTRAINT pk_project_task PRIMARY KEY (id) +); + +ALTER TABLE project_task ADD CONSTRAINT FK_PROJECT_TASK_ON_MILESTONEID FOREIGN KEY (milestoneId) REFERENCES milestone (id); + +ALTER TABLE project_task ADD CONSTRAINT FK_PROJECT_TASK_ON_PROJECT FOREIGN KEY (project_id) REFERENCES project (id); + +ALTER TABLE project_task ADD CONSTRAINT FK_PROJECT_TASK_ON_TASK FOREIGN KEY (task_id) REFERENCES task (id); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/05_staff_allocation.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/05_staff_allocation.sql new file mode 100644 index 0000000..1513069 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/05_staff_allocation.sql @@ -0,0 +1,21 @@ +-- liquibase formatted sql + +-- changeset wayne:staff_allocation +CREATE TABLE staff_allocation ( + id INT NOT NULL AUTO_INCREMENT, + project_id INT NOT NULL, + staff_id INT NOT NULL, + allocatedDateFrom date NULL, + allocatedDateTo date NULL, + normalAllocated DOUBLE NULL, + normalConsumed DOUBLE NULL, + otAllocated DOUBLE NULL, + otConsumed DOUBLE NULL, + normalBilled DOUBLE NULL, + otBilled DOUBLE NULL, + CONSTRAINT pk_staff_allocation PRIMARY KEY (id) +); + +ALTER TABLE staff_allocation ADD CONSTRAINT FK_STAFF_ALLOCATION_ON_PROJECT FOREIGN KEY (project_id) REFERENCES project (id); + +ALTER TABLE staff_allocation ADD CONSTRAINT FK_STAFF_ALLOCATION_ON_STAFF FOREIGN KEY (staff_id) REFERENCES staff (id); \ No newline at end of file From 68485d698bee252dcaf14d6f940e26da43a88562 Mon Sep 17 00:00:00 2001 From: Wayne Date: Thu, 1 Feb 2024 13:56:52 +0900 Subject: [PATCH 3/3] Add task endpoints --- build.gradle | 6 +- .../ffii/tsms/modules/project/entity/Task.kt | 10 ++- .../tsms/modules/project/entity/TaskGroup.kt | 13 ++++ .../modules/project/entity/TaskTemplate.kt | 3 +- .../modules/project/service/TasksService.kt | 31 +++++++++ .../modules/project/web/ProjectsController.kt | 14 +++++ .../modules/project/web/TasksController.kt | 35 +++++++++++ .../web/models/NewTaskTemplateRequest.kt | 11 ++++ .../changes/20240128_01_wayne/02_task.sql | 11 +++- .../20240128_01_wayne/06_task_data.sql | 63 +++++++++++++++++++ .../01_mock_task_templates.sql | 57 +++++++++++++++++ 11 files changed, 248 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/TaskGroup.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/service/TasksService.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/web/TasksController.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/web/models/NewTaskTemplateRequest.kt create mode 100644 src/main/resources/db/changelog/changes/20240128_01_wayne/06_task_data.sql create mode 100644 src/main/resources/db/changelog/changes/20240201_01_wayne/01_mock_task_templates.sql diff --git a/build.gradle b/build.gradle index b6b333e..14de75a 100644 --- a/build.gradle +++ b/build.gradle @@ -35,11 +35,16 @@ dependencies { implementation group: 'jakarta.validation', name: 'jakarta.validation-api', version: '3.0.2' implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.15.2' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.15.2' + implementation group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.15.2' + implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5' implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5' implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + implementation "org.jetbrains.kotlin:kotlin-reflect" + compileOnly group: 'jakarta.servlet', name: 'jakarta.servlet-api', version: '6.0.0' runtimeOnly 'com.mysql:mysql-connector-j' @@ -47,7 +52,6 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" } configurations { diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt b/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt index 3d8d3cd..d05fd5e 100644 --- a/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/Task.kt @@ -1,20 +1,24 @@ package com.ffii.tsms.modules.project.entity import com.ffii.core.entity.BaseEntity -import jakarta.persistence.Column -import jakarta.persistence.Entity -import jakarta.persistence.Table +import jakarta.persistence.* +import jakarta.validation.constraints.NotNull import org.hibernate.proxy.HibernateProxy @Entity @Table(name = "task") open class Task : BaseEntity() { + @NotNull @Column(name = "name") open var name: String? = null @Column(name = "description") open var description: String? = null + @ManyToOne + @JoinColumn(name = "taskGroupId") + open var taskGroup: TaskGroup? = null + final override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null) return false diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/TaskGroup.kt b/src/main/java/com/ffii/tsms/modules/project/entity/TaskGroup.kt new file mode 100644 index 0000000..495006d --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/TaskGroup.kt @@ -0,0 +1,13 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.entity.IdEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.Table + +@Entity +@Table(name = "task_group") +open class TaskGroup : IdEntity() { + @Column(name = "name") + open var name: String? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt b/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt index 06dfcf8..16d8d9a 100644 --- a/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt +++ b/src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt @@ -19,5 +19,6 @@ open class TaskTemplate : IdEntity() { @JoinTable(name = "task_template_tasks", joinColumns = [JoinColumn(name = "taskTemplateId")], inverseJoinColumns = [JoinColumn(name = "tasksId")]) - open var tasks: MutableSet = mutableSetOf() + @OrderBy + open var tasks: MutableList = mutableListOf() } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/service/TasksService.kt b/src/main/java/com/ffii/tsms/modules/project/service/TasksService.kt new file mode 100644 index 0000000..4e4d987 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/service/TasksService.kt @@ -0,0 +1,31 @@ +package com.ffii.tsms.modules.project.service + +import com.ffii.tsms.modules.project.entity.Task +import com.ffii.tsms.modules.project.entity.TaskRepository +import com.ffii.tsms.modules.project.entity.TaskTemplate +import com.ffii.tsms.modules.project.entity.TaskTemplateRepository +import org.springframework.stereotype.Service + +@Service +class TasksService( + private val taskTemplateRepository: TaskTemplateRepository, + private val taskRepository: TaskRepository +) { + fun allTasks(): List { + return taskRepository.findAll() + } + + fun allTaskTemplates(): List { + return taskTemplateRepository.findAll() + } + + fun saveTaskTemplate(code: String, name: String, taskIds: List): TaskTemplate { + return taskTemplateRepository.save( + TaskTemplate().apply { + this.name = name + this.code = code + this.tasks = taskRepository.findAllById(taskIds) + } + ) + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..680a7bd --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt @@ -0,0 +1,14 @@ +package com.ffii.tsms.modules.project.web + +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/projects") +class ProjectsController { + @GetMapping + fun allProjects() { + + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/web/TasksController.kt b/src/main/java/com/ffii/tsms/modules/project/web/TasksController.kt new file mode 100644 index 0000000..8de3826 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/web/TasksController.kt @@ -0,0 +1,35 @@ +package com.ffii.tsms.modules.project.web + +import com.ffii.tsms.modules.project.entity.Task +import com.ffii.tsms.modules.project.entity.TaskTemplate +import com.ffii.tsms.modules.project.service.TasksService +import com.ffii.tsms.modules.project.web.models.NewTaskTemplateRequest +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/tasks") +class TasksController(private val tasksService: TasksService) { + @GetMapping + fun allTasks(): List { + return tasksService.allTasks() + } + + @GetMapping("/templates") + fun allTaskTemplates(): List { + return tasksService.allTaskTemplates() + } + + @PostMapping("/templates/new") + fun saveTaskTemplate(@Valid @RequestBody newTaskTemplate: NewTaskTemplateRequest): TaskTemplate { + return tasksService.saveTaskTemplate( + newTaskTemplate.code, + newTaskTemplate.name, + newTaskTemplate.taskIds + ) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/web/models/NewTaskTemplateRequest.kt b/src/main/java/com/ffii/tsms/modules/project/web/models/NewTaskTemplateRequest.kt new file mode 100644 index 0000000..f6fd3af --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/web/models/NewTaskTemplateRequest.kt @@ -0,0 +1,11 @@ +package com.ffii.tsms.modules.project.web.models + +import jakarta.validation.constraints.NotBlank + +data class NewTaskTemplateRequest( + @field:NotBlank(message = "code cannot be empty") + val code: String, + @field:NotBlank(message = "name cannot be empty") + val name: String, + val taskIds: List = emptyList() +) diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql index d53374c..7fda846 100644 --- a/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql @@ -1,6 +1,12 @@ -- liquibase formatted sql -- changeset wayne:task +CREATE TABLE task_group ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NULL, + CONSTRAINT pk_task_group PRIMARY KEY (id) +); + CREATE TABLE task ( id INT NOT NULL AUTO_INCREMENT, version INT NOT NULL DEFAULT '0', @@ -9,11 +15,14 @@ CREATE TABLE task ( modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, modifiedBy VARCHAR(30) NULL, deleted TINYINT(1) NOT NULL DEFAULT '0', - name VARCHAR(255) NULL, + name VARCHAR(255) NOT NULL, `description` VARCHAR(255) NULL, + taskGroupId INT NULL, CONSTRAINT pk_task PRIMARY KEY (id) ); +ALTER TABLE task ADD CONSTRAINT FK_TASK_ON_TASKGROUPID FOREIGN KEY (taskGroupId) REFERENCES task_group (id); + CREATE TABLE task_template ( id INT NOT NULL AUTO_INCREMENT, code VARCHAR(255) NOT NULL, diff --git a/src/main/resources/db/changelog/changes/20240128_01_wayne/06_task_data.sql b/src/main/resources/db/changelog/changes/20240128_01_wayne/06_task_data.sql new file mode 100644 index 0000000..dc84885 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240128_01_wayne/06_task_data.sql @@ -0,0 +1,63 @@ +-- liquibase formatted sql + +-- changeset wayne:task_data +INSERT +INTO + task_group + (name) +VALUES + ('1. Design & Cost Planning / Estimating'), + ('2. Tender Documentation'), + ('3. Tender Analysis & Report & Contract Documentation'), + ('4. Construction / Post Construction'), + ('5. Miscellaneous'); + +INSERT +INTO + task + (name, taskGroupId) +VALUES + ('1.1 Preparation of preliminary Cost Estimate / Cost Plan including Revised & Refined', 1), + ('1.2 Cash flow forecast', 1), + ('1.3 Cost studies for alternative design solutions', 1), + ('1.4 Attend design co-ordination / project review meetings', 1), + ('1.5 Prepare / Review RIC', 1), + + ('2.1 Advise on tendering & contractual arrangement', 2), + ('2.2 Drafting / Vetting front-parts (incl. Main Contract, Sub-contracts & Direct Contracts)', 2), + ('2.3 Carry out pre-qualification exercise / EOI', 2), + ('2.4 Measurement (incl. billing of items) for Works Packages', 2), + ('2.5 Measurement (incl. billing of items) for tender addendum for Works Packages', 2), + ('2.6 Bulk Checking of Bills of Quantities', 2), + ('2.7 Line through drawings & specifications to check against Bills of Quantities / SOR', 2), + ('2.8 Update cash flow forecast', 2), + ('2.9 Edit tender documents (Incl. Bills of Quantities / SOR)', 2), + ('2.10 Preparation of pre-tender estimates', 2), + ('2.11 Attend design co-ordination / project review meetings / project meetings', 2), + + ('3.1 Evaluation of tenders (incl. arithmetical checking, submission checking, etc)', 3), + ('3.2 Preparation of 3-rates bills', 3), + ('3.3 Preparation of Report on Tenderers (incl. three-rates bills)', 3), + ('3.4 Preparation of tender queries', 3), + ('3.5 Attend tender interviews', 3), + ('3.6 Draft Letter of Acceptance / Award', 3), + ('3.7 Preparation of Contract Documents for Works Packages', 3), + + ('4.1 Check insurance policies, surety bond, guarantee, etc.', 4), + ('4.2 Valuation of works completed for progress payment (incl. site visits)', 4), + ('4.3 Preparation of financial statements (incl. cash flow forecasts)', 4), + ('4.4 Cost check / advice on a alternative design solutions', 4), + ('4.5 Cost estimate for draft AIs/EIs/SIs', 4), + ('4.6 Advise on contractual issues & evaluate monetary contractual claim', 4), + ('4.7 Attend site meetings / project co-ordination meetings / project meetings', 4), + ('4.8 Measurement & valuation of variations / prime cost & provisional sums', 4), + ('4.9 Negotiation and settlement of final accounts (incl. meetings)', 4), + ('4.10 Preparation of Statement of Final Account', 4), + ('4.11 Preparation of Cost Analysis for the Completed project', 4), + ('4.12 Check / Review draft final bills', 4), + ('4.13 Carry out site check for draft final bills', 4), + + ('5.1 Preparation of Fee Proposal / Expression of Interest', 5), + ('5.2 Attend Management Meeting / Management Workshop', 5), + ('5.3 Preparation of project budget i.e. manhours vs fee receivables', 5), + ('5.4 Attend Local / International Conference / Seminar / Webinar', 5); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20240201_01_wayne/01_mock_task_templates.sql b/src/main/resources/db/changelog/changes/20240201_01_wayne/01_mock_task_templates.sql new file mode 100644 index 0000000..80aaed0 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20240201_01_wayne/01_mock_task_templates.sql @@ -0,0 +1,57 @@ +-- liquibase formatted sql + +-- changeset wayne:mock_task_templates + +INSERT INTO task_template (code,name) VALUES + ('Pre-001','Pre-contract Template'), + ('Post-001','Post-contract Template'), + ('Full-001','Full Project Template'); + +INSERT INTO task_template_tasks (taskTemplateId,tasksId) VALUES + (1,1), + (2,1), + (3,1), + (1,2), + (3,2), + (1,3), + (2,3), + (3,3), + (3,4), + (3,5), + (1,6), + (3,6), + (1,7), + (3,7), + (3,8), + (3,9), + (3,10), + (3,11), + (3,12), + (3,13), + (3,14), + (3,15), + (3,16), + (3,17), + (3,18), + (3,19), + (3,20), + (3,21), + (3,22), + (3,23), + (3,24), + (3,25), + (3,26), + (3,27), + (3,28), + (3,29), + (3,30), + (3,31), + (3,32), + (3,33), + (3,34), + (3,35), + (3,36), + (3,37), + (3,38), + (3,39), + (3,40);