| @@ -11,5 +11,7 @@ public interface CustomerSubsidiaryRepository extends AbstractRepository<Custome | |||
| List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId); | |||
| List<CustomerSubsidiary> findAllBySubsidiaryId(@Param("subsidiaryId") Long subsidiaryId); | |||
| Optional<CustomerSubsidiary> findByCustomerIdAndSubsidiaryId(@Param("customerId") Long customerId, @Param("subsidiaryId") Long subsidiaryId); | |||
| } | |||
| @@ -1,9 +1,7 @@ | |||
| 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.persistence.*; | |||
| import jakarta.validation.constraints.NotNull; | |||
| import java.time.LocalTime; | |||
| @@ -28,6 +26,11 @@ public class Subsidiary extends BaseEntity<Long> { | |||
| @Column(name = "district", length = 30) | |||
| private String district; | |||
| @OneToOne | |||
| @NotNull | |||
| @JoinColumn(name = "typeId") | |||
| private SubsidiaryType subsidiaryType; | |||
| public String getAddress() { | |||
| return address; | |||
| } | |||
| @@ -67,4 +70,12 @@ public class Subsidiary extends BaseEntity<Long> { | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| public SubsidiaryType getSubsidiaryType() { | |||
| return subsidiaryType; | |||
| } | |||
| public void setSubsidiaryType(SubsidiaryType subsidiaryType) { | |||
| this.subsidiaryType = subsidiaryType; | |||
| } | |||
| } | |||
| @@ -1,7 +1,10 @@ | |||
| package com.ffii.tsms.modules.data.entity; | |||
| import com.ffii.core.support.AbstractRepository; | |||
| import org.springframework.data.repository.query.Param; | |||
| public interface SubsidiaryContactRepository extends AbstractRepository<SubsidiaryContact, Long> { | |||
| import java.util.List; | |||
| public interface SubsidiaryContactRepository extends AbstractRepository<SubsidiaryContact, Long> { | |||
| List<SubsidiaryContact> findAllBySubsidiaryId(@Param("subsidiary") Long subsidiaryId); | |||
| } | |||
| @@ -1,6 +1,13 @@ | |||
| package com.ffii.tsms.modules.data.entity; | |||
| import com.ffii.core.support.AbstractRepository; | |||
| import org.springframework.data.repository.query.Param; | |||
| import java.util.List; | |||
| import java.util.Optional; | |||
| public interface SubsidiaryRepository extends AbstractRepository<Subsidiary, Long> { | |||
| List<Subsidiary> findAllByDeletedFalse(); | |||
| Optional<Subsidiary> findByCode(@Param("code") String code); | |||
| } | |||
| @@ -3,6 +3,7 @@ package com.ffii.tsms.modules.data.service | |||
| import com.ffii.tsms.modules.data.entity.CustomerContact | |||
| import com.ffii.tsms.modules.data.entity.CustomerContactRepository | |||
| import com.ffii.tsms.modules.data.entity.CustomerRepository | |||
| import org.springframework.beans.BeanUtils | |||
| import org.springframework.stereotype.Service | |||
| @Service | |||
| @@ -31,18 +32,14 @@ class CustomerContactService( | |||
| val customerContact = | |||
| if (customerContactId != null && customerContactId > 0) customerContactRepository.findById( | |||
| customerContactId | |||
| ).orElseThrow().apply { | |||
| this.customer = customer | |||
| name = saveCustomerContact[i].name | |||
| phone = saveCustomerContact[i].phone | |||
| email = saveCustomerContact[i].email | |||
| } else CustomerContact().apply { | |||
| this.customer = customer | |||
| name = saveCustomerContact[i].name | |||
| phone = saveCustomerContact[i].phone | |||
| email = saveCustomerContact[i].email | |||
| } | |||
| ).orElseThrow() else CustomerContact() | |||
| customerContact.apply { | |||
| this.customer = customer | |||
| name = saveCustomerContact[i].name | |||
| phone = saveCustomerContact[i].phone | |||
| email = saveCustomerContact[i].email | |||
| } | |||
| customerContactList.add(customerContact) | |||
| } | |||
| @@ -3,11 +3,10 @@ package com.ffii.tsms.modules.data.service | |||
| import com.ffii.core.support.AbstractBaseEntityService | |||
| import com.ffii.core.support.JdbcDao | |||
| import com.ffii.tsms.modules.data.entity.Customer | |||
| import com.ffii.tsms.modules.data.entity.CustomerContact | |||
| 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.data.web.models.NewCustomerResponse | |||
| import com.ffii.tsms.modules.data.web.models.SaveCustomerResponse | |||
| import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest | |||
| import org.springframework.beans.BeanUtils | |||
| import org.springframework.stereotype.Service | |||
| @@ -38,13 +37,13 @@ open class CustomerService( | |||
| return customerRepository.findByCode(code); | |||
| } | |||
| open fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse { | |||
| open fun saveCustomer(saveCustomer: SaveCustomerRequest): SaveCustomerResponse { | |||
| val duplicateCustomer = findCustomerByCode(saveCustomer.code) | |||
| //check duplicate customer | |||
| if (duplicateCustomer.isPresent && duplicateCustomer.orElseThrow().id?.equals(saveCustomer.id) == false) { | |||
| return NewCustomerResponse( | |||
| return SaveCustomerResponse( | |||
| customer = duplicateCustomer.get(), | |||
| message = "The customer code has already existed" | |||
| ); | |||
| @@ -85,6 +84,6 @@ open class CustomerService( | |||
| } | |||
| } | |||
| return NewCustomerResponse(customer = customer, message = "Success"); | |||
| return SaveCustomerResponse(customer = customer, message = "Success"); | |||
| } | |||
| } | |||
| @@ -24,6 +24,10 @@ class CustomerSubsidiaryService( | |||
| return customerSubsidiaryRepository.findAllByCustomerId(customerId) | |||
| } | |||
| fun findAllBySubsidiaryId(subsidiaryId : Long) : List<CustomerSubsidiary> { | |||
| return customerSubsidiaryRepository.findAllBySubsidiaryId(subsidiaryId) | |||
| } | |||
| fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? { | |||
| return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull() | |||
| } | |||
| @@ -36,6 +40,15 @@ class CustomerSubsidiaryService( | |||
| } else return emptyList() | |||
| } | |||
| fun findAllCustomerIdsBySubsidiaryId(subsidiaryId : Long) : List<Long> { | |||
| val customerSubsidiaryList: List<CustomerSubsidiary> = customerSubsidiaryRepository.findAllBySubsidiaryId(subsidiaryId) | |||
| if (customerSubsidiaryList.isNotEmpty()) { | |||
| return customerSubsidiaryList.mapNotNull { it.customer.id } | |||
| } else return emptyList() | |||
| } | |||
| fun saveSubsidiariesByCustomer(saveCustomerId: Long, saveSubsidiaryIds: List<Long>) { | |||
| val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>() | |||
| @@ -60,6 +73,30 @@ class CustomerSubsidiaryService( | |||
| customerSubsidiaryRepository.saveAll(customerSubsidiaryList) | |||
| } | |||
| fun saveCustomersBySubsidiary(saveSubsidiaryId: Long, saveCustomerIds: List<Long>) { | |||
| val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>() | |||
| val customerIdsSize = saveCustomerIds.size | |||
| for (i in 0 until customerIdsSize) { | |||
| val checkExist = findByCustomerIdAndSubsidiaryId(saveSubsidiaryId, saveCustomerIds[i]) | |||
| if (checkExist == null) { | |||
| val customer = customerRepository.findById(saveCustomerIds[i]).orElseThrow() | |||
| val subsidiary = subsidiaryRepository.findById(saveSubsidiaryId).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: List<CustomerSubsidiary> = findAllByCustomerId(deleteCustomerId) | |||
| @@ -70,4 +107,15 @@ class CustomerSubsidiaryService( | |||
| customerSubsidiaryRepository.deleteAllById(filteredSubsidiaryIds) | |||
| } | |||
| } | |||
| fun deleteCustomersBySubsidiary(deleteSubsidiaryId: Long, deleteCustomerIds: List<Long>) { | |||
| val customerSubsidiaryList: List<CustomerSubsidiary> = findAllBySubsidiaryId(deleteSubsidiaryId) | |||
| if (customerSubsidiaryList.isNotEmpty()) { | |||
| val filteredCustomerIds: List<Long> = | |||
| customerSubsidiaryList.filter { deleteCustomerIds.contains(it.customer.id!!) }.mapNotNull { it.id } | |||
| customerSubsidiaryRepository.deleteAllById(filteredCustomerIds) | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| package com.ffii.tsms.modules.data.service | |||
| import com.ffii.tsms.modules.data.entity.CustomerContact | |||
| import com.ffii.tsms.modules.data.entity.CustomerContactRepository | |||
| import com.ffii.tsms.modules.data.entity.CustomerRepository | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryContact | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryContactRepository | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryRepository | |||
| import org.springframework.beans.BeanUtils | |||
| import org.springframework.stereotype.Service | |||
| @Service | |||
| class SubsidiaryContactService( | |||
| private val subsidiaryContactRepository: SubsidiaryContactRepository, | |||
| private val subsidiaryRepository: SubsidiaryRepository | |||
| ) { | |||
| fun findAllBySubsidiaryId(subsidiaryId: Long): List<SubsidiaryContact> { | |||
| return subsidiaryContactRepository.findAllBySubsidiaryId(subsidiaryId) | |||
| } | |||
| fun saveContactsBySubsidiary(saveSubsidiaryId: Long, saveSubsidiaryContact: List<SubsidiaryContact>) { | |||
| val subsidiaryContactList = mutableListOf<SubsidiaryContact>() | |||
| val subsidiaryContactSize = saveSubsidiaryContact.size | |||
| for (i in 0 until subsidiaryContactSize) { | |||
| val subsidiary = subsidiaryRepository.findById(saveSubsidiaryId).orElseThrow() | |||
| val subsidiaryContactId = saveSubsidiaryContact[i].id | |||
| val subsidiaryContact = | |||
| if (subsidiaryContactId != null && subsidiaryContactId > 0) subsidiaryContactRepository.findById( | |||
| subsidiaryContactId | |||
| ).orElseThrow() else SubsidiaryContact() | |||
| subsidiaryContact.apply { | |||
| this.subsidiary = subsidiary | |||
| name = saveSubsidiaryContact[i].name | |||
| phone = saveSubsidiaryContact[i].phone | |||
| email = saveSubsidiaryContact[i].email | |||
| } | |||
| subsidiaryContactList.add(subsidiaryContact) | |||
| } | |||
| subsidiaryContactRepository.saveAll(subsidiaryContactList) | |||
| } | |||
| fun deleteContactsBySubsidiary(deleteContactIds: List<Long>) { | |||
| subsidiaryContactRepository.deleteAllById(deleteContactIds.filter { it > 0 }) | |||
| } | |||
| } | |||
| @@ -1,30 +1,90 @@ | |||
| package com.ffii.tsms.modules.project.service | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryRepository | |||
| import com.ffii.core.support.AbstractBaseEntityService | |||
| import com.ffii.core.support.JdbcDao | |||
| 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 com.ffii.tsms.modules.data.entity.SubsidiaryRepository | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryType | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryTypeRepository | |||
| import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService | |||
| import com.ffii.tsms.modules.data.service.SubsidiaryContactService | |||
| import com.ffii.tsms.modules.data.web.models.SaveSubsidiaryResponse | |||
| import com.ffii.tsms.modules.project.web.models.SaveSubsidiaryRequest | |||
| import org.springframework.beans.BeanUtils | |||
| import org.springframework.stereotype.Service | |||
| import java.util.Optional | |||
| @Service | |||
| class SubsidiaryService( | |||
| private val subsidiaryRepository: SubsidiaryRepository | |||
| ) { | |||
| fun allSubsidiaries(): List<Subsidiary> { | |||
| return subsidiaryRepository.findAll() | |||
| open class SubsidiaryService( | |||
| private val subsidiaryRepository: SubsidiaryRepository, | |||
| private val jdbcDao: JdbcDao, | |||
| private val customerSubsidiaryService: CustomerSubsidiaryService, | |||
| private val subsidiaryTypeRepository: SubsidiaryTypeRepository, | |||
| private val subsidiaryContactService: SubsidiaryContactService, | |||
| ) : AbstractBaseEntityService<Subsidiary, Long, SubsidiaryRepository>(jdbcDao, subsidiaryRepository) { | |||
| open fun allSubsidiaries(): List<Subsidiary> { | |||
| return subsidiaryRepository.findAllByDeletedFalse() | |||
| } | |||
| open fun allSubsidiaryTypes(): List<SubsidiaryType> { | |||
| return subsidiaryTypeRepository.findAll() | |||
| } | |||
| open fun findSubsidiary(id: Long): Subsidiary { | |||
| return subsidiaryRepository.findById(id).orElseThrow() | |||
| } | |||
| fun saveSubsidiary(request: NewSubsidiaryRequest): Subsidiary { | |||
| open fun findSubsidiaryByCode(code: String): Optional<Subsidiary> { | |||
| return subsidiaryRepository.findByCode(code); | |||
| } | |||
| open fun saveSubsidiary(saveSubsidiary: SaveSubsidiaryRequest): SaveSubsidiaryResponse { | |||
| val duplicateSubsidiary = findSubsidiaryByCode(saveSubsidiary.code) | |||
| //check duplicate customer | |||
| if (duplicateSubsidiary.isPresent && duplicateSubsidiary.orElseThrow().id?.equals(saveSubsidiary.id) == false) { | |||
| logger.info(duplicateSubsidiary.get()) | |||
| return SaveSubsidiaryResponse( | |||
| subsidiary = duplicateSubsidiary.get(), | |||
| message = "The subsidiary code has already existed" | |||
| ); | |||
| } | |||
| val subsidiaryType = subsidiaryTypeRepository.findById(saveSubsidiary.typeId).orElseThrow() | |||
| val instance = if (saveSubsidiary.id != null && saveSubsidiary.id > 0) subsidiaryRepository.findById(saveSubsidiary.id) | |||
| .orElseThrow() else Subsidiary(); | |||
| BeanUtils.copyProperties(saveSubsidiary, instance) | |||
| instance.apply { | |||
| this.subsidiaryType = subsidiaryType | |||
| } | |||
| val subsidiary = | |||
| subsidiaryRepository.saveAndFlush(instance) | |||
| val subsidiaryId = subsidiary.id | |||
| if (subsidiaryId != null && subsidiaryId > 0) { | |||
| if (saveSubsidiary.deleteCustomerIds.isNotEmpty()) { | |||
| customerSubsidiaryService.deleteCustomersBySubsidiary(subsidiaryId, saveSubsidiary.deleteCustomerIds) | |||
| } | |||
| if (saveSubsidiary.addCustomerIds.isNotEmpty()) { | |||
| customerSubsidiaryService.saveCustomersBySubsidiary(subsidiaryId, saveSubsidiary.addCustomerIds) | |||
| } | |||
| // TODO: Add tasks, milestones, allocated | |||
| val subsidary = Subsidiary().apply { | |||
| code = request.code | |||
| name = request.name | |||
| brNo = request.brNo | |||
| address = request.address | |||
| district = request.district | |||
| if (saveSubsidiary.deleteContactIds.isNotEmpty()) { | |||
| subsidiaryContactService.deleteContactsBySubsidiary(saveSubsidiary.deleteContactIds) | |||
| } | |||
| if (saveSubsidiary.addContacts.isNotEmpty()) { | |||
| subsidiaryContactService.saveContactsBySubsidiary(subsidiaryId, saveSubsidiary.addContacts) | |||
| } | |||
| } | |||
| return subsidiaryRepository.save(subsidary) | |||
| return SaveSubsidiaryResponse(subsidiary = subsidiary, message = "Success"); | |||
| } | |||
| } | |||
| @@ -1,12 +1,12 @@ | |||
| package com.ffii.tsms.modules.data.web | |||
| import com.ffii.core.support.AbstractBaseEntityService | |||
| import com.ffii.core.support.JdbcDao | |||
| import com.ffii.tsms.modules.data.entity.* | |||
| import com.ffii.tsms.modules.data.entity.Customer | |||
| import com.ffii.tsms.modules.data.entity.CustomerType | |||
| import com.ffii.tsms.modules.data.service.CustomerContactService | |||
| import com.ffii.tsms.modules.data.service.CustomerService | |||
| import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService | |||
| import com.ffii.tsms.modules.data.web.models.CustomerResponse | |||
| import com.ffii.tsms.modules.data.web.models.NewCustomerResponse | |||
| import com.ffii.tsms.modules.data.web.models.SaveCustomerResponse | |||
| import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest | |||
| import org.springframework.web.bind.annotation.GetMapping | |||
| import org.springframework.web.bind.annotation.RequestMapping | |||
| @@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.ResponseStatus | |||
| @RestController | |||
| @RequestMapping("/customer") | |||
| class CustomerController(private val customerService: CustomerService, private val customerSubsidiaryService: CustomerSubsidiaryService, | |||
| private val customerContactRepository: CustomerContactRepository | |||
| private val customerContactService: CustomerContactService | |||
| ) { | |||
| @GetMapping | |||
| fun allCustomers(): List<Customer> { | |||
| @@ -45,13 +45,13 @@ class CustomerController(private val customerService: CustomerService, private v | |||
| val customer = customerService.findCustomer(id) | |||
| val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id) | |||
| val contacts = customerContactRepository.findAllByCustomerId(id) | |||
| val contacts = customerContactService.findAllByCustomerId(id) | |||
| return CustomerResponse(customer, subsidiaryIds, contacts) | |||
| } | |||
| @PostMapping("/save") | |||
| fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): NewCustomerResponse { | |||
| fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): SaveCustomerResponse { | |||
| return customerService.saveCustomer(saveCustomer) | |||
| } | |||
| } | |||
| @@ -28,4 +28,9 @@ class CustomerSubsidiaryController(private val customerSubsidiaryService: Custom | |||
| fun findAllSubsidiaryIdsByCustomerId(@PathVariable customerId: Long): List<Long> { | |||
| return customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(customerId) | |||
| } | |||
| @GetMapping("/customers/{subsidiaryId}") | |||
| fun findAllCustomerIdsBySubsidiaryId(@PathVariable subsidiaryId: Long): List<Long> { | |||
| return customerSubsidiaryService.findAllCustomerIdsBySubsidiaryId(subsidiaryId) | |||
| } | |||
| } | |||
| @@ -1,27 +1,59 @@ | |||
| package com.ffii.tsms.modules.data.web | |||
| import com.ffii.tsms.modules.data.entity.CustomerType | |||
| import com.ffii.tsms.modules.data.entity.Staff | |||
| import com.ffii.tsms.modules.data.entity.Subsidiary | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryType | |||
| import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService | |||
| import com.ffii.tsms.modules.data.service.StaffsService | |||
| import com.ffii.tsms.modules.data.service.SubsidiaryContactService | |||
| import com.ffii.tsms.modules.data.web.models.CustomerResponse | |||
| import com.ffii.tsms.modules.data.web.models.SaveSubsidiaryResponse | |||
| import com.ffii.tsms.modules.data.web.models.SubsidiaryResponse | |||
| import com.ffii.tsms.modules.project.service.SubsidiaryService | |||
| import com.ffii.tsms.modules.project.web.models.NewSubsidiaryRequest | |||
| import com.ffii.tsms.modules.project.web.models.SaveSubsidiaryRequest | |||
| import jakarta.validation.Valid | |||
| import org.springframework.http.HttpStatus | |||
| import org.springframework.web.bind.annotation.DeleteMapping | |||
| import org.springframework.web.bind.annotation.GetMapping | |||
| import org.springframework.web.bind.annotation.PathVariable | |||
| 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.ResponseStatus | |||
| 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) { | |||
| class SubsidiaryController(private val subsidiaryService: SubsidiaryService, private val customerSubsidiaryService: CustomerSubsidiaryService, private val subsidiaryContactService: SubsidiaryContactService) { | |||
| @GetMapping | |||
| fun allSubsidiaries(): List<Subsidiary> { | |||
| return subsidiaryService.allSubsidiaries() | |||
| } | |||
| @PostMapping("/new") | |||
| fun saveSubsidiary(@Valid @RequestBody newSubsidary: NewSubsidiaryRequest): Subsidiary { | |||
| return subsidiaryService.saveSubsidiary(newSubsidary) | |||
| @GetMapping("/types") | |||
| fun allCustomerTypes(): List<SubsidiaryType> { | |||
| return subsidiaryService.allSubsidiaryTypes() | |||
| } | |||
| @DeleteMapping("/{id}") | |||
| @ResponseStatus(HttpStatus.NO_CONTENT) | |||
| fun deleteCustomer(@PathVariable id: Long) { | |||
| subsidiaryService.markDelete(id) | |||
| } | |||
| @GetMapping("/{id}") | |||
| fun findSubsidiary(@PathVariable id: Long): SubsidiaryResponse { | |||
| val subsidiary = subsidiaryService.findSubsidiary(id) | |||
| val customerIds = customerSubsidiaryService.findAllCustomerIdsBySubsidiaryId(id) | |||
| val contacts = subsidiaryContactService.findAllBySubsidiaryId(id) | |||
| return SubsidiaryResponse(subsidiary, customerIds, contacts) | |||
| } | |||
| @PostMapping("/save") | |||
| fun saveSubsidiary(@Valid @RequestBody saveSubsidiary: SaveSubsidiaryRequest): SaveSubsidiaryResponse { | |||
| return subsidiaryService.saveSubsidiary(saveSubsidiary) | |||
| } | |||
| } | |||
| @@ -1,19 +0,0 @@ | |||
| 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>, | |||
| ) | |||
| @@ -9,7 +9,7 @@ data class SaveCustomerRequest( | |||
| val code: String, | |||
| @field:NotBlank(message = "customer name cannot be empty") | |||
| val name: String, | |||
| @field:NotNull(message = "customer name cannot be empty") | |||
| @field:NotNull(message = "customer type cannot be empty") | |||
| val typeId: Long, | |||
| val brNo: String?, | |||
| @@ -2,7 +2,7 @@ package com.ffii.tsms.modules.data.web.models | |||
| import com.ffii.tsms.modules.data.entity.Customer | |||
| data class NewCustomerResponse ( | |||
| data class SaveCustomerResponse ( | |||
| val customer: Customer, | |||
| val message: String, | |||
| ) | |||
| @@ -0,0 +1,27 @@ | |||
| package com.ffii.tsms.modules.project.web.models | |||
| import com.ffii.tsms.modules.data.entity.CustomerContact | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryContact | |||
| import jakarta.validation.constraints.NotBlank | |||
| import jakarta.validation.constraints.NotNull | |||
| data class SaveSubsidiaryRequest( | |||
| @field:NotBlank(message = "subsidiary code cannot be empty") | |||
| val code: String, | |||
| @field:NotBlank(message = "subsidiary name cannot be empty") | |||
| val name: String, | |||
| @field:NotNull(message = "subsidiary type cannot be empty") | |||
| val typeId: Long, | |||
| val brNo: String?, | |||
| val address: String?, | |||
| val district: String?, | |||
| val deleteCustomerIds: List<Long>, | |||
| val addCustomerIds: List<Long>, | |||
| val deleteContactIds: List<Long>, | |||
| val addContacts: List<SubsidiaryContact>, | |||
| val id: Long?, | |||
| ) | |||
| @@ -0,0 +1,8 @@ | |||
| package com.ffii.tsms.modules.data.web.models | |||
| import com.ffii.tsms.modules.data.entity.Subsidiary | |||
| data class SaveSubsidiaryResponse ( | |||
| val subsidiary: Subsidiary, | |||
| val message: String, | |||
| ) | |||
| @@ -0,0 +1,13 @@ | |||
| package com.ffii.tsms.modules.data.web.models | |||
| import com.ffii.tsms.modules.data.entity.Customer | |||
| import com.ffii.tsms.modules.data.entity.CustomerContact | |||
| import com.ffii.tsms.modules.data.entity.Subsidiary | |||
| import com.ffii.tsms.modules.data.entity.SubsidiaryContact | |||
| data class SubsidiaryResponse( | |||
| val subsidiary: Subsidiary, | |||
| val customerIds: List<Long>, | |||
| val contacts: List<SubsidiaryContact>, | |||
| ) | |||