Procházet zdrojové kódy

update customer & susidiary (add new table - type & contact; remove columns - contactName, phone, email; add columns - typeId)

tags/Baseline_30082024_BACKEND_UAT
cyril.tsui před 1 rokem
rodič
revize
edd4a1d0a6
25 změnil soubory, kde provedl 643 přidání a 92 odebrání
  1. +15
    -33
      src/main/java/com/ffii/tsms/modules/data/entity/Customer.java
  2. +62
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerContact.java
  3. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerContactRepository.java
  4. +3
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java
  5. +1
    -1
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java
  6. +14
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java
  7. +23
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerType.java
  8. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerTypeRepository.java
  9. +0
    -33
      src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java
  10. +62
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryContact.java
  11. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryContactRepository.java
  12. +23
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryType.java
  13. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryTypeRepository.java
  14. +45
    -11
      src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt
  15. +67
    -0
      src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt
  16. +30
    -0
      src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt
  17. +43
    -0
      src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt
  18. +31
    -0
      src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt
  19. +27
    -0
      src/main/java/com/ffii/tsms/modules/data/web/SubsidiaryController.kt
  20. +8
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt
  21. +19
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt
  22. +19
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerRequest.kt
  23. +33
    -14
      src/main/java/com/ffii/tsms/modules/project/service/ProjectsService.kt
  24. +45
    -0
      src/main/resources/db/changelog/changes/20240327_01_cyril/01_update_customer.sql
  25. +45
    -0
      src/main/resources/db/changelog/changes/20240327_01_cyril/02_update_subsidiary.sql

+ 15
- 33
src/main/java/com/ffii/tsms/modules/data/entity/Customer.java Zobrazit soubor

@@ -3,6 +3,9 @@ package com.ffii.tsms.modules.data.entity;
import com.ffii.core.entity.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;

@@ -23,18 +26,13 @@ public class Customer extends BaseEntity<Long> {
@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;

@OneToOne
@JoinColumn(name = "typeId")
private CustomerType customerType;

public String getAddress() {
return address;
}
@@ -51,30 +49,6 @@ public class Customer extends BaseEntity<Long> {
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;
}
@@ -98,4 +72,12 @@ public class Customer extends BaseEntity<Long> {
public void setCode(String code) {
this.code = code;
}

public CustomerType getCustomerType() {
return customerType;
}

public void setCustomerType(CustomerType customerType) {
this.customerType = customerType;
}
}

+ 62
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerContact.java Zobrazit soubor

@@ -0,0 +1,62 @@
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.OneToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;

@Entity
@Table(name = "customer_contact")
public class CustomerContact extends IdEntity<Long> {
@NotNull
@OneToOne
@JoinColumn(name = "customerId")
private Customer customer;

@NotNull
@Column(name = "name", length = 30)
private String name;

@NotNull
@Column(name = "email", length = 255)
private String email;

@NotNull
@Column(name = "phone", length = 20)
private String phone;

public Customer getCustomer() {
return customer;
}

public void setCustomer(Customer customer) {
this.customer = customer;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

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;
}
}

+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerContactRepository.java Zobrazit soubor

@@ -0,0 +1,7 @@
package com.ffii.tsms.modules.data.entity;

import com.ffii.core.support.AbstractRepository;

public interface CustomerContactRepository extends AbstractRepository<CustomerContact, Long> {

}

+ 3
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java Zobrazit soubor

@@ -1,6 +1,9 @@
package com.ffii.tsms.modules.data.entity;

import java.util.Optional;

import com.ffii.core.support.AbstractRepository;

public interface CustomerRepository extends AbstractRepository<Customer, Long> {
}

+ 1
- 1
src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiary.java Zobrazit soubor

@@ -29,7 +29,7 @@ public class CustomerSubsidiary extends IdEntity<Long> {
return customer;
}

public void setCustomerId(Customer customer) {
public void setCustomer(Customer customer) {
this.customer = customer;
}
}

+ 14
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java Zobrazit soubor

@@ -0,0 +1,14 @@
package com.ffii.tsms.modules.data.entity;

import java.util.List;
import java.util.Optional;

import org.springframework.data.repository.query.Param;

import com.ffii.core.support.AbstractRepository;

public interface CustomerSubsidiaryRepository extends AbstractRepository<CustomerSubsidiary, Long> {
List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId);

}

+ 23
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerType.java Zobrazit soubor

