#2 add-project-entities

Слито
wayne.lee слито 3 коммит(ов) из add-project-entities в master 1 год назад
  1. +3
    -0
      .gitignore
  2. +21
    -11
      README.md
  3. +15
    -7
      build.gradle
  4. +0
    -0
      gradlew
  5. +8
    -0
      settings.gradle
  6. +158
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Company.java
  7. +37
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CompanyHoliday.java
  8. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CompanyHolidayRepository.java
  9. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CompanyRepository.java
  10. +101
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Customer.java
  11. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java
  12. +35
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java
  13. +46
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Department.java
  14. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java
  15. +46
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Grade.java
  16. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/GradeRepository.java
  17. +81
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/InternalRate.java
  18. +46
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Position.java
  19. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java
  20. +81
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Rate.java
  21. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/RateRepository.java
  22. +59
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Salary.java
  23. +40
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java
  24. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SalaryRepository.java
  25. +46
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Service.java
  26. +35
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/ServiceRate.java
  27. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/ServiceRepository.java
  28. +46
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Skill.java
  29. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SkillRepository.java
  30. +257
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Staff.java
  31. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java
  32. +103
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java
  33. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java
  34. +46
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/Team.java
  35. +6
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java
  36. +19
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestone.kt
  37. +6
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/PaymentMilestoneRepository.kt
  38. +55
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/Project.kt
  39. +6
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/ProjectRepository.kt
  40. +29
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/ProjectTask.kt
  41. +6
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/ProjectTaskRepository.kt
  42. +43
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocation.kt
  43. +6
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/StaffAllocationRepository.kt
  44. +34
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/Task.kt
  45. +13
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/TaskGroup.kt
  46. +6
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/TaskRepository.kt
  47. +24
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt
  48. +6
    -0
      src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplateRepository.kt
  49. +31
    -0
      src/main/java/com/ffii/tsms/modules/project/service/TasksService.kt
  50. +14
    -0
      src/main/java/com/ffii/tsms/modules/project/web/ProjectsController.kt
  51. +35
    -0
      src/main/java/com/ffii/tsms/modules/project/web/TasksController.kt
  52. +11
    -0
      src/main/java/com/ffii/tsms/modules/project/web/models/NewTaskTemplateRequest.kt
  53. +26
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/01_company.sql
  54. +15
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/02_company_holiday.sql
  55. +21
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/03_customer.sql
  56. +21
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/04_subsidiary.sql
  57. +13
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/05_customer_subsidiary.sql
  58. +16
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/06_department.sql
  59. +16
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/07_grade.sql
  60. +19
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/08_internal_rate.sql
  61. +16
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/09_position.sql
  62. +19
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/10_rate.sql
  63. +11
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/11_salary.sql
  64. +11
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/12_salary_effective.sql
  65. +16
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/13_service.sql
  66. +13
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/14_service_rate.sql
  67. +16
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/15_skill.sql
  68. +16
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/16_team.sql
  69. +54
    -0
      src/main/resources/db/changelog/changes/20240105_01_wayne/17_staff.sql
  70. +30
    -0
      src/main/resources/db/changelog/changes/20240128_01_wayne/01_project.sql
  71. +41
    -0
      src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql
  72. +9
    -0
      src/main/resources/db/changelog/changes/20240128_01_wayne/03_milestone.sql
  73. +18
    -0
      src/main/resources/db/changelog/changes/20240128_01_wayne/04_project_task.sql
  74. +21
    -0
      src/main/resources/db/changelog/changes/20240128_01_wayne/05_staff_allocation.sql
  75. +63
    -0
      src/main/resources/db/changelog/changes/20240128_01_wayne/06_task_data.sql
  76. +57
    -0
      src/main/resources/db/changelog/changes/20240201_01_wayne/01_mock_task_templates.sql

+ 3
- 0
.gitignore Просмотреть файл

@@ -35,3 +35,6 @@ out/

### VS Code ###
.vscode/

### JPA Buddy ###
.jpb/

