| @@ -15,7 +15,7 @@ open class M18TokenService( | |||||
| private val m18Config: M18Config | private val m18Config: M18Config | ||||
| ) { | ) { | ||||
| @Bean | |||||
| // @Bean | |||||
| fun run() { | fun run() { | ||||
| // val params: MutableMap<String, String> = mutableMapOf( | // val params: MutableMap<String, String> = mutableMapOf( | ||||
| // "grant_type" to m18Config.GRANT_TYPE, | // "grant_type" to m18Config.GRANT_TYPE, | ||||
| @@ -153,6 +153,7 @@ open class PickOrderService( | |||||
| + " i.name as itemName, " | + " i.name as itemName, " | ||||
| + " pol.qty as qty, " | + " pol.qty as qty, " | ||||
| + " max(uc.code) as uom, " | + " max(uc.code) as uom, " | ||||
| + " group_concat(JSON_ARRAY(ill.id)) as lotLineId, " | |||||
| + " group_concat(JSON_ARRAY(w.name)) as warehouse, " | + " group_concat(JSON_ARRAY(w.name)) as warehouse, " | ||||
| + " group_concat(JSON_ARRAY(il.lotNo)) as suggestedLotNo " | + " group_concat(JSON_ARRAY(il.lotNo)) as suggestedLotNo " | ||||
| + " from pick_order po " | + " from pick_order po " | ||||
| @@ -8,4 +8,5 @@ import org.springframework.stereotype.Repository | |||||
| @Repository | @Repository | ||||
| interface QcResultRepository: AbstractRepository<QcResult, Long> { | interface QcResultRepository: AbstractRepository<QcResult, Long> { | ||||
| fun findQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId: Long): List<QcResultInfo> | fun findQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId: Long): List<QcResultInfo> | ||||
| fun findQcResultInfoByStockOutLineIdAndDeletedFalse(stockOutLineId: Long): List<QcResultInfo> | |||||
| } | } | ||||
| @@ -10,7 +10,9 @@ interface QcResultInfo { | |||||
| val name: String | val name: String | ||||
| @get:Value("#{target.qcItem.code}") | @get:Value("#{target.qcItem.code}") | ||||
| val code: String | val code: String | ||||
| @get:Value("#{target.stockInLine.id}") | |||||
| val stockInLineId: Long | |||||
| @get:Value("#{target.stockInLine?.id}") | |||||
| val stockInLineId: Long? | |||||
| @get:Value("#{target.stockOutLine?.id}") | |||||
| val stockOutLineId: Long? | |||||
| val failQty: Double | val failQty: Double | ||||
| } | } | ||||
| @@ -57,4 +57,7 @@ open class QcResultService( | |||||
| open fun getAllQcResultInfoByStockInLineId(stockInLineId: Long): List<QcResultInfo> { | open fun getAllQcResultInfoByStockInLineId(stockInLineId: Long): List<QcResultInfo> { | ||||
| return qcResultRepository.findQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId) | return qcResultRepository.findQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId) | ||||
| } | } | ||||
| open fun getAllQcResultInfoByStockOutLineId(stockOutLineId: Long): List<QcResultInfo> { | |||||
| return qcResultRepository.findQcResultInfoByStockOutLineIdAndDeletedFalse(stockOutLineId) | |||||
| } | |||||
| } | } | ||||
| @@ -23,4 +23,9 @@ class QcResultController( | |||||
| fun getAllQcResultInfoByStockInLineId(@PathVariable stockInLineId: Long): List<QcResultInfo> { | fun getAllQcResultInfoByStockInLineId(@PathVariable stockInLineId: Long): List<QcResultInfo> { | ||||
| return qcResultService.getAllQcResultInfoByStockInLineId(stockInLineId) | return qcResultService.getAllQcResultInfoByStockInLineId(stockInLineId) | ||||
| } | } | ||||
| @GetMapping("/pick-order/{stockOutLineId}") | |||||
| fun getAllQcResultInfoByStockOutLineId(@PathVariable stockOutLineId: Long): List<QcResultInfo> { | |||||
| return qcResultService.getAllQcResultInfoByStockOutLineId(stockOutLineId) | |||||
| } | |||||
| } | } | ||||
| @@ -10,4 +10,8 @@ interface StockOutLIneRepository: AbstractRepository<StockOutLine, Long> { | |||||
| fun findAllByStockOutIdAndDeletedFalse(stockOutId: Long): List<StockOutLine> | fun findAllByStockOutIdAndDeletedFalse(stockOutId: Long): List<StockOutLine> | ||||
| // fun findAllByStockOutIdAndDeletedFalse(stockOutId: Long, status: StockOutStatus): List<StockOutLine> | // fun findAllByStockOutIdAndDeletedFalse(stockOutId: Long, status: StockOutStatus): List<StockOutLine> | ||||
| fun findAllByPickOrderLineIdAndDeletedFalse(pickOrderLineId: Long): List<StockOutLineInfo> | fun findAllByPickOrderLineIdAndDeletedFalse(pickOrderLineId: Long): List<StockOutLineInfo> | ||||
| fun findAllByIdIn(id: List<Long>): List<StockOutLineInfo> | |||||
| fun findStockOutLineInfoById(id: Long): StockOutLineInfo | |||||
| } | } | ||||
| @@ -20,11 +20,13 @@ open class StockOutLine: BaseEntity<Long>() { | |||||
| @Column(name = "qty") | @Column(name = "qty") | ||||
| open var qty: Double? = null | open var qty: Double? = null | ||||
| @JsonBackReference | |||||
| @NotNull | @NotNull | ||||
| @ManyToOne | @ManyToOne | ||||
| @JoinColumn(name = "stockOutId") | @JoinColumn(name = "stockOutId") | ||||
| open var stockOut: StockOut? = null | open var stockOut: StockOut? = null | ||||
| @JsonBackReference | |||||
| @ManyToOne | @ManyToOne | ||||
| @JoinColumn(name = "inventoryLotLineId") | @JoinColumn(name = "inventoryLotLineId") | ||||
| open var inventoryLotLine: InventoryLotLine? = null | open var inventoryLotLine: InventoryLotLine? = null | ||||
| @@ -10,17 +10,21 @@ interface StockOutLineInfo { | |||||
| val itemId: Long | val itemId: Long | ||||
| @get:Value("#{target.item?.name}") | @get:Value("#{target.item?.name}") | ||||
| val itemName: String? | val itemName: String? | ||||
| @get:Value("#{target.item?.code}") | |||||
| val itemNo: String | val itemNo: String | ||||
| val qty: BigDecimal | val qty: BigDecimal | ||||
| @get:Value("#{target.stockOut?.id}") | @get:Value("#{target.stockOut?.id}") | ||||
| val stockOutId: Long | val stockOutId: Long | ||||
| @get:Value("#{target.pickOrderLine?.id}") | @get:Value("#{target.pickOrderLine?.id}") | ||||
| val pickOrderLineId: Long | |||||
| val pickOrderLineId: Long? | |||||
| @get:Value("#{target.inventoryLotLine?.id}") | @get:Value("#{target.inventoryLotLine?.id}") | ||||
| val inventoryLotLineId: Long? | val inventoryLotLineId: Long? | ||||
| @get:Value("#{target.inventoryLotLine?.inventoryLot?.lotNo}") | |||||
| val lotNo: String? | |||||
| val status: String | val status: String | ||||
| val pickTime: LocalDateTime? | val pickTime: LocalDateTime? | ||||
| } | } | ||||
| @@ -193,6 +193,26 @@ open class StockInLineService( | |||||
| @Transactional | @Transactional | ||||
| fun updatePurchaseOrderLineStatus(request: SaveStockInLineRequest) { | fun updatePurchaseOrderLineStatus(request: SaveStockInLineRequest) { | ||||
| println(request.status) | println(request.status) | ||||
| if (request.status == StockInLineStatus.RECEIVING.status) { | |||||
| val unQcedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId) | |||||
| .filter { | |||||
| it.status != StockInLineStatus.RECEIVING.status | |||||
| && it.status != StockInLineStatus.RECEIVED.status | |||||
| && it.status != StockInLineStatus.COMPLETE.status | |||||
| && it.status != StockInLineStatus.REJECT.status | |||||
| } | |||||
| if (unQcedLines.isEmpty()) { | |||||
| // all stock in lines finished | |||||
| // change status of purchase order line | |||||
| val purchaseOrderLine = polRepository.findById(request.purchaseOrderLineId).orElseThrow() | |||||
| purchaseOrderLine.apply { | |||||
| status = PurchaseOrderLineStatus.RECEIVING | |||||
| } | |||||
| polRepository.saveAndFlush(purchaseOrderLine) | |||||
| } else { | |||||
| // still have unQcedLines lines | |||||
| } | |||||
| } | |||||
| if (request.status == StockInLineStatus.COMPLETE.status || request.status == StockInLineStatus.REJECT.status) { | if (request.status == StockInLineStatus.COMPLETE.status || request.status == StockInLineStatus.REJECT.status) { | ||||
| // val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndStatusNotAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId, status = request.status!!) | // val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndStatusNotAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId, status = request.status!!) | ||||
| val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId) | val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId) | ||||
| @@ -5,12 +5,11 @@ import com.ffii.core.support.JdbcDao | |||||
| import com.ffii.fpsms.modules.master.entity.ItemsRepository | import com.ffii.fpsms.modules.master.entity.ItemsRepository | ||||
| import com.ffii.fpsms.modules.master.web.models.MessageResponse | import com.ffii.fpsms.modules.master.web.models.MessageResponse | ||||
| import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLineRepository | import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLineRepository | ||||
| import com.ffii.fpsms.modules.pickOrder.enums.PickOrderLineStatus | |||||
| import com.ffii.fpsms.modules.stock.entity.* | import com.ffii.fpsms.modules.stock.entity.* | ||||
| import com.ffii.fpsms.modules.stock.entity.projection.StockOutLineInfo | import com.ffii.fpsms.modules.stock.entity.projection.StockOutLineInfo | ||||
| import com.ffii.fpsms.modules.stock.web.model.SaveStockOutLineRequest | |||||
| import com.ffii.fpsms.modules.stock.web.model.SaveStockOutRequest | |||||
| import com.ffii.fpsms.modules.stock.web.model.StockOutLineStatus | |||||
| import com.ffii.fpsms.modules.stock.web.model.StockOutStatus | |||||
| import com.ffii.fpsms.modules.stock.web.model.* | |||||
| import org.springframework.data.repository.query.Param | |||||
| import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
| import org.springframework.transaction.annotation.Transactional | import org.springframework.transaction.annotation.Transactional | ||||
| import java.io.IOException | import java.io.IOException | ||||
| @@ -61,21 +60,30 @@ open class StockOutLineService( | |||||
| } | } | ||||
| @Transactional | @Transactional | ||||
| open fun create(request: SaveStockOutLineRequest): MessageResponse { | |||||
| open fun create(request: CreateStockOutLineRequest): MessageResponse { | |||||
| // pick flow step 1 | |||||
| // println(request.pickOrderLineId) | |||||
| val stockOut = stockOutRepository.findByConsoPickOrderCode(request.consoCode).orElseThrow() | val stockOut = stockOutRepository.findByConsoPickOrderCode(request.consoCode).orElseThrow() | ||||
| val pickOrderLine = pickOrderLineRepository.findById(request.pickOrderLineId).orElseThrow() | |||||
| val item = itemRepository.findById(request.itemId).orElseThrow() | |||||
| val pickOrderLine = pickOrderLineRepository.saveAndFlush( | |||||
| pickOrderLineRepository.findById(request.pickOrderLineId).orElseThrow() | |||||
| .apply { | |||||
| this.status = PickOrderLineStatus.PICKING | |||||
| } | |||||
| ) | |||||
| val item = itemRepository.findById(pickOrderLine.item!!.id!!).orElseThrow() | |||||
| val inventoryLotLine = inventoryLotLineRepository.findById(request.inventoryLotLineId).orElseThrow() | val inventoryLotLine = inventoryLotLineRepository.findById(request.inventoryLotLineId).orElseThrow() | ||||
| val stockOutLine = StockOutLine() | val stockOutLine = StockOutLine() | ||||
| .apply { | .apply { | ||||
| this.item = item | this.item = item | ||||
| this.qty = request.qty | this.qty = request.qty | ||||
| this.stockOut = stockOut | this.stockOut = stockOut | ||||
| this.inventoryLotLine | |||||
| this.inventoryLotLine = inventoryLotLine | |||||
| this.pickOrderLine = pickOrderLine | this.pickOrderLine = pickOrderLine | ||||
| this.status = StockOutLineStatus.PENDING.status | this.status = StockOutLineStatus.PENDING.status | ||||
| } | } | ||||
| val savedStockOutLine = saveAndFlush(stockOutLine) | val savedStockOutLine = saveAndFlush(stockOutLine) | ||||
| val mappedSavedStockOutLine = stockOutLineRepository.findStockOutLineInfoById(savedStockOutLine.id!!) | |||||
| // println("triggering") | |||||
| return MessageResponse( | return MessageResponse( | ||||
| id = savedStockOutLine.id, | id = savedStockOutLine.id, | ||||
| name = savedStockOutLine.inventoryLotLine!!.inventoryLot!!.lotNo, | name = savedStockOutLine.inventoryLotLine!!.inventoryLot!!.lotNo, | ||||
| @@ -83,13 +91,126 @@ open class StockOutLineService( | |||||
| type = savedStockOutLine.status, | type = savedStockOutLine.status, | ||||
| message = "success", | message = "success", | ||||
| errorPosition = null, | errorPosition = null, | ||||
| entity = savedStockOutLine, | |||||
| entity = mappedSavedStockOutLine, | |||||
| ) | ) | ||||
| } | } | ||||
| @Transactional | @Transactional | ||||
| open fun update(request: SaveStockOutLineRequest) { | |||||
| val stockOutLine = stockOutLineRepository.findById(request.id!!).orElseThrow() | |||||
| fun handleQc(stockOutLine: StockOutLine, request: UpdateStockOutLineRequest): List<StockOutLine?> { | |||||
| var newStockOutLine: StockOutLine? = null | |||||
| if (request.qty < stockOutLine.qty!!) { | |||||
| newStockOutLine = StockOutLine().apply { | |||||
| this.pickOrderLine = stockOutLine.pickOrderLine | |||||
| this.stockOut = stockOutLine.stockOut | |||||
| this.item = stockOutLine.item | |||||
| this.qty = stockOutLine.qty!! - request.qty | |||||
| this.status = StockOutLineStatus.DETERMINE1.status // escalated | |||||
| } | |||||
| } | |||||
| val inventoryLotLine = if (request.inventoryLotLineId != null) | |||||
| inventoryLotLineRepository.findById(request.inventoryLotLineId).orElseThrow() | |||||
| else null | |||||
| stockOutLine.apply { | |||||
| this.inventoryLotLine = inventoryLotLine ?: stockOutLine.inventoryLotLine | |||||
| this.qty = request.qty | |||||
| this.status = StockOutLineStatus.COMPLETE.status // complete | |||||
| } | |||||
| return listOf(stockOutLine, newStockOutLine) | |||||
| } | |||||
| @Transactional | |||||
| fun handleLotChangeApprovalOrReject(stockOutLine: StockOutLine, request: UpdateStockOutLineRequest): List<StockOutLine?> { | |||||
| /** | |||||
| * @param request.qty | |||||
| * qty that requires lot change | |||||
| */ | |||||
| var newStockOutLine: StockOutLine? = null | |||||
| if (request.qty < stockOutLine.qty!!) { | |||||
| newStockOutLine = StockOutLine().apply { | |||||
| this.pickOrderLine = stockOutLine.pickOrderLine | |||||
| this.stockOut = stockOutLine.stockOut | |||||
| this.item = stockOutLine.item | |||||
| this.qty = stockOutLine.qty!! - request.qty | |||||
| this.status = StockOutLineStatus.REJECTED.status // original status | |||||
| } | |||||
| } | |||||
| stockOutLine.apply { | |||||
| this.qty = request.qty | |||||
| this.status = StockOutLineStatus.LOT_CHANGE_APPROVAL.status // require new lot no | |||||
| } | |||||
| return listOf(stockOutLine, newStockOutLine) | |||||
| } | |||||
| // @Transactional | |||||
| // fun assignNewLotLine(stockOutLine: StockOutLine, request: UpdateStockOutLineRequest): List<StockOutLine?> { | |||||
| // val newInventoryLotLine = inventoryLotLineRepository.findById(request.inventoryLotLineId).orElseThrow() | |||||
| // return listOf(stockOutLine.apply { | |||||
| // this.inventoryLotLine = newInventoryLotLine | |||||
| // }) | |||||
| // } | |||||
| private fun checkIsStockOutLineCompleted(pickOrderLineId: Long) { | |||||
| val unfinishedLine = stockOutLineRepository | |||||
| .findAllByPickOrderLineIdAndDeletedFalse(pickOrderLineId) | |||||
| .filter { | |||||
| it.status != StockOutLineStatus.COMPLETE.status | |||||
| || it.status != StockOutLineStatus.REJECTED.status | |||||
| } | |||||
| if (unfinishedLine.isEmpty()) { | |||||
| // set pick order line status to complete | |||||
| val pol = pickOrderLineRepository.findById(pickOrderLineId).orElseThrow() | |||||
| pickOrderLineRepository.save( | |||||
| pol.apply { | |||||
| this.status = PickOrderLineStatus.COMPLETED | |||||
| } | |||||
| ) | |||||
| } else { | |||||
| // return unfinished ids to frontend | |||||
| } | |||||
| } | |||||
| @Transactional | |||||
| open fun update(request: UpdateStockOutLineRequest): MessageResponse { | |||||
| val stockOutLine = stockOutLineRepository.findById(request.id).orElseThrow() | |||||
| var stockOutLineEntries: List<StockOutLine?> = listOf() | |||||
| // pick flow step 2 | |||||
| if (request.status == StockOutLineStatus.COMPLETE.status) { // doing qc | |||||
| println("doing sth") | |||||
| if (request.qty <= 0) { | |||||
| return MessageResponse( | |||||
| id = null, | |||||
| code = null, | |||||
| name = null, | |||||
| type = "qty == 0", | |||||
| message = "qty cannot be 0", | |||||
| errorPosition = "request.qty", | |||||
| ) | |||||
| } | |||||
| stockOutLineEntries = handleQc(stockOutLine, request) | |||||
| } | |||||
| if (request.status == StockOutLineStatus.LOT_CHANGE_APPROVAL.status) { | |||||
| if (request.qty < 0) { | |||||
| return MessageResponse( | |||||
| id = null, | |||||
| code = null, | |||||
| name = null, | |||||
| type = "qty < 0", | |||||
| message = "qty cannot be smaller than 0", | |||||
| errorPosition = "request.qty", | |||||
| ) | |||||
| } | |||||
| stockOutLineEntries = handleLotChangeApprovalOrReject(stockOutLine, request) | |||||
| } | |||||
| checkIsStockOutLineCompleted(pickOrderLineId = stockOutLine.pickOrderLine!!.id!!) | |||||
| val savedEntries = stockOutLineRepository.saveAllAndFlush(stockOutLineEntries.filterNotNull()) | |||||
| val lineInfoList = stockOutLineRepository.findAllByIdIn(savedEntries.map { it.id!! }) | |||||
| return MessageResponse( | |||||
| id = 0, | |||||
| name = "id: ${lineInfoList.map { it.id }.joinToString(separator = ",")}", | |||||
| code = stockOutLine.stockOut!!.consoPickOrderCode, | |||||
| type = lineInfoList.joinToString(separator = ",") { it.status }, | |||||
| message = "success", | |||||
| errorPosition = null, | |||||
| entity = lineInfoList, | |||||
| ) | |||||
| } | } | ||||
| } | } | ||||
| @@ -44,7 +44,7 @@ open class StockOutService( | |||||
| var sum = 0.0 | var sum = 0.0 | ||||
| when (status) { | when (status) { | ||||
| StockOutLineStatus.PENDING.status -> sum += it.qty ?: 0.0; | StockOutLineStatus.PENDING.status -> sum += it.qty ?: 0.0; | ||||
| StockOutLineStatus.PICKED.status -> sum -= it.qty ?: 0.0; | |||||
| // StockOutLineStatus.PICKED.status -> sum -= it.qty ?: 0.0; | |||||
| } | } | ||||
| sum == 0.0 | sum == 0.0 | ||||
| } | } | ||||
| @@ -62,7 +62,7 @@ open class StockOutService( | |||||
| val baseLines = allLines.filter { stockOutLine -> stockOutLine.status === StockOutLineStatus.PENDING.status} | val baseLines = allLines.filter { stockOutLine -> stockOutLine.status === StockOutLineStatus.PENDING.status} | ||||
| // update pick record to complete | // update pick record to complete | ||||
| val pickLines = allLines | val pickLines = allLines | ||||
| .filter { stockOutLine -> stockOutLine.status === StockOutLineStatus.PICKED.status} | |||||
| // .filter { stockOutLine -> stockOutLine.status === StockOutLineStatus.PICKED.status} | |||||
| .map { stockOutLine -> | .map { stockOutLine -> | ||||
| stockOutLine.apply { | stockOutLine.apply { | ||||
| status = StockOutLineStatus.COMPLETE.status | status = StockOutLineStatus.COMPLETE.status | ||||
| @@ -1,16 +1,15 @@ | |||||
| package com.ffii.fpsms.modules.stock.web | package com.ffii.fpsms.modules.stock.web | ||||
| import com.ffii.fpsms.modules.master.web.models.MessageResponse | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine | ||||
| import com.ffii.fpsms.modules.stock.entity.StockOutLine | import com.ffii.fpsms.modules.stock.entity.StockOutLine | ||||
| import com.ffii.fpsms.modules.stock.entity.projection.StockOutLineInfo | import com.ffii.fpsms.modules.stock.entity.projection.StockOutLineInfo | ||||
| import com.ffii.fpsms.modules.stock.service.StockInLineService | import com.ffii.fpsms.modules.stock.service.StockInLineService | ||||
| import com.ffii.fpsms.modules.stock.service.StockOutLineService | import com.ffii.fpsms.modules.stock.service.StockOutLineService | ||||
| import com.ffii.fpsms.modules.stock.web.model.CreateStockOutLineRequest | |||||
| import com.ffii.fpsms.modules.stock.web.model.UpdateStockOutLineRequest | |||||
| import jakarta.validation.Valid | import jakarta.validation.Valid | ||||
| import org.springframework.web.bind.annotation.GetMapping | |||||
| import org.springframework.web.bind.annotation.PathVariable | |||||
| import org.springframework.web.bind.annotation.PostMapping | |||||
| import org.springframework.web.bind.annotation.RequestMapping | |||||
| import org.springframework.web.bind.annotation.RestController | |||||
| import org.springframework.web.bind.annotation.* | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/stockOutLine") | @RequestMapping("/stockOutLine") | ||||
| @@ -22,4 +21,13 @@ class StockOutLineController( | |||||
| return stockOutLineService.getAllStockOutLineByPickOrderLineId(pickOrderLineId) | return stockOutLineService.getAllStockOutLineByPickOrderLineId(pickOrderLineId) | ||||
| } | } | ||||
| @PostMapping("/create") | |||||
| fun create(@Valid @RequestBody request: CreateStockOutLineRequest): MessageResponse { | |||||
| return stockOutLineService.create(request) | |||||
| } | |||||
| @PostMapping("/update") | |||||
| fun update(@Valid @RequestBody request: UpdateStockOutLineRequest): MessageResponse { | |||||
| println("triggering") | |||||
| return stockOutLineService.update(request) | |||||
| } | |||||
| } | } | ||||
| @@ -10,7 +10,6 @@ enum class StockInStatus(val status: String) { | |||||
| COMPLETE("completed"), | COMPLETE("completed"), | ||||
| // CANCELLED("cancelled") | // CANCELLED("cancelled") | ||||
| } | } | ||||
| class GameScore(val grade: String) | |||||
| enum class StockInLineStatus(val status: String) { | enum class StockInLineStatus(val status: String) { | ||||
| PENDING("pending"), | PENDING("pending"), | ||||
| QC("qc"), | QC("qc"), | ||||
| @@ -1,8 +1,9 @@ | |||||
| package com.ffii.fpsms.modules.stock.web.model | package com.ffii.fpsms.modules.stock.web.model | ||||
| import jakarta.validation.constraints.NotBlank | |||||
| import jakarta.validation.constraints.NotNull | |||||
| import java.time.LocalDate | import java.time.LocalDate | ||||
| import java.time.LocalDateTime | import java.time.LocalDateTime | ||||
| enum class StockOutStatus(val status: String) { | enum class StockOutStatus(val status: String) { | ||||
| PENDING("pending"), | PENDING("pending"), | ||||
| COMPLETE("completed"), | COMPLETE("completed"), | ||||
| @@ -10,11 +11,12 @@ enum class StockOutStatus(val status: String) { | |||||
| } | } | ||||
| enum class StockOutLineStatus(val status: String) { | enum class StockOutLineStatus(val status: String) { | ||||
| PENDING("pending"), | PENDING("pending"), | ||||
| PICKED("picked"), | |||||
| COMPLETE("completed"), | |||||
| // CANCELLED("cancelled") | |||||
| DETERMINE1("determine1"), // qc failed qty? | |||||
| LOT_CHANGE_APPROVAL("lot-change"), // just a flag for frontend | |||||
| REJECTED("rejected"), | |||||
| COMPLETE("completed"), // == picked | |||||
| } | } | ||||
| data class SaveStockOutRequest( | |||||
| data class SaveStockOutRequest( // not usable | |||||
| val id: Long?, | val id: Long?, | ||||
| val type: String, // delivery || pick || etc | val type: String, // delivery || pick || etc | ||||
| val deliveryOrderCode: String?, | val deliveryOrderCode: String?, | ||||
| @@ -25,17 +27,22 @@ data class SaveStockOutRequest( | |||||
| val handler: Long?, | val handler: Long?, | ||||
| val targetOutletId: Long?, | val targetOutletId: Long?, | ||||
| val remarks: String?, | val remarks: String?, | ||||
| val stockOutLine: List<SaveStockOutLineRequest> | |||||
| val stockOutLine: List<UpdateStockOutLineRequest> | |||||
| ) | ) | ||||
| data class SaveStockOutLineRequest( | |||||
| val id: Long?, | |||||
| data class CreateStockOutLineRequest( | |||||
| val consoCode: String, | val consoCode: String, | ||||
| val pickOrderLineId: Long, | |||||
| val inventoryLotLineId: Long, | |||||
| val qty: Double, | |||||
| ) | |||||
| data class UpdateStockOutLineRequest( | |||||
| val id: Long, | |||||
| val itemId: Long, | val itemId: Long, | ||||
| val qty: Double, | val qty: Double, | ||||
| val pickOrderLineId: Long, | val pickOrderLineId: Long, | ||||
| val inventoryLotLineId: Long, | |||||
| val status: StockOutLineStatus?, | |||||
| val status: String, | |||||
| val inventoryLotLineId: Long?, | |||||
| val pickTime: LocalDateTime?, | val pickTime: LocalDateTime?, | ||||
| val pickerId: Long? | |||||
| // val pickerId: Long? | |||||
| ) | ) | ||||