| @@ -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<Long>(){ | |||||
| @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 | |||||
| } | |||||
| @@ -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<Expense, Long> { | |||||
| fun findExpenseSearchInfoByDeletedFalse(): List<ExpenseSearchInfo> | |||||
| } | |||||
| @@ -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 | |||||
| } | |||||
| @@ -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<Expense, Long, ExpenseRepository>(jdbcDao, expenseRepository){ | |||||
| open fun findExpenseSearchInfo(): List<ExpenseSearchInfo> { | |||||
| return expenseRepository.findExpenseSearchInfoByDeletedFalse() | |||||
| } | |||||
| } | |||||
| @@ -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<ExpenseSearchInfo> { | |||||
| return expenseService.findExpenseSearchInfo() | |||||
| } | |||||
| } | |||||