@@ -11,5 +11,7 @@ public interface CustomerSubsidiaryRepository extends AbstractRepository<Custome | |||||
List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId); | 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); | Optional<CustomerSubsidiary> findByCustomerIdAndSubsidiaryId(@Param("customerId") Long customerId, @Param("subsidiaryId") Long subsidiaryId); | ||||
} | } |
@@ -1,9 +1,7 @@ | |||||
package com.ffii.tsms.modules.data.entity; | package com.ffii.tsms.modules.data.entity; | ||||
import com.ffii.core.entity.BaseEntity; | 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 jakarta.validation.constraints.NotNull; | ||||
import java.time.LocalTime; | import java.time.LocalTime; | ||||
@@ -28,6 +26,11 @@ public class Subsidiary extends BaseEntity<Long> { | |||||
@Column(name = "district", length = 30) | @Column(name = "district", length = 30) | ||||
private String district; | private String district; | ||||
@OneToOne | |||||
@NotNull | |||||
@JoinColumn(name = "typeId") | |||||
private SubsidiaryType subsidiaryType; | |||||
public String getAddress() { | public String getAddress() { | ||||
return address; | return address; | ||||
} | } | ||||
@@ -67,4 +70,12 @@ public class Subsidiary extends BaseEntity<Long> { | |||||
public void setName(String name) { | public void setName(String name) { | ||||
this.name = 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; | package com.ffii.tsms.modules.data.entity; | ||||
import com.ffii.core.support.AbstractRepository; | 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; | package com.ffii.tsms.modules.data.entity; | ||||
import com.ffii.core.support.AbstractRepository; | 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> { | 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.CustomerContact | ||||
import com.ffii.tsms.modules.data.entity.CustomerContactRepository | import com.ffii.tsms.modules.data.entity.CustomerContactRepository | ||||
import com.ffii.tsms.modules.data.entity.CustomerRepository | import com.ffii.tsms.modules.data.entity.CustomerRepository | ||||
import org.springframework.beans.BeanUtils | |||||
import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
@Service | @Service | ||||
@@ -31,18 +32,14 @@ class CustomerContactService( | |||||
val customerContact = | val customerContact = | ||||
if (customerContactId != null && customerContactId > 0) customerContactRepository.findById( | if (customerContactId != null && customerContactId > 0) customerContactRepository.findById( | ||||
customerContactId | 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) | 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.AbstractBaseEntityService | ||||
import com.ffii.core.support.JdbcDao | import com.ffii.core.support.JdbcDao | ||||
import com.ffii.tsms.modules.data.entity.Customer | 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.CustomerType | ||||
import com.ffii.tsms.modules.data.entity.CustomerRepository | import com.ffii.tsms.modules.data.entity.CustomerRepository | ||||
import com.ffii.tsms.modules.data.entity.CustomerTypeRepository | 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 com.ffii.tsms.modules.project.web.models.SaveCustomerRequest | ||||
import org.springframework.beans.BeanUtils | import org.springframework.beans.BeanUtils | ||||
import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
@@ -38,13 +37,13 @@ open class CustomerService( | |||||
return customerRepository.findByCode(code); | return customerRepository.findByCode(code); | ||||
} | } | ||||
open fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse { | |||||
open fun saveCustomer(saveCustomer: SaveCustomerRequest): SaveCustomerResponse { | |||||
val duplicateCustomer = findCustomerByCode(saveCustomer.code) | val duplicateCustomer = findCustomerByCode(saveCustomer.code) | ||||
//check duplicate customer | //check duplicate customer | ||||
if (duplicateCustomer.isPresent && duplicateCustomer.orElseThrow().id?.equals(saveCustomer.id) == false) { | if (duplicateCustomer.isPresent && duplicateCustomer.orElseThrow().id?.equals(saveCustomer.id) == false) { | ||||
return NewCustomerResponse( | |||||
return SaveCustomerResponse( | |||||
customer = duplicateCustomer.get(), | customer = duplicateCustomer.get(), | ||||
message = "The customer code has already existed" | 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) | return customerSubsidiaryRepository.findAllByCustomerId(customerId) | ||||
} | } | ||||
fun findAllBySubsidiaryId(subsidiaryId : Long) : List<CustomerSubsidiary> { | |||||
return customerSubsidiaryRepository.findAllBySubsidiaryId(subsidiaryId) | |||||
} | |||||
fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? { | fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? { | ||||
return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull() | return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull() | ||||
} | } | ||||
@@ -36,6 +40,15 @@ class CustomerSubsidiaryService( | |||||
} else return emptyList() | } 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>) { | fun saveSubsidiariesByCustomer(saveCustomerId: Long, saveSubsidiaryIds: List<Long>) { | ||||
val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>() | val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>() | ||||
@@ -60,6 +73,30 @@ class CustomerSubsidiaryService( | |||||
customerSubsidiaryRepository.saveAll(customerSubsidiaryList) | 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>) { | fun deleteSubsidiariesByCustomer(deleteCustomerId: Long, deleteSubsidiaryIds: List<Long>) { | ||||
val customerSubsidiaryList: List<CustomerSubsidiary> = findAllByCustomerId(deleteCustomerId) | val customerSubsidiaryList: List<CustomerSubsidiary> = findAllByCustomerId(deleteCustomerId) | ||||
@@ -70,4 +107,15 @@ class CustomerSubsidiaryService( | |||||
customerSubsidiaryRepository.deleteAllById(filteredSubsidiaryIds) | 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 | 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.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 org.springframework.stereotype.Service | ||||
import java.util.Optional | |||||
@Service | @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 | 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.CustomerService | ||||
import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService | 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.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 com.ffii.tsms.modules.project.web.models.SaveCustomerRequest | ||||
import org.springframework.web.bind.annotation.GetMapping | import org.springframework.web.bind.annotation.GetMapping | ||||
import org.springframework.web.bind.annotation.RequestMapping | import org.springframework.web.bind.annotation.RequestMapping | ||||
@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.ResponseStatus | |||||
@RestController | @RestController | ||||
@RequestMapping("/customer") | @RequestMapping("/customer") | ||||
class CustomerController(private val customerService: CustomerService, private val customerSubsidiaryService: CustomerSubsidiaryService, | class CustomerController(private val customerService: CustomerService, private val customerSubsidiaryService: CustomerSubsidiaryService, | ||||
private val customerContactRepository: CustomerContactRepository | |||||
private val customerContactService: CustomerContactService | |||||
) { | ) { | ||||
@GetMapping | @GetMapping | ||||
fun allCustomers(): List<Customer> { | fun allCustomers(): List<Customer> { | ||||
@@ -45,13 +45,13 @@ class CustomerController(private val customerService: CustomerService, private v | |||||
val customer = customerService.findCustomer(id) | val customer = customerService.findCustomer(id) | ||||
val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id) | val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id) | ||||
val contacts = customerContactRepository.findAllByCustomerId(id) | |||||
val contacts = customerContactService.findAllByCustomerId(id) | |||||
return CustomerResponse(customer, subsidiaryIds, contacts) | return CustomerResponse(customer, subsidiaryIds, contacts) | ||||
} | } | ||||
@PostMapping("/save") | @PostMapping("/save") | ||||
fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): NewCustomerResponse { | |||||
fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): SaveCustomerResponse { | |||||
return customerService.saveCustomer(saveCustomer) | return customerService.saveCustomer(saveCustomer) | ||||
} | } | ||||
} | } |
@@ -28,4 +28,9 @@ class CustomerSubsidiaryController(private val customerSubsidiaryService: Custom | |||||
fun findAllSubsidiaryIdsByCustomerId(@PathVariable customerId: Long): List<Long> { | fun findAllSubsidiaryIdsByCustomerId(@PathVariable customerId: Long): List<Long> { | ||||
return customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(customerId) | 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 | 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.Staff | ||||
import com.ffii.tsms.modules.data.entity.Subsidiary | 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.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.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.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.RequestMapping | ||||
import org.springframework.web.bind.annotation.ResponseStatus | |||||
import org.springframework.web.bind.annotation.RestController | 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 | @RestController | ||||
@RequestMapping("/subsidiary") | @RequestMapping("/subsidiary") | ||||
class SubsidiaryController(private val subsidiaryService: SubsidiaryService) { | |||||
class SubsidiaryController(private val subsidiaryService: SubsidiaryService, private val customerSubsidiaryService: CustomerSubsidiaryService, private val subsidiaryContactService: SubsidiaryContactService) { | |||||
@GetMapping | @GetMapping | ||||
fun allSubsidiaries(): List<Subsidiary> { | fun allSubsidiaries(): List<Subsidiary> { | ||||
return subsidiaryService.allSubsidiaries() | 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, | val code: String, | ||||
@field:NotBlank(message = "customer name cannot be empty") | @field:NotBlank(message = "customer name cannot be empty") | ||||
val name: String, | val name: String, | ||||
@field:NotNull(message = "customer name cannot be empty") | |||||
@field:NotNull(message = "customer type cannot be empty") | |||||
val typeId: Long, | val typeId: Long, | ||||
val brNo: String?, | val brNo: String?, | ||||
@@ -2,7 +2,7 @@ package com.ffii.tsms.modules.data.web.models | |||||
import com.ffii.tsms.modules.data.entity.Customer | import com.ffii.tsms.modules.data.entity.Customer | ||||
data class NewCustomerResponse ( | |||||
data class SaveCustomerResponse ( | |||||
val customer: Customer, | val customer: Customer, | ||||
val message: String, | 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>, | |||||
) | |||||