+ 21
- 11
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"
}
```
```

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
```

+ 15
- 7
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 {
@@ -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'
@@ -35,13 +35,18 @@ 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'
runtimeOnly 'com.unboundid:unboundid-ldapsdk:6.0.9'

@@ -50,7 +55,10 @@ dependencies {
}

configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
configureEach {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
kotlin {
jvmToolchain(17)
}


+ 8
- 0
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'

+ 158
- 0
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<Long> {
@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;
}
}

+ 37
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<CompanyHoliday, Long> {
}

+ 6
- 0
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<Company, Long> {
}

+ 101
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Customer, Long> {
}

+ 35
- 0
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<Long> {
@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;
}
}

+ 46
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Department, Long> {
}

+ 46
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Grade, Long> {
}

+ 81
- 0
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<Long> {
@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;
}
}

+ 46
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Position, Long> {
}

+ 81
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Rate, Long> {
}

+ 59
- 0
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<Long> {
@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;
}
}

+ 40
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Salary, Long> {
}

+ 46
- 0
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<Long> {
@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;
}
}

+ 35
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Service, Long> {
}

+ 46
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Skill, Long> {
}

+ 257
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Staff, Long> {
}

+ 103
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Subsidiary, Long> {
}

+ 46
- 0
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<Long> {
@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;
}
}

+ 6
- 0
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<Team, Long> {
}

+ 19
- 0
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<Long>() {
@NotNull
@Column(name = "name")
open var name: String? = null

@NotNull
@Column(name = "description")
open var description: String? = null
}

+ 6
- 0
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<PaymentMilestone, Long> {
}

+ 55
- 0
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<Long>() {
@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
}

+ 6
- 0
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<Project, Long> {
}

+ 29
- 0
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<Long>() {
@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
}

+ 6
- 0
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<ProjectTask, Long> {
}

+ 43
- 0
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<Long>() {
@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
}

+ 6
- 0
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<StaffAllocation, Long> {
}

+ 34
- 0
src/main/java/com/ffii/tsms/modules/project/entity/Task.kt Просмотреть файл

@@ -0,0 +1,34 @@
package com.ffii.tsms.modules.project.entity

import com.ffii.core.entity.BaseEntity
import jakarta.persistence.*
import jakarta.validation.constraints.NotNull
import org.hibernate.proxy.HibernateProxy

@Entity
@Table(name = "task")
open class Task : BaseEntity<Long>() {
@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
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()
}

+ 13
- 0
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<Long>() {
@Column(name = "name")
open var name: String? = null
}

+ 6
- 0
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<Task, Long> {
}

+ 24
- 0
src/main/java/com/ffii/tsms/modules/project/entity/TaskTemplate.kt Просмотреть файл

@@ -0,0 +1,24 @@
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<Long>() {
@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")])
@OrderBy
open var tasks: MutableList<Task> = mutableListOf()
}

+ 6
- 0
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<TaskTemplate, Long> {
}

+ 31
- 0
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<Task> {
return taskRepository.findAll()
}

fun allTaskTemplates(): List<TaskTemplate> {
return taskTemplateRepository.findAll()
}

fun saveTaskTemplate(code: String, name: String, taskIds: List<Long>): TaskTemplate {
return taskTemplateRepository.save<TaskTemplate>(
TaskTemplate().apply {
this.name = name
this.code = code
this.tasks = taskRepository.findAllById(taskIds)
}
)
}
}

+ 14
- 0
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() {

}
}

+ 35
- 0
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<Task> {
return tasksService.allTasks()
}

@GetMapping("/templates")
fun allTaskTemplates(): List<TaskTemplate> {
return tasksService.allTaskTemplates()
}

@PostMapping("/templates/new")
fun saveTaskTemplate(@Valid @RequestBody newTaskTemplate: NewTaskTemplateRequest): TaskTemplate {
return tasksService.saveTaskTemplate(
newTaskTemplate.code,
newTaskTemplate.name,
newTaskTemplate.taskIds
)
}
}

+ 11
- 0
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<Long> = emptyList()
)

+ 26
- 0
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)
);

+ 15
- 0
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)
);

+ 21
- 0
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)
);

+ 21
- 0
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)
);

+ 13
- 0
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);

+ 16
- 0
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)
);

+ 16
- 0
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)
);

+ 19
- 0
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)
);

+ 16
- 0
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)
);

+ 19
- 0
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)
);

+ 11
- 0
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)
);

+ 11
- 0
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);

+ 16
- 0
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)
);

+ 13
- 0
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);

+ 16
- 0
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)
);

+ 16
- 0
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)
);

+ 54
- 0
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);

+ 30
- 0
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);

+ 41
- 0
src/main/resources/db/changelog/changes/20240128_01_wayne/02_task.sql Просмотреть файл

@@ -0,0 +1,41 @@
-- 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',
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) 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,
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);

+ 9
- 0
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)
);

+ 18
- 0
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);

+ 21
- 0
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);

+ 63
- 0
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);

+ 57
- 0
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);

Загрузка…
Отмена
Сохранить