| @@ -14,7 +14,6 @@ open class ProjectExpense : BaseEntity<Long>(){ | |||||
| @Column(name = "expenseNo", length = 45) | @Column(name = "expenseNo", length = 45) | ||||
| open var expenseNo: String? = null | open var expenseNo: String? = null | ||||
| @NotNull | |||||
| @Column(name = "issueDate") | @Column(name = "issueDate") | ||||
| open var issueDate: LocalDate? = null | open var issueDate: LocalDate? = null | ||||
| @@ -26,4 +26,5 @@ interface ProjectExpenseSearchInfo { | |||||
| val amount: Double | val amount: Double | ||||
| val issueDate: LocalDate | val issueDate: LocalDate | ||||
| val receiptDate: LocalDate? | val receiptDate: LocalDate? | ||||
| val remarks: String? | |||||
| } | } | ||||
| @@ -6,6 +6,7 @@ import com.ffii.tsms.modules.project.entity.ProjectExpense | |||||
| import com.ffii.tsms.modules.project.entity.ProjectExpenseRepository | import com.ffii.tsms.modules.project.entity.ProjectExpenseRepository | ||||
| import com.ffii.tsms.modules.project.entity.ProjectRepository | import com.ffii.tsms.modules.project.entity.ProjectRepository | ||||
| import com.ffii.tsms.modules.project.entity.projections.ProjectExpenseSearchInfo | import com.ffii.tsms.modules.project.entity.projections.ProjectExpenseSearchInfo | ||||
| import com.ffii.tsms.modules.project.web.models.EditProjectExpenseRequest | |||||
| import com.ffii.tsms.modules.project.web.models.ProjectExpenseRequest | import com.ffii.tsms.modules.project.web.models.ProjectExpenseRequest | ||||
| import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
| @@ -42,4 +43,26 @@ open class ProjectExpenseService( | |||||
| return true | return true | ||||
| } | } | ||||
| open fun deleteProjectExpense(id: Long){ | |||||
| repository.save(repository.findById(id).orElseThrow().apply { deleted = true }) | |||||
| } | |||||
| open fun updateProjectExpenseDetail(projectExpenseReq: EditProjectExpenseRequest): ProjectExpenseSearchInfo?{ | |||||
| val projectExpense = repository.findById(projectExpenseReq.id!!) | |||||
| if(projectExpense.isPresent){ | |||||
| projectExpense.get().apply { | |||||
| projectExpenseReq.expenseNo?.let{ expenseNo = it} | |||||
| // projectExpenseReq.issueDate?.let { issueDate = it } | |||||
| // projectExpenseReq.receiptDate?.let{ receiptDate = it } | |||||
| amount = projectExpenseReq.amount | |||||
| projectExpenseReq.remarks?.let { remarks = it } | |||||
| }.also { | |||||
| saveAndFlush(it) | |||||
| } | |||||
| return repository.findExpenseSearchInfoByDeletedFalse().find { it.id == projectExpenseReq.id } | |||||
| } | |||||
| return null | |||||
| } | |||||
| } | } | ||||
| @@ -4,8 +4,10 @@ import com.ffii.tsms.modules.data.entity.Staff | |||||
| import com.ffii.tsms.modules.data.web.models.NewStaffRequest | import com.ffii.tsms.modules.data.web.models.NewStaffRequest | ||||
| import com.ffii.tsms.modules.project.entity.projections.ProjectExpenseSearchInfo | import com.ffii.tsms.modules.project.entity.projections.ProjectExpenseSearchInfo | ||||
| import com.ffii.tsms.modules.project.service.ProjectExpenseService | import com.ffii.tsms.modules.project.service.ProjectExpenseService | ||||
| import com.ffii.tsms.modules.project.web.models.EditProjectExpenseRequest | |||||
| import com.ffii.tsms.modules.project.web.models.ProjectExpenseRequest | import com.ffii.tsms.modules.project.web.models.ProjectExpenseRequest | ||||
| import jakarta.validation.Valid | import jakarta.validation.Valid | ||||
| import org.springframework.http.HttpStatus | |||||
| import org.springframework.web.bind.annotation.* | import org.springframework.web.bind.annotation.* | ||||
| @RestController | @RestController | ||||
| @@ -21,4 +23,15 @@ class ProjectExpenseController( | |||||
| fun saveProjectExpense(@Valid @RequestBody newProjectExpense: List<ProjectExpenseRequest>): Boolean { | fun saveProjectExpense(@Valid @RequestBody newProjectExpense: List<ProjectExpenseRequest>): Boolean { | ||||
| return projectExpenseService.createProjectExpense(newProjectExpense) | return projectExpenseService.createProjectExpense(newProjectExpense) | ||||
| } | } | ||||
| @DeleteMapping("/{id}") | |||||
| @ResponseStatus(HttpStatus.NO_CONTENT) | |||||
| fun deleteProjectExpense(@PathVariable id: Long){ | |||||
| projectExpenseService.deleteProjectExpense(id) | |||||
| } | |||||
| @PostMapping("/update") | |||||
| fun updateProjectExpenseDetail(@RequestBody req: EditProjectExpenseRequest): ProjectExpenseSearchInfo?{ | |||||
| return projectExpenseService.updateProjectExpenseDetail(req) | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,14 @@ | |||||
| package com.ffii.tsms.modules.project.web.models | |||||
| import jakarta.validation.constraints.NotNull | |||||
| import java.time.LocalDate | |||||
| data class EditProjectExpenseRequest ( | |||||
| val id: Long?, | |||||
| val expenseNo: String?, | |||||
| // val issueDate: LocalDate?, | |||||
| // val receiptDate: LocalDate?, | |||||
| @field:NotNull(message = "amount cannot be empty") | |||||
| val amount: Double, | |||||
| val remarks: String?, | |||||
| ) | |||||
| @@ -11,8 +11,7 @@ data class ProjectExpenseRequest ( | |||||
| @field:NotNull(message = "projectId cannot be empty") | @field:NotNull(message = "projectId cannot be empty") | ||||
| val projectId: Long, | val projectId: Long, | ||||
| @field:NotNull(message = "issueDate cannot be empty") | |||||
| val issueDate: LocalDate, | |||||
| val issueDate: LocalDate?, | |||||
| val receiptDate: LocalDate?, | val receiptDate: LocalDate?, | ||||
| @@ -0,0 +1,7 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset jason:project_expense_issueDate_NULL | |||||
| ALTER TABLE tsmsdb.project_expense MODIFY COLUMN issueDate date NULL; | |||||