@@ -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() | |||||
} | |||||
} |