@@ -0,0 +1,23 @@
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 = "customer_type")
public class CustomerType extends IdEntity<Long> {
@NotNull
@Column(name = "name")
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerTypeRepository.java Zobrazit soubor

@@ -0,0 +1,7 @@
package com.ffii.tsms.modules.data.entity;

import com.ffii.core.support.AbstractRepository;

public interface CustomerTypeRepository extends AbstractRepository<CustomerType, Long> {

}

+ 0
- 33
src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java Zobrazit soubor

@@ -22,21 +22,12 @@ public class Subsidiary extends BaseEntity<Long> {
@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;
}
@@ -53,30 +44,6 @@ public class Subsidiary extends BaseEntity<Long> {
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;
}


+ 62
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryContact.java Zobrazit soubor

@@ -0,0 +1,62 @@
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.OneToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;

@Entity
@Table(name = "subsidiary_contact")
public class SubsidiaryContact extends IdEntity<Long> {
@NotNull
@OneToOne
@JoinColumn(name = "subsidiaryId")
private Subsidiary subsidiary;

@NotNull
@Column(name = "name", length = 30)
private String name;

@NotNull
@Column(name = "email", length = 255)
private String email;

@NotNull
@Column(name = "phone", length = 20)
private String phone;

public Subsidiary getSubsidiary() {
return subsidiary;
}

public void setSubsidiary(Subsidiary subsidiary) {
this.subsidiary = subsidiary;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

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;
}
}

+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryContactRepository.java Zobrazit soubor

@@ -0,0 +1,7 @@
package com.ffii.tsms.modules.data.entity;

import com.ffii.core.support.AbstractRepository;

public interface SubsidiaryContactRepository extends AbstractRepository<SubsidiaryContact, Long> {

}

+ 23
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryType.java Zobrazit soubor

@@ -0,0 +1,23 @@
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 = "subsidiary_type")
public class SubsidiaryType extends IdEntity<Long> {
@NotNull
@Column(name = "name")
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryTypeRepository.java Zobrazit soubor

@@ -0,0 +1,7 @@
package com.ffii.tsms.modules.data.entity;

import com.ffii.core.support.AbstractRepository;

public interface SubsidiaryTypeRepository extends AbstractRepository<SubsidiaryType, Long> {

}

+ 45
- 11
src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt Zobrazit soubor

@@ -1,20 +1,54 @@
package com.ffii.tsms.modules.data.service

import com.ffii.tsms.modules.data.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerType
import com.ffii.tsms.modules.data.entity.CustomerRepository
import com.ffii.tsms.modules.data.entity.CustomerTypeRepository
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import org.springframework.stereotype.Service

@Service
class CustomerService(private val customerRepository: CustomerRepository) {
fun saveCustomer(name: String, code: String, email: String, phone: String, contactName: String): Customer {
return customerRepository.save(
Customer().apply {
this.name = name
this.email = email
this.phone = phone
this.code = code
this.contactName = contactName
class CustomerService(private val customerRepository: CustomerRepository, private val customerTypeRepository: CustomerTypeRepository, private val customerSubsidiaryService: CustomerSubsidiaryService) {

fun allCustomers(): List<Customer> {
return customerRepository.findAll()
}

fun allCustomerTypes(): List<CustomerType> {
return customerTypeRepository.findAll()
}
fun findCustomer(id: Long): Customer {
return customerRepository.findById(id).orElseThrow()
}

fun saveCustomer(saveCustomer: SaveCustomerRequest): Customer {

val customer =
customerRepository.saveAndFlush(
Customer().apply {
id = saveCustomer.id
code = saveCustomer.code
name = saveCustomer.name
address = saveCustomer.address
district = saveCustomer.district
brNo = saveCustomer.brNo
}
)

val customerId = customer.id
if (customerId != null && customerId > 0) {

if (saveCustomer.deleteSubsidiaryIds.size > 0) {
customerSubsidiaryService.deleteSubsidiariesByCustomer(customerId, saveCustomer.deleteSubsidiaryIds)
}

if (saveCustomer.addSubsidiaryIds.size > 0) {
customerSubsidiaryService.saveSubsidiariesByCustomer(customerId, saveCustomer.addSubsidiaryIds)
}
)
}
return customer
}
}
}

+ 67
- 0
src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt Zobrazit soubor

@@ -0,0 +1,67 @@
package com.ffii.tsms.modules.data.service

import com.ffii.tsms.modules.data.entity.CustomerRepository
import com.ffii.tsms.modules.data.entity.CustomerSubsidiary
import com.ffii.tsms.modules.data.entity.CustomerSubsidiaryRepository
import com.ffii.tsms.modules.data.entity.SubsidiaryRepository
import org.springframework.stereotype.Service

@Service
class CustomerSubsidiaryService(
private val customerSubsidiaryRepository: CustomerSubsidiaryRepository,
private val customerRepository: CustomerRepository,
private val subsidiaryRepository: SubsidiaryRepository
) {

fun allCustomeriesSubsidiaries(): List<CustomerSubsidiary> {
return customerSubsidiaryRepository.findAll()
}

fun findAllSubsidiaryIdsByCustomerId(customerId : Long) : List<Long> {

val customerSubsidiaryList: List<CustomerSubsidiary> = customerSubsidiaryRepository.findAllByCustomerId(customerId)

if (customerSubsidiaryList.size > 0) {
return customerSubsidiaryList.map { it.subsidiary.id }.filterNotNull()
} else return emptyList()
}

fun saveSubsidiariesByCustomer(saveCustomerId: Long, saveSubsidiaryIds: List<Long>) {

val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>()

val subsidiaryIdsSize = saveSubsidiaryIds.size

for (i in 0 until subsidiaryIdsSize) {
val customer = customerRepository.findById(saveCustomerId).orElseThrow()
val subsidiary = subsidiaryRepository.findById(saveSubsidiaryIds[i]).orElseThrow()
val customerSubsidiary = CustomerSubsidiary().apply {
this.customer = customer
this.subsidiary = subsidiary
}

customerSubsidiaryList.add(customerSubsidiary)
}

customerSubsidiaryRepository.saveAll(customerSubsidiaryList)
}

fun deleteSubsidiariesByCustomer(deleteCustomerId: Long, deleteSubsidiaryIds: List<Long>) {

val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>()

val subsidiaryIdsSize = deleteSubsidiaryIds.size

for (i in 0 until subsidiaryIdsSize) {
val customer = customerRepository.findById(deleteCustomerId).orElseThrow()
val subsidiary = subsidiaryRepository.findById(deleteSubsidiaryIds[i]).orElseThrow()
val customerSubsidiary = CustomerSubsidiary().apply {
this.customer = customer
this.subsidiary = subsidiary
}

customerSubsidiaryList.add(customerSubsidiary)
}
}
}

+ 30
- 0
src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt Zobrazit soubor

@@ -0,0 +1,30 @@
package com.ffii.tsms.modules.project.service

import com.ffii.tsms.modules.data.entity.SubsidiaryRepository
import com.ffii.tsms.modules.data.entity.Subsidiary
import com.ffii.tsms.modules.data.service.CustomerService
import com.ffii.tsms.modules.project.web.models.NewSubsidiaryRequest
import org.springframework.stereotype.Service

@Service
class SubsidiaryService(
private val subsidiaryRepository: SubsidiaryRepository
) {
fun allSubsidiaries(): List<Subsidiary> {
return subsidiaryRepository.findAll()
}

fun saveSubsidiary(request: NewSubsidiaryRequest): Subsidiary {

// TODO: Add tasks, milestones, allocated
val subsidary = Subsidiary().apply {
code = request.code
name = request.name
brNo = request.brNo
address = request.address
district = request.district
}

return subsidiaryRepository.save(subsidary)
}
}

+ 43
- 0
src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt Zobrazit soubor

@@ -0,0 +1,43 @@
package com.ffii.tsms.modules.data.web

import com.ffii.tsms.modules.data.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerType
import com.ffii.tsms.modules.data.service.CustomerService
import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import com.ffii.tsms.modules.project.web.models.CustomerResponse
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.PathVariable
import jakarta.validation.Valid

@RestController
@RequestMapping("/customer")
class CustomerController(private val customerService: CustomerService, private val customerSubsidiaryService: CustomerSubsidiaryService) {
@GetMapping
fun allCustomers(): List<Customer> {
return customerService.allCustomers()
}

@GetMapping("/types")
fun allCustomerTypes(): List<CustomerType> {
return customerService.allCustomerTypes()
}

@GetMapping("/{id}")
fun findCustomer(@PathVariable id: Long): CustomerResponse {
val customer = customerService.findCustomer(id)
val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id)

return CustomerResponse(customer, subsidiaryIds)
}

@PostMapping("/save")
fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): Customer {
return customerService.saveCustomer(saveCustomer)
}
}

+ 31
- 0
src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt Zobrazit soubor

@@ -0,0 +1,31 @@
package com.ffii.tsms.modules.data.web

import com.ffii.tsms.modules.data.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerSubsidiary
import com.ffii.tsms.modules.data.service.CustomerService
import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import com.ffii.tsms.modules.project.web.models.CustomerResponse
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.PathVariable
import jakarta.validation.Valid
import com.ffii.core.support.JdbcDao

@RestController
@RequestMapping("/customer-subsidiary")
class CustomerSubsidiaryController(private val customerSubsidiaryService: CustomerSubsidiaryService) {
@GetMapping
fun allCustomeriesSubsidiaries(): List<CustomerSubsidiary> {
// JdbcDao.queryForString(sql)
return customerSubsidiaryService.allCustomeriesSubsidiaries()
}

@GetMapping("/subsidiaries/{customerId}")
fun findAllSubsidiaryIdsByCustomerId(@PathVariable customerId: Long): List<Long> {
return customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(customerId)
}
}

+ 27
- 0
src/main/java/com/ffii/tsms/modules/data/web/SubsidiaryController.kt Zobrazit soubor

@@ -0,0 +1,27 @@
package com.ffii.tsms.modules.data.web

import com.ffii.tsms.modules.data.entity.Staff
import com.ffii.tsms.modules.data.entity.Subsidiary
import com.ffii.tsms.modules.data.service.StaffsService
import com.ffii.tsms.modules.project.service.SubsidiaryService
import com.ffii.tsms.modules.project.web.models.NewSubsidiaryRequest
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.PostMapping
import jakarta.validation.Valid

@RestController
@RequestMapping("/subsidiary")
class SubsidiaryController(private val subsidiaryService: SubsidiaryService) {
@GetMapping
fun allSubsidiaries(): List<Subsidiary> {
return subsidiaryService.allSubsidiaries()
}

@PostMapping("/new")
fun saveSubsidiary(@Valid @RequestBody newSubsidary: NewSubsidiaryRequest): Subsidiary {
return subsidiaryService.saveSubsidiary(newSubsidary)
}
}

+ 8
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt Zobrazit soubor

@@ -0,0 +1,8 @@
package com.ffii.tsms.modules.project.web.models

import com.ffii.tsms.modules.data.entity.Customer

data class CustomerResponse(
val customer: Customer,
val subsidiaryIds: List<Long>,
)

+ 19
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt Zobrazit soubor

@@ -0,0 +1,19 @@
package com.ffii.tsms.modules.project.web.models

import jakarta.validation.constraints.NotBlank

data class NewSubsidiaryRequest(
@field:NotBlank(message = "subsidary code cannot be empty")
val code: String,
@field:NotBlank(message = "subsidary name cannot be empty")
val name: String,

val brNo: String,
val contactName: String,
val phone: String,
val address: String,
val district: String,
val email: String,

val allocatedCustomerIds: List<Long>,
)

+ 19
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerRequest.kt Zobrazit soubor

@@ -0,0 +1,19 @@
package com.ffii.tsms.modules.project.web.models

import jakarta.validation.constraints.NotBlank

data class SaveCustomerRequest(
@field:NotBlank(message = "customer code cannot be empty")
val code: String,
@field:NotBlank(message = "customer name cannot be empty")
val name: String,

val brNo: String?,
val address: String?,
val district: String?,

val deleteSubsidiaryIds: List<Long>,
val addSubsidiaryIds: List<Long>,

val id: Long?,
)

+ 33
- 14
src/main/java/com/ffii/tsms/modules/project/service/ProjectsService.kt Zobrazit soubor

@@ -8,13 +8,15 @@ import com.ffii.tsms.modules.project.entity.ProjectCategory
import com.ffii.tsms.modules.project.entity.ProjectCategoryRepository
import com.ffii.tsms.modules.project.entity.ProjectRepository
import com.ffii.tsms.modules.project.web.models.NewProjectRequest
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import org.springframework.stereotype.Service

@Service
class ProjectsService(
private val projectRepository: ProjectRepository,
private val customerService: CustomerService, private val projectCategoryRepository: ProjectCategoryRepository,
private val staffRepository: StaffRepository
private val projectRepository: ProjectRepository,
private val customerService: CustomerService,
private val projectCategoryRepository: ProjectCategoryRepository,
private val staffRepository: StaffRepository
) {
fun allProjects(): List<ProjectSearchInfo> {
return projectRepository.findProjectSearchInfoBy()
@@ -25,20 +27,37 @@ class ProjectsService(
}

fun saveProject(request: NewProjectRequest): Project {
val projectCategory = projectCategoryRepository.findById(request.projectCategoryId).orElseThrow()
val projectCategory =
projectCategoryRepository.findById(request.projectCategoryId).orElseThrow()
val teamLead = staffRepository.findById(request.projectLeadId).orElseThrow()
val customer = customerService.saveCustomer(request.clientName, request.clientCode, request.clientEmail, request.clientPhone, request.clientContactName)

val _customer =
SaveCustomerRequest(
name = request.clientName,
code = request.clientCode,
// email = request.clientEmail,
// phone = request.clientPhone,
// contactName = request.clientContactName,
brNo = null,
address = null,
district = null,
deleteSubsidiaryIds = emptyList(),
addSubsidiaryIds = emptyList(),
id = null
)
val customer = customerService.saveCustomer(_customer)

// TODO: Add tasks, milestones, allocated
val project = Project().apply {
name = request.projectName
description = request.projectDescription
code = request.projectCode
this.projectCategory = projectCategory
this.teamLead = teamLead
this.customer = customer
}
val project =
Project().apply {
name = request.projectName
description = request.projectDescription
code = request.projectCode
this.projectCategory = projectCategory
this.teamLead = teamLead
this.customer = customer
}

return projectRepository.save(project)
}
}
}

+ 45
- 0
src/main/resources/db/changelog/changes/20240327_01_cyril/01_update_customer.sql Zobrazit soubor

@@ -0,0 +1,45 @@
-- liquibase formatted sql
-- changeset cyril:update_customer

ALTER TABLE `customer`
DROP COLUMN `contactName`,
DROP COLUMN `phone`,
DROP COLUMN `email`,
ADD COLUMN `typeId` INT NOT NULL AFTER `brNo`;

CREATE TABLE `customer_type` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`));

ALTER TABLE customer ADD CONSTRAINT FK_CUSTOMER_ON_TYPEID FOREIGN KEY (typeId) REFERENCES customer (id);

CREATE TABLE `customer_contact` (
`id` INT NOT NULL AUTO_INCREMENT,
`version` INT NOT NULL DEFAULT '0',
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`createdBy` VARCHAR(30) NULL DEFAULT NULL,
`modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modifiedBy` VARCHAR(30) NULL DEFAULT NULL,
`deleted` TINYINT(1) NOT NULL DEFAULT '0',
`customerId` INT NOT NULL,
`name` VARCHAR(30) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`phone` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`));

