@@ -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; | |||||