diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt index 24d3c24..d4b9368 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt @@ -1,19 +1,23 @@ package com.ffii.fpsms.modules.pickOrder.service import com.ffii.core.response.RecordsRes +import com.ffii.core.support.AbstractBaseEntityService import com.ffii.core.support.JdbcDao import com.ffii.fpsms.modules.common.SecurityUtils +import com.ffii.fpsms.modules.pickOrder.entity.PickOrder import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus import com.ffii.fpsms.modules.pickOrder.web.models.* import com.ffii.fpsms.modules.stock.entity.InventoryLotLineRepository import com.ffii.fpsms.modules.stock.entity.StockOut +import com.ffii.fpsms.modules.stock.entity.StockOutLIneRepository import com.ffii.fpsms.modules.stock.entity.StockOutRepository import com.ffii.fpsms.modules.stock.entity.projection.CurrentInventoryItemInfo import com.ffii.fpsms.modules.stock.service.InventoryService import com.ffii.fpsms.modules.stock.service.StockOutLineService import com.ffii.fpsms.modules.stock.service.SuggestedPickLotService +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.SuggestedPickLotForPoRequest import com.ffii.fpsms.modules.user.entity.UserRepository @@ -23,6 +27,7 @@ import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +import java.io.IOException import java.io.Serializable import java.math.BigDecimal import java.time.LocalDate @@ -34,13 +39,13 @@ import kotlin.jvm.optionals.getOrNull open class PickOrderService( private val jdbcDao: JdbcDao, val pickOrderRepository: PickOrderRepository, - val stockOutLineService: StockOutLineService, val suggestedPickLotService: SuggestedPickLotService, val userService: UserService, + private val stockOutLIneRepository: StockOutLIneRepository, private val inventoryLotLineRepository: InventoryLotLineRepository, val inventoryService: InventoryService, private val stockOutRepository: StockOutRepository -) { +): AbstractBaseEntityService(jdbcDao, pickOrderRepository) { open fun localDateTimeParse(dateTime: String?, pattern: String? = "YYYY-MM-DD hh:mm:ss"): LocalDateTime? { try { val formatter = DateTimeFormatter.ofPattern(pattern!!) @@ -424,4 +429,30 @@ open class PickOrderService( return releaseConsoPickOrderInfo(request.consoCode) } + + @Throws(IOException::class) + @Transactional + open fun completeStockOut(consoCode: String): Boolean { + val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElseThrow() + val stockOutLines = stockOutLIneRepository.findAllByStockOutId(stockOut.id!!) + val unfinishedLines = stockOutLines.filter { + it.status != StockOutLineStatus.COMPLETE.status + && it.status != StockOutLineStatus.REJECTED.status + } + if (unfinishedLines.isEmpty()) { + stockOut.apply { + this.status = StockOutStatus.COMPLETE.status + } + stockOutRepository.save(stockOut) + val pickOrderEntries = pickOrderRepository.findAllByConsoCode(consoCode).map { + it.apply { + it.status = PickOrderStatus.COMPLETED + } + } + pickOrderRepository.saveAll(pickOrderEntries) + return true + } else { + return false + } + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt index 5d507cf..928637a 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt @@ -101,4 +101,10 @@ class PickOrderController( fun pickConsoPickOrderInfo(@PathVariable consoCode: String): ReleasePickOrderInfoResponse { return pickOrderService.releaseConsoPickOrderInfo(consoCode); } + + @PostMapping("/consoPickOrder/complete/{consoCode}") + fun completeConsoPickOrders(@PathVariable consoCode: String): Boolean { + return pickOrderService.completeStockOut(consoCode) + } + } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLIneRepository.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLIneRepository.kt index 26355de..f359c6d 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLIneRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLIneRepository.kt @@ -14,4 +14,6 @@ interface StockOutLIneRepository: AbstractRepository { fun findAllByIdIn(id: List): List fun findStockOutLineInfoById(id: Long): StockOutLineInfo + + fun findAllByStockOutId(stockOutId: Long): List } diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutService.kt index c113541..c96e0a4 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutService.kt @@ -5,6 +5,8 @@ import com.ffii.core.support.JdbcDao import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.modules.master.entity.ItemsRepository import com.ffii.fpsms.modules.master.web.models.MessageResponse +import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus import com.ffii.fpsms.modules.stock.entity.* import com.ffii.fpsms.modules.stock.web.model.SaveStockOutRequest import com.ffii.fpsms.modules.stock.web.model.StockOutLineStatus @@ -18,79 +20,11 @@ import java.time.LocalDateTime @Service open class StockOutService( private val jdbcDao: JdbcDao, + private val pickOrderRepository: PickOrderRepository, private val stockOutRepository: StockOutRepository, private val stockOutLIneRepository: StockOutLIneRepository, private val stockOutLineService: StockOutLineService, private val stockLedgerRepository: StockLedgerRepository, ): AbstractBaseEntityService(jdbcDao, stockOutRepository) { - @Throws(IOException::class) - @Transactional - open fun complete(request: SaveStockOutRequest): MessageResponse { - if (request.id === null) { - return MessageResponse( - id = null, - code = null, - name = null, - type = null, - message = "id cannot be null", - errorPosition = "id" - ) - } - /// checking pick quantity - val stockOut = stockOutRepository.findById(request.id).orElseThrow() - val allLines = stockOutLineService.findAllByStockOutId(request.id) - val isBalanced = allLines.all{ - val status = it.status - var sum = 0.0 - when (status) { - StockOutLineStatus.PENDING.status -> sum += it.qty ?: 0.0; -// StockOutLineStatus.PICKED.status -> sum -= it.qty ?: 0.0; - } - sum == 0.0 - } - if (!isBalanced) { - return MessageResponse( - id = request.id, - code = "stockOut.consoCode", - name = "stockOut.pickOrderCode ?: stockOut.deliveryOrderCode", - type = stockOut.type, - message = "there are items not picked", - errorPosition = null - ) - } - // remove base record - val baseLines = allLines.filter { stockOutLine -> stockOutLine.status === StockOutLineStatus.PENDING.status} - // update pick record to complete - val pickLines = allLines -// .filter { stockOutLine -> stockOutLine.status === StockOutLineStatus.PICKED.status} - .map { stockOutLine -> - stockOutLine.apply { - status = StockOutLineStatus.COMPLETE.status - } - } - // write ledger - val ledgers = pickLines.map {stockOutLine -> - StockLedger().apply { - this.stockOutLine = stockOutLine -// this.inventory = stockOutLine.inventory - outQty = stockOutLine.qty - } - } - stockLedgerRepository.saveAll(ledgers) - stockOutLIneRepository.deleteAll(baseLines) - stockOutLIneRepository.saveAll(pickLines) - stockOut.apply { - completeDate = LocalDateTime.now() - status = StockOutStatus.COMPLETE.status - } - val savedStockOut = stockOutRepository.saveAndFlush(stockOut) - return MessageResponse( - id = savedStockOut.id, - code = "savedStockOut.consoCode", - name = "savedStockOut.pickOrderCode ?: savedStockOut.deliveryOrderCode", - type = savedStockOut.type, - message = "stock out completed", - errorPosition = null - ) - } + } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/web/StockOutController.kt b/src/main/java/com/ffii/fpsms/modules/stock/web/StockOutController.kt new file mode 100644 index 0000000..ca0a074 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/stock/web/StockOutController.kt @@ -0,0 +1,12 @@ +package com.ffii.fpsms.modules.stock.web + +import com.ffii.fpsms.modules.stock.service.StockOutService +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/stockOut") +class StockOutController( + private val stockOutService: StockOutService +) { +} \ No newline at end of file