ALTER TABLE customer_contact ADD CONSTRAINT FK_CUSTOMER_CONTACT_ON_CUSTOMERID FOREIGN KEY (customerId) REFERENCES customer (id);

INSERT
INTO
customer_type
(name)
VALUES
('Architect'),
('Contractor'),
('Developer'),
('Government'),
('Institution'),
('NGO'),
('Private'),
('Utility');

+ 45
- 0
src/main/resources/db/changelog/changes/20240327_01_cyril/02_update_subsidiary.sql Zobrazit soubor

@@ -0,0 +1,45 @@
-- liquibase formatted sql
-- changeset cyril:update_subsidiary

ALTER TABLE `subsidiary`
DROP COLUMN `contactName`,
DROP COLUMN `phone`,
DROP COLUMN `email`,
ADD COLUMN `typeId` INT NOT NULL AFTER `brNo`;

CREATE TABLE `subsidiary_type` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`));

ALTER TABLE subsidiary ADD CONSTRAINT FK_SUBSIDIARY_ON_TYPEID FOREIGN KEY (typeId) REFERENCES subsidiary (id);

CREATE TABLE `subsidiary_contact` (
`id` INT NOT NULL AUTO_INCREMENT,
`version` INT NOT NULL DEFAULT '0',
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`createdBy` VARCHAR(30) NULL DEFAULT NULL,
`modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modifiedBy` VARCHAR(30) NULL DEFAULT NULL,
`deleted` TINYINT(1) NOT NULL DEFAULT '0',
`subsidiaryId` INT NOT NULL,
`name` VARCHAR(30) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`phone` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`));

ALTER TABLE subsidiary_contact ADD CONSTRAINT FK_SUBSIDIARY_CONTACT_ON_SUBSIDIARYID FOREIGN KEY (subsidiaryId) REFERENCES subsidiary (id);

INSERT
INTO
subsidiary_type
(name)
VALUES
('Architect'),
('Contractor'),
('Developer'),
('Government'),
('Institution'),
('NGO'),
('Private'),
('Utility');

Načítá se…
Zrušit
Uložit