Parcourir la source

Update customer, subsidiary, staff

tags/Baseline_30082024_BACKEND_UAT
cyril.tsui il y a 1 an
Parent
révision
d956860e18
8 fichiers modifiés avec 103 ajouts et 33 suppressions
  1. +9
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java
  2. +5
    -1
      src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffectiveRepository.java
  3. +11
    -6
      src/main/java/com/ffii/tsms/modules/data/entity/Staff.java
  4. +1
    -1
      src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt
  5. +42
    -1
      src/main/java/com/ffii/tsms/modules/data/service/SalaryEffectiveService.kt
  6. +24
    -13
      src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt
  7. +1
    -1
      src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt
  8. +10
    -10
      src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt

+ 9
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffective.java Voir le fichier

@@ -30,6 +30,11 @@ public class SalaryEffective extends IdEntity<Long> {
@NotNull
private Salary salary;

@ManyToOne
@JoinColumn(name = "staffId")
@NotNull
private Staff staff;

public Salary getSalary() {
return salary;
}
@@ -37,4 +42,8 @@ public class SalaryEffective extends IdEntity<Long> {
public void setSalary(Salary salary) {
this.salary = salary;
}

public Staff getStaff() { return staff; }

public void setStaff(Staff staff) { this.staff = staff; }
}

+ 5
- 1
src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffectiveRepository.java Voir le fichier

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

import com.ffii.core.support.AbstractRepository;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface SalaryEffectiveRepository extends AbstractRepository<SalaryEffective, Long> {

Optional<SalaryEffective> findByStaffIdAndSalaryId(@Param("staffId") Long staffId, @Param("salaryId") Long salaryId);
}

+ 11
- 6
src/main/java/com/ffii/tsms/modules/data/entity/Staff.java Voir le fichier

@@ -51,10 +51,15 @@ public class Staff extends BaseEntity<Long> {
@JoinColumn(name = "skillSetId")
private Skill skill;

// @NotNull
// @ManyToOne
// @JoinColumn(name = "salaryEffId")
// private SalaryEffective salaryEffective;

@NotNull
@ManyToOne
@JoinColumn(name = "salaryEffId")
private SalaryEffective salaryEffective;
@JoinColumn(name = "salaryId")
private Salary salary;

@ManyToOne
@JoinColumn(name = "departmentId")
@@ -159,12 +164,12 @@ public class Staff extends BaseEntity<Long> {
this.email = email;
}

public SalaryEffective getSalaryEffective() {
return salaryEffective;
public Salary getSalary() {
return salary;
}

public void setSalaryEffective(SalaryEffective salaryEffective) {
this.salaryEffective = salaryEffective;
public void setSalary(Salary salary) {
this.salary = salary;
}

public Skill getSkill() {


+ 1
- 1
src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt Voir le fichier

@@ -30,7 +30,7 @@ open class CustomerService(
}

open fun findCustomer(id: Long): Customer {
return customerRepository.findById(id).orElseThrow()
return customerRepository.findById(id).orElse(Customer())
}

open fun findCustomerByCode(code: String): Optional<Customer> {


+ 42
- 1
src/main/java/com/ffii/tsms/modules/data/service/SalaryEffectiveService.kt Voir le fichier

@@ -4,12 +4,16 @@ import com.ffii.core.support.AbstractIdEntityService
import com.ffii.core.support.JdbcDao
import com.ffii.tsms.modules.data.entity.SalaryEffective
import com.ffii.tsms.modules.data.entity.SalaryEffectiveRepository
import com.ffii.tsms.modules.data.entity.SalaryRepository
import com.ffii.tsms.modules.data.entity.StaffRepository
import org.springframework.stereotype.Service

import java.time.LocalDate

@Service
open class SalaryEffectiveService(
private val salaryEffectiveRepository: SalaryEffectiveRepository,
private val staffRepository: StaffRepository,
private val salaryRepository: SalaryRepository,
private val jdbcDao: JdbcDao,
) : AbstractIdEntityService<SalaryEffective, Long, SalaryEffectiveRepository>(jdbcDao, salaryEffectiveRepository) {

@@ -22,4 +26,41 @@ open class SalaryEffectiveService(
// )
// return jdbcDao.queryForList(sql.toString(), args)
// }

open fun findByStaffIdAndSalaryId(staffId: Long, salaryId: Long): SalaryEffective? {
return salaryEffectiveRepository.findByStaffIdAndSalaryId(staffId, salaryId).orElse(null)
}

open fun findLatestSalaryIdByStaffId(staffId: Long): Long {
val sql = StringBuilder("select salaryId from salary_effective where staffId = :staffId order by id desc limit 1")

val result = jdbcDao.queryForInt(sql.toString(), mapOf("staffId" to staffId))

return if(result > 0) result.toLong() else -1
}

open fun saveSalaryEffective (staffId: Long, salaryId: Long): SalaryEffective {
val existSalaryEffective = findByStaffIdAndSalaryId(staffId, salaryId)

if (existSalaryEffective != null) {
val latestSalaryId = findLatestSalaryIdByStaffId(staffId)

// If latest salary id is same as current salary id, then skip
if (latestSalaryId == existSalaryEffective.salary.id) {
return existSalaryEffective
}
}

val staff = staffRepository.findById(staffId).orElseThrow()
val salary = salaryRepository.findById(salaryId).orElseThrow()
val salaryEffective = SalaryEffective().apply {
date = LocalDate.now()
this.staff = staff
this.salary = salary
}

salaryEffectiveRepository.save(salaryEffective)

return salaryEffective
}
}

+ 24
- 13
src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt Voir le fichier

@@ -22,7 +22,9 @@ open class StaffsService(
private val gradeRepository: GradeRepository,
private val teamRepository: TeamRepository,
private val skillRepository: SkillRepository,
private val salaryRepository: SalaryRepository,
private val salaryEffectiveRepository: SalaryEffectiveRepository,
private val salaryEffectiveService: SalaryEffectiveService,
private val departmentRepository: DepartmentRepository,
private val jdbcDao: JdbcDao,
private val passwordEncoder: PasswordEncoder
@@ -73,10 +75,11 @@ open class StaffsService(
val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow()
val joinPosition = positionRepository.findById(req.joinPositionId).orElseThrow()
val company = companyRepository.findById(req.companyId).orElseThrow()
val grade = gradeRepository.findById(req.gradeId).orElseThrow()
val team = teamRepository.findById(req.teamId).orElseThrow()
val skill = skillRepository.findById(req.skillSetId).orElseThrow()
val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow()
val grade = if (req.gradeId != null && req.gradeId > 0L) gradeRepository.findById(req.gradeId).orElseThrow() else null
val team = if (req.teamId != null && req.teamId > 0L) teamRepository.findById(req.teamId).orElseThrow() else null
val skill = if (req.skillSetId != null && req.skillSetId > 0L) skillRepository.findById(req.skillSetId).orElseThrow() else null
val salary = salaryRepository.findById(req.salaryId).orElseThrow()
// val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow()
val department = departmentRepository.findById(req.departmentId).orElseThrow()

// // TODO: Add tasks, milestones, allocated
@@ -100,10 +103,15 @@ open class StaffsService(
this.grade = grade
this.team = team
this.skill = skill
this.salaryEffective = salaryEffective
this.salary = salary
this.department = department
}
return staffRepository.save(staff)

staffRepository.save(staff)

salaryEffectiveService.saveSalaryEffective(staff.id!!, salary.id!!)
logger.info(staff.id)
return staff
}

@Transactional(rollbackFor = [Exception::class])
@@ -111,10 +119,11 @@ open class StaffsService(
val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow()
val joinPosition = positionRepository.findById(req.joinPositionId).orElseThrow()
val company = companyRepository.findById(req.companyId).orElseThrow()
val grade = gradeRepository.findById(req.gradeId).orElseThrow()
val team = teamRepository.findById(req.teamId).orElseThrow()
val skill = skillRepository.findById(req.skillSetId).orElseThrow()
val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow()
val grade = if (req.gradeId != null && req.gradeId > 0L) gradeRepository.findById(req.gradeId).orElseThrow() else null
val team = if (req.teamId != null && req.teamId > 0L) teamRepository.findById(req.teamId).orElseThrow() else null
val skill = if (req.skillSetId != null && req.skillSetId > 0L) skillRepository.findById(req.skillSetId).orElseThrow() else null
val salary = salaryRepository.findById(req.salaryId).orElseThrow()
// val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow()
val department = departmentRepository.findById(req.departmentId).orElseThrow()

staff.apply {
@@ -136,17 +145,19 @@ open class StaffsService(
this.grade = grade
this.team = team
this.skill = skill
this.salaryEffective = salaryEffective
this.salary = salary
this.department = department
}

salaryEffectiveService.saveSalaryEffective(staff.id!!, salary.id!!)

return staffRepository.save(staff)
}

@Transactional(rollbackFor = [Exception::class])
open fun saveOrUpdate(req: NewStaffRequest): Staff {
val staff = find(req.id).get()
if (req.id != 0L) {
val staff = if(req.id > 0L) find(req.id).get() else Staff()
if (req.id > 0L) {
updateStaff(req, staff)
} else {
saveStaff(req)


+ 1
- 1
src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt Voir le fichier

@@ -31,7 +31,7 @@ open class SubsidiaryService(
}

open fun findSubsidiary(id: Long): Subsidiary {
return subsidiaryRepository.findById(id).orElseThrow()
return subsidiaryRepository.findById(id).orElse(Subsidiary())
}

open fun findSubsidiaryByCode(code: String): Optional<Subsidiary> {


+ 10
- 10
src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt Voir le fichier

@@ -15,24 +15,24 @@ data class NewStaffRequest(
val staffId: String,
@field:NotNull(message = "Staff companyId cannot be empty")
val companyId: Long,
@field:NotNull(message = "Staff salaryEffId cannot be empty")
val salaryEffId: Long,
@field:NotNull(message = "Staff skillSetId cannot be empty")
val skillSetId: Long,
@field:NotNull(message = "Staff salaryId cannot be empty")
val salaryId: Long,
// @field:NotNull(message = "Staff skillSetId cannot be empty")
val skillSetId: Long?,

val joinDate: LocalDate,
val currentPositionId: Long,
val joinPositionId: Long,
val gradeId: Long,
val teamId: Long,
val gradeId: Long?,
val teamId: Long?,
val departmentId: Long,
val phone1: String,
val phone2: String,
val phone2: String?,
val email: String,
val emergContactName: String,
val emergContactPhone: String,
val employType: String,
val departDate: LocalDate,
val departReason: String,
val remark: String,
val departDate: LocalDate?,
val departReason: String?,
val remark: String?,
)

Chargement…
Annuler
Enregistrer