From 94e03db1ed00e51cd2669e7e4e2cd69fc3b41906 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Wed, 11 Sep 2024 17:42:05 +0800 Subject: [PATCH] expense related files --- .../tsms/modules/project/entity/Expense.kt | 50 +++++++++++++++++++ .../project/entity/ExpenseRepository.kt | 8 +++ .../entity/projections/ExpenseSearchInfo.kt | 26 ++++++++++ .../modules/project/service/ExpenseService.kt | 21 ++++++++ .../modules/project/web/ExpenseController.kt | 18 +++++++ 5 files changed, 123 insertions(+) create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/Expense.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/ExpenseRepository.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/entity/projections/ExpenseSearchInfo.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/service/ExpenseService.kt create mode 100644 src/main/java/com/ffii/tsms/modules/project/web/ExpenseController.kt diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/Expense.kt b/src/main/java/com/ffii/tsms/modules/project/entity/Expense.kt new file mode 100644 index 0000000..120e6e5 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/Expense.kt @@ -0,0 +1,50 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.entity.BaseEntity +import com.ffii.tsms.modules.data.entity.Staff +import jakarta.persistence.* +import jakarta.validation.constraints.NotNull +import java.time.LocalDateTime + +@Entity +@Table(name = "expense") +open class Expense : BaseEntity(){ + + @NotNull + @OneToOne + @JoinColumn(name = "projectId") + open var project: Project? = null + + @NotNull + @OneToOne + @JoinColumn(name = "staffId") + open var staff: Staff? = null + + @NotNull + @Column(name = "description", length = 255) + open var description: String? = null + + @NotNull + @Column(name = "amount") + open var amount: Double? = null + + @Column(name = "supporting") + open var supporting: Int? = null + + @NotNull + @Column(name = "decision") + open var decision: Int? = null + + @Column(name = "approvedAmount") + open var approvedAmount: Double? = null + + @Column(name = "verifiedDatetime") + open var verifiedDatetime: LocalDateTime? = null + + @Column(name = "verifiedBy") + open var verifiedBy: Int? = null + + @Column(name = "remark", length = 1500) + open var remark: String? = null + +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/ExpenseRepository.kt b/src/main/java/com/ffii/tsms/modules/project/entity/ExpenseRepository.kt new file mode 100644 index 0000000..aba7cb5 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/ExpenseRepository.kt @@ -0,0 +1,8 @@ +package com.ffii.tsms.modules.project.entity + +import com.ffii.core.support.AbstractRepository +import com.ffii.tsms.modules.project.entity.projections.ExpenseSearchInfo + +interface ExpenseRepository : AbstractRepository { + fun findExpenseSearchInfoByDeletedFalse(): List +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/entity/projections/ExpenseSearchInfo.kt b/src/main/java/com/ffii/tsms/modules/project/entity/projections/ExpenseSearchInfo.kt new file mode 100644 index 0000000..6178041 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/entity/projections/ExpenseSearchInfo.kt @@ -0,0 +1,26 @@ +package com.ffii.tsms.modules.project.entity.projections + +import org.springframework.beans.factory.annotation.Value +import java.time.LocalDateTime + +interface ExpenseSearchInfo { + val id: Long + + @get:Value("#{target.project.code}") + val projectCode: String + + @get:Value("#{target.project.name}") + val projectName: String + + @get:Value("#{target.staff.staffId}") + val staffCode: String + + @get:Value("#{target.staff.name}") + val staffName: String + + val description: String + val amount: Double + val approvedAmount: Double? + val verifiedDatetime: LocalDateTime + val remark: String +} diff --git a/src/main/java/com/ffii/tsms/modules/project/service/ExpenseService.kt b/src/main/java/com/ffii/tsms/modules/project/service/ExpenseService.kt new file mode 100644 index 0000000..9dc9932 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/service/ExpenseService.kt @@ -0,0 +1,21 @@ +package com.ffii.tsms.modules.project.service + +import com.ffii.core.support.AbstractIdEntityService +import com.ffii.core.support.JdbcDao +import com.ffii.tsms.modules.project.entity.Expense +import com.ffii.tsms.modules.project.entity.ExpenseRepository +import com.ffii.tsms.modules.project.entity.Invoice +import com.ffii.tsms.modules.project.entity.InvoiceRepository +import com.ffii.tsms.modules.project.entity.projections.ExpenseSearchInfo +import org.springframework.stereotype.Service + +@Service +open class ExpenseService( + private val expenseRepository: ExpenseRepository, + private val jdbcDao: JdbcDao, + ) : AbstractIdEntityService(jdbcDao, expenseRepository){ + open fun findExpenseSearchInfo(): List { + return expenseRepository.findExpenseSearchInfoByDeletedFalse() + } + +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/project/web/ExpenseController.kt b/src/main/java/com/ffii/tsms/modules/project/web/ExpenseController.kt new file mode 100644 index 0000000..3180926 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/project/web/ExpenseController.kt @@ -0,0 +1,18 @@ +package com.ffii.tsms.modules.project.web + +import com.ffii.tsms.modules.project.entity.projections.ExpenseSearchInfo +import com.ffii.tsms.modules.project.service.ExpenseService +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/expense") +class ExpenseController( + private val expenseService: ExpenseService, +) { + @GetMapping + fun allExpense(): List { + return expenseService.findExpenseSearchInfo() + } +} \ No newline at